From bbde91cf9df4b410a34147bbe5f359e39a71ad4c Mon Sep 17 00:00:00 2001 From: oSumAtrIX Date: Thu, 3 Aug 2023 04:06:28 +0200 Subject: [PATCH 01/67] feat(Nova Launcher): Remove `Unlock prime` patch --- .../annotations/UnlockPrimeCompatibility.kt | 12 ----- .../fingerprints/UnlockPrimeFingerprint.kt | 16 ------- .../nova/prime/patch/UnlockPrimePatch.kt | 48 ------------------- 3 files changed, 76 deletions(-) delete mode 100644 src/main/kotlin/app/revanced/patches/nova/prime/annotations/UnlockPrimeCompatibility.kt delete mode 100644 src/main/kotlin/app/revanced/patches/nova/prime/fingerprints/UnlockPrimeFingerprint.kt delete mode 100644 src/main/kotlin/app/revanced/patches/nova/prime/patch/UnlockPrimePatch.kt diff --git a/src/main/kotlin/app/revanced/patches/nova/prime/annotations/UnlockPrimeCompatibility.kt b/src/main/kotlin/app/revanced/patches/nova/prime/annotations/UnlockPrimeCompatibility.kt deleted file mode 100644 index 8ab3cc780..000000000 --- a/src/main/kotlin/app/revanced/patches/nova/prime/annotations/UnlockPrimeCompatibility.kt +++ /dev/null @@ -1,12 +0,0 @@ -package app.revanced.patches.nova.prime.annotations - -import app.revanced.patcher.annotation.Compatibility -import app.revanced.patcher.annotation.Package - -@Compatibility( - [ - Package("com.teslacoilsw.launcher") - ] -) -@Target(AnnotationTarget.CLASS) -internal annotation class UnlockPrimeCompatibility \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/nova/prime/fingerprints/UnlockPrimeFingerprint.kt b/src/main/kotlin/app/revanced/patches/nova/prime/fingerprints/UnlockPrimeFingerprint.kt deleted file mode 100644 index 69d2902a4..000000000 --- a/src/main/kotlin/app/revanced/patches/nova/prime/fingerprints/UnlockPrimeFingerprint.kt +++ /dev/null @@ -1,16 +0,0 @@ -package app.revanced.patches.nova.prime.fingerprints - -import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.Opcode - -object UnlockPrimeFingerprint : MethodFingerprint( - "V", - opcodes = listOf( - Opcode.IPUT_OBJECT, - Opcode.CONST_STRING, - Opcode.CONST_4, - Opcode.INVOKE_INTERFACE, - Opcode.MOVE_RESULT - ), - strings = listOf("1") -) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/nova/prime/patch/UnlockPrimePatch.kt b/src/main/kotlin/app/revanced/patches/nova/prime/patch/UnlockPrimePatch.kt deleted file mode 100644 index 4c1546041..000000000 --- a/src/main/kotlin/app/revanced/patches/nova/prime/patch/UnlockPrimePatch.kt +++ /dev/null @@ -1,48 +0,0 @@ -package app.revanced.patches.nova.prime.patch - -import app.revanced.extensions.toErrorResult -import app.revanced.patcher.annotation.Description -import app.revanced.patcher.annotation.Name -import app.revanced.patcher.data.BytecodeContext -import app.revanced.patcher.extensions.InstructionExtensions.addInstruction -import app.revanced.patcher.patch.BytecodePatch -import app.revanced.patcher.patch.PatchResult -import app.revanced.patcher.patch.PatchResultSuccess -import app.revanced.patcher.patch.annotations.Patch -import app.revanced.patches.nova.prime.annotations.UnlockPrimeCompatibility -import app.revanced.patches.nova.prime.fingerprints.UnlockPrimeFingerprint -import org.jf.dexlib2.builder.instruction.BuilderInstruction11x - -@Patch -@Name("Unlock prime") -@Description("Unlocks Nova Prime and all functions of the app.") -@UnlockPrimeCompatibility -class UnlockPrimePatch : BytecodePatch( - listOf( - UnlockPrimeFingerprint - ) -) { - private companion object { - // Any value except 0 unlocks prime, but 512 is needed for a protection mechanism - // which would reset the preferences if the value on disk had changed after a restart. - const val PRIME_STATUS: Int = 512 - } - - override fun execute(context: BytecodeContext): PatchResult { - UnlockPrimeFingerprint.result?.apply { - val insertIndex = scanResult.patternScanResult!!.endIndex + 1 - - val primeStatusRegister = - (mutableMethod.implementation!!.instructions[insertIndex - 1] as BuilderInstruction11x).registerA - - mutableMethod.addInstruction( - insertIndex, - """ - const/16 v$primeStatusRegister, $PRIME_STATUS - """ - ) - } ?: return UnlockPrimeFingerprint.toErrorResult() - - return PatchResultSuccess() - } -} From 6bc51cd906d439afa08f944db72d038c5e7d771c Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 3 Aug 2023 02:09:26 +0000 Subject: [PATCH 02/67] chore(release): 2.188.0-dev.1 [skip ci] # [2.188.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v2.187.0...v2.188.0-dev.1) (2023-08-03) ### Features * **Nova Launcher:** Remove `Unlock prime` patch ([bbde91c](https://github.com/ReVanced/revanced-patches/commit/bbde91cf9df4b410a34147bbe5f359e39a71ad4c)) --- CHANGELOG.md | 7 +++++++ gradle.properties | 2 +- patches.json | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3f5514754..2cb8adc3d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [2.188.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v2.187.0...v2.188.0-dev.1) (2023-08-03) + + +### Features + +* **Nova Launcher:** Remove `Unlock prime` patch ([bbde91c](https://github.com/ReVanced/revanced-patches/commit/bbde91cf9df4b410a34147bbe5f359e39a71ad4c)) + # [2.187.0](https://github.com/ReVanced/revanced-patches/compare/v2.186.0...v2.187.0) (2023-08-02) diff --git a/gradle.properties b/gradle.properties index d5adb5519..6fc514514 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ org.gradle.parallel = true org.gradle.caching = true kotlin.code.style = official -version = 2.187.0 +version = 2.188.0-dev.1 diff --git a/patches.json b/patches.json index ed58a8b53..a3f6f7af4 100644 --- a/patches.json +++ b/patches.json @@ -1 +1 @@ -[{"name":"Always autorepeat","description":"Always repeats the playing video again.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Auto claim channel points","description":"Automatically claim Channel Points.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Background play","description":"Enables playing music in the background.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Block audio ads","description":"Blocks audio ads in streams and VODs.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Block embedded ads","description":"Blocks embedded stream ads using services like TTV.lol or PurpleAdBlocker.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Block video ads","Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Block video ads","description":"Blocks video ads in streams and VODs.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Bypass certificate checks","description":"Bypasses certificate checks which prevent YouTube Music from working on Android Auto.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Change package name","description":"Changes the package name.","version":"0.0.0","excluded":true,"options":[{"key":"packageName","title":"Package name","description":"The name of the package to rename of the app.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[]},{"name":"Client spoof","description":"Spoofs the client to allow playback.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Spoof signature verification"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Codecs unlock","description":"Adds more audio codec options. The new audio codecs usually result in better audio quality.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Comments","description":"Hides components related to comments.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings","LithoFilterPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Compact header","description":"Hides the music category bar at the top of the homepage.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Copy video url","description":"Adds buttons in player to copy video links.","version":"0.0.0","excluded":false,"options":[],"dependencies":["CopyVideoUrlResourcePatch","Player controls bytecode patch","Video information"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Custom branding","description":"Changes the YouTube launcher icon and name to your choice (defaults to ReVanced).","version":"0.0.0","excluded":false,"options":[{"key":"appName","title":"Application Name","description":"The name of the application it will show on your home screen.","required":true,"choices":null},{"key":"iconPath","title":"App Icon Path","description":"A path containing mipmap resource folders with icons.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Debug mode","description":"Enables Twitch\u0027s internal debugging mode.","version":"0.0.0","excluded":true,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":[]}]},{"name":"Disable Shorts on startup","description":"Disables playing YouTube Shorts when launching YouTube.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable Sync for Lemmy bottom sheet","description":"Disables the bottom sheet at the startup that asks you to signup to \"Sync for Lemmy\".","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":["v23.06.30-13:39"]},{"name":"com.laurencedawson.reddit_sync.pro","versions":[]},{"name":"com.laurencedawson.reddit_sync.dev","versions":[]}]},{"name":"Disable ads","description":"Disables ads in HexEditor.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.myprog.hexedit","versions":[]}]},{"name":"Disable ads","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":[]}]},{"name":"Disable ads","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"o.o.joey","versions":[]}]},{"name":"Disable auto captions","description":"Disable forced captions from being automatically enabled.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable fullscreen panels","description":"Disables video description and comments panel in fullscreen view.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable login requirement","description":"Do not force login.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Disable player popup panels","description":"Disables panels from appearing automatically when going into fullscreen (playlist or live chat).","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable screenshot popup","description":"Disables the popup that shows up when taking a screenshot.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Disable switching emoji to sticker in message input field","description":"Disables switching from emoji to sticker search mode in message input field","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Disable typing indicator","description":"Disables the indicator while typing a message","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Disable zoom haptics","description":"Disables haptics when zooming.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Downloads","description":"Removes download restrictions and changes the default path to download to.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Dynamic color","description":"Replaces the default Twitter Blue with the users Material You palette.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Enable android debugging","description":"Enables Android debugging capabilities.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Enable debugging","description":"Adds debugging options.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"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.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.spotify.lite","versions":[]}]},{"name":"Exclusive audio playback","description":"Enables the option to play music without video.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Export all activities","description":"Makes all app activities exportable.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"External downloads","description":"Adds support to download and save YouTube videos using an external app.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ExternalDownloadsResourcePatch","Player controls bytecode patch","Video information"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Feed filter","description":"Filters tiktok videos: removing ads, removing livestreams.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Fix google login","description":"Allows logging in with a Google account.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"HDR auto brightness","description":"Makes the brightness of HDR videos follow the system default.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide Shorts components","description":"Hides components from YouTube Shorts.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","LithoFilterPatch","HideShortsComponentsResourcePatch","ResourceMappingPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide ads","description":"Removes ads from Inshorts.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.nis.app","versions":[]}]},{"name":"Hide ads","description":"Removes ads from TikTok.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Hide ads","description":"Hides ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"jp.pxv.android","versions":[]}]},{"name":"Hide ads","description":"Removes general ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["VerticalScrollPatch"],"compatiblePackages":[{"name":"com.vanced.android.youtube","versions":[]}]},{"name":"Hide ads","description":"Hides ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Json hook"],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Hide ads","description":"Removes general ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Hide get premium","HideAdsResourcePatch","VerticalScrollPatch","FixBackToExitGesturePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide ads","description":"Removes ads from the Reddit.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Hide subreddit banner","Hide comment ads"],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Hide album cards","description":"Hides the album cards below the artist description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","AlbumCardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide autoplay button","description":"Hides the autoplay button in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","ResourceMappingPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide breaking news shelf","description":"Hides the breaking news shelf on the homepage tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","BreakingNewsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide captions button","description":"Hides the captions button on video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide cast button","description":"Hides the cast button in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Hide crowdfunding box","description":"Hides the crowdfunding box between the player and video description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","CrowdfundingBoxResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide email address","description":"Hides the email address in the account switcher.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideEmailAddressResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide endscreen cards","description":"Hides the suggested video cards at the end of a video in fullscreen.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideEndscreenCardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide filter bar","description":"Hides the filter bar in video feeds.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideFilterBarResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide floating microphone button","description":"Hides the floating microphone button which appears in search.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideFloatingMicrophoneButtonResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide get premium","description":"Removes all \"Get Premium\" evidences from the avatar menu.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Hide inbox ads","description":"Hides ads in inbox.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Hide info cards","description":"Hides info cards in videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideInfocardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide layout components","description":"Hides general layout components.","version":"0.0.0","excluded":false,"options":[],"dependencies":["LithoFilterPatch","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide load more button","description":"Hides the button under videos that loads similar videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideLoadMoreButtonResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide player buttons","description":"Adds the option to hide video player previous and next buttons.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide player overlay","description":"Hides the dark background overlay from the player when player controls are visible.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HidePlayerOverlayResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Hide premium navbar","description":"Removes the premium tab from the navbar.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ResourceMappingPatch"],"compatiblePackages":[{"name":"com.spotify.music","versions":[]}]},{"name":"Hide recommended users","description":"Hides recommended users.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Json hook"],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Hide seekbar","description":"Hides the seekbar.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","SeekbarColorBytecodePatch","SeekbarPreferencesPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide timeline ads","description":"Removes ads from the timeline.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.instagram.android","versions":["275.0.0.27.98"]}]},{"name":"Hide timestamp","description":"Hides timestamp in video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide video action buttons","description":"Adds the options to hide action buttons under a video.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ResourceMappingPatch","LithoFilterPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide watermark","description":"Hides creator\u0027s watermarks on videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Minimized playback","description":"Enables minimized and background playback.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Player type hook","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Minimized playback music","description":"Enables minimized playback on Kids music.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Music video ads","description":"Removes ads in the music player.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Navigation buttons","description":"Adds options to hide or change navigation buttons.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","ResolvePivotBarFingerprintsPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Old video quality menu","description":"Shows the old video quality with the advanced video quality options instead of the new one.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","OldVideoQualityMenuResourcePatch","LithoFilterPatch","BottomSheetHookPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.20.39","18.23.35"]}]},{"name":"Open links externally","description":"Open links outside of the app directly in your browser.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Playback speed","description":"Enables the playback speed option for all videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Playback speed","description":"Adds custom playback speeds and ability to remember the playback speed you chose in the video playback speed flyout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Custom playback speed","Remember playback speed"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.20.39","18.23.35"]}]},{"name":"Player flyout menu","description":"Hides player flyout menu items.","version":"0.0.0","excluded":false,"options":[],"dependencies":["LithoFilterPatch","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Predictive back gesture","description":"Enables the predictive back gesture introduced on Android 13.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Premium heading","description":"Shows premium branding on the home screen.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Premium icon reddit","description":"Unlocks premium Reddit app icons.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Pro unlock","description":"Unlocks pro-only functions.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.backdrops.wallpapers","versions":["4.52"]}]},{"name":"Promo code unlock","description":"Disables the validation of promo code. Any code will work to unlock all features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Spoof cert patch"],"compatiblePackages":[{"name":"de.dwd.warnapp","versions":[]}]},{"name":"Remember video quality","description":"Adds the ability to remember the video quality you chose in the video quality flyout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video information","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.19.35","18.20.39","18.23.35"]}]},{"name":"Remove ads","description":"Removes all ads from the app.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"net.binarymode.android.irplus","versions":[]}]},{"name":"Remove badge tab","description":"Removes the badge tab from the activity tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.sony.songpal.mdr","versions":[]}]},{"name":"Remove bootloader detection","description":"Removes the check for an unlocked bootloader.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.bmf.bmf2go","versions":[]}]},{"name":"Remove broadcasts restriction","description":"Enables starting/stopping NetGuard via broadcasts.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"eu.faircode.netguard","versions":[]}]},{"name":"Remove debugging detection","description":"Removes the USB and wireless debugging checks.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.scb.phone","versions":[]}]},{"name":"Remove device restrictions","description":"Removes restrictions from using the app on any device.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.recorder","versions":[]}]},{"name":"Remove notification badge","description":"Removes the red notification badge from the activity tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.sony.songpal.mdr","versions":[]}]},{"name":"Remove player controls background","description":"Removes the background from the video player controls.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Remove root detection","description":"Removes the check for root permissions.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.bmf.bmf2go","versions":[]}]},{"name":"Remove root detection","description":"Removes the check for root permissions and unlocked bootloader.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.oe.app","versions":[]}]},{"name":"Remove screen capture restriction","description":"Removes the restriction of capturing audio from apps that normally wouldn\u0027t allow it.","version":"0.0.0","excluded":true,"options":[],"dependencies":["RemoveCaptureRestrictionResourcePatch"],"compatiblePackages":[]},{"name":"Remove screenshot restriction","description":"Removes the restriction of taking screenshots in apps that normally wouldn\u0027t allow it.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Return YouTube Dislike","description":"Shows the dislike count of videos using the Return YouTube Dislike API.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video id hook","ReturnYouTubeDislikeResourcePatch","Player type hook"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Sanitize sharing links","description":"Removes (tracking) query parameters from the URLs when sharing links.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Seekbar tapping","description":"Enables tap-to-seek on the seekbar of the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","EnableSeekbarTappingResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Settings","description":"Adds ReVanced settings to TikTok.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Settings","description":"Adds settings menu to Twitch.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","SettingsResourcePatch"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":[]}]},{"name":"Show deleted messages","description":"Shows deleted chat messages behind a clickable spoiler.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Show seekbar","description":"Shows progress bar for all video.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Sim spoof","description":"Spoofs the information which is retrieved from the sim-card.","version":"0.0.0","excluded":true,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"SponsorBlock","description":"Integrates SponsorBlock which allows skipping video segments such as sponsored content.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video id hook","Video information","Player type hook","Player controls bytecode patch","SponsorBlockResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Spoof app version","description":"Tricks YouTube into thinking you are running an older version of the app. One of the side effects also includes restoring the old UI.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"dbrady://relay\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"free.reddit.news","versions":[]},{"name":"reddit.news","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://rubenmayayo.com\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.rubenmayayo.reddit","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"redditisfun://auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.andrewshu.android.reddit","versions":[]},{"name":"com.andrewshu.android.redditdonation","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://baconreader.com/auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.onelouder.baconreader","versions":[]},{"name":"com.onelouder.baconreader.premium","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://www.ccrama.me\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"me.ccrama.redditslide","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"infinity://localhost\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"ml.docilealligator.infinityforreddit","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://redditsync/auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":[]},{"name":"com.laurencedawson.reddit_sync.pro","versions":[]},{"name":"com.laurencedawson.reddit_sync.dev","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"https://127.0.0.1:65023/authorize_callback\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"o.o.joey","versions":[]},{"name":"o.o.joey.pro","versions":[]},{"name":"o.o.joey.dev","versions":[]}]},{"name":"Spoof signature","description":"Spoofs the signature of the app.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.oe.app","versions":[]}]},{"name":"Spoof wifi connection","description":"Spoofs an existing Wi-Fi connection.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Spotify theme","description":"Applies a custom theme.","version":"0.0.0","excluded":false,"options":[{"key":"backgroundColor","title":"Background color","description":"The background color. Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"accentColor","title":"Accent color","description":"The accent color (\u0027spotify green\u0027 by default). Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"accentPressedColor","title":"Pressed accent for the dark theme","description":"The color when accented buttons are pressed, by default slightly darker than accent. Can be a hex color or a resource reference.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.spotify.music","versions":[]}]},{"name":"Swipe controls","description":"Adds volume and brightness swipe controls.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Player type hook","SwipeControlsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Tablet mini player","description":"Enables the tablet mini player layout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Theme","description":"Applies a custom theme.","version":"0.0.0","excluded":false,"options":[{"key":"darkThemeBackgroundColor","title":"Background color for the dark theme","description":"The background color of the dark theme. Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"lightThemeBackgroundColor","title":"Background color for the light theme","description":"The background color of the light theme. Can be a hex color or a resource reference.","required":false,"choices":null}],"dependencies":["Litho color hook","SeekbarColorBytecodePatch","ThemeResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Unlock paid widgets","description":"Unlocks paid widgets of the app","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.dci.dev.androidtwelvewidgets","versions":[]}]},{"name":"Unlock plus","description":"Unlocks plus features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["SignatureDetectionPatch"],"compatiblePackages":[{"name":"com.microblink.photomath","versions":["8.20.0"]}]},{"name":"Unlock premium","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"io.yuka.android","versions":[]}]},{"name":"Unlock prime","description":"Unlocks Nova Prime and all functions of the app.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.teslacoilsw.launcher","versions":[]}]},{"name":"Unlock pro","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.candylink.openvpn","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ithebk.expensemanager","versions":[]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.awedea.nyx","versions":[]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"co.windyapp.android","versions":[]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.wakdev.apps.nfctools.se","versions":[]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"ginlemon.iconpackstudio","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"tv.trakt.trakt","versions":["1.1.1"]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["SignatureVerificationPatch","LicenseValidationPatch"],"compatiblePackages":[{"name":"com.zombodroid.MemeGenerator","versions":["4.6364","4.6370","4.6375","4.6377"]}]},{"name":"Unlock pro","description":"Unlocks all professional features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"org.totschnig.myexpenses","versions":["3.4.9"]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.vsco.cam","versions":[]}]},{"name":"Unlock themes","description":"Unlocks all themes that are inaccessible until a certain level is reached.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ticktick.task","versions":[]}]},{"name":"Unlock trial","description":"Unlocks the trial version.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"net.dinglisch.android.taskerm","versions":[]}]},{"name":"Upgrade button remover","description":"Removes the upgrade tab from the pivot bar.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Vanced MicroG support","description":"Allows YouTube Music ReVanced to run without root and under a different package name.","version":"0.0.0","excluded":false,"options":[],"dependencies":["MicroGResourcePatch"],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Vanced MicroG support","description":"Allows YouTube ReVanced to run without root and under a different package name with Vanced MicroG.","version":"0.0.0","excluded":false,"options":[],"dependencies":["MicroGResourcePatch","Hide cast button","Client spoof"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Video ads","description":"Removes ads in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Wide searchbar","description":"Replaces the search icon with a wide search bar. This will hide the YouTube logo when active.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]}] \ No newline at end of file +[{"name":"Always autorepeat","description":"Always repeats the playing video again.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Auto claim channel points","description":"Automatically claim Channel Points.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Background play","description":"Enables playing music in the background.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Block audio ads","description":"Blocks audio ads in streams and VODs.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Block embedded ads","description":"Blocks embedded stream ads using services like TTV.lol or PurpleAdBlocker.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Block video ads","Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Block video ads","description":"Blocks video ads in streams and VODs.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Bypass certificate checks","description":"Bypasses certificate checks which prevent YouTube Music from working on Android Auto.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Change package name","description":"Changes the package name.","version":"0.0.0","excluded":true,"options":[{"key":"packageName","title":"Package name","description":"The name of the package to rename of the app.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[]},{"name":"Client spoof","description":"Spoofs the client to allow playback.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Spoof signature verification"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Codecs unlock","description":"Adds more audio codec options. The new audio codecs usually result in better audio quality.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Comments","description":"Hides components related to comments.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings","LithoFilterPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Compact header","description":"Hides the music category bar at the top of the homepage.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Copy video url","description":"Adds buttons in player to copy video links.","version":"0.0.0","excluded":false,"options":[],"dependencies":["CopyVideoUrlResourcePatch","Player controls bytecode patch","Video information"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Custom branding","description":"Changes the YouTube launcher icon and name to your choice (defaults to ReVanced).","version":"0.0.0","excluded":false,"options":[{"key":"appName","title":"Application Name","description":"The name of the application it will show on your home screen.","required":true,"choices":null},{"key":"iconPath","title":"App Icon Path","description":"A path containing mipmap resource folders with icons.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Debug mode","description":"Enables Twitch\u0027s internal debugging mode.","version":"0.0.0","excluded":true,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":[]}]},{"name":"Disable Shorts on startup","description":"Disables playing YouTube Shorts when launching YouTube.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable Sync for Lemmy bottom sheet","description":"Disables the bottom sheet at the startup that asks you to signup to \"Sync for Lemmy\".","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":["v23.06.30-13:39"]},{"name":"com.laurencedawson.reddit_sync.pro","versions":[]},{"name":"com.laurencedawson.reddit_sync.dev","versions":[]}]},{"name":"Disable ads","description":"Disables ads in HexEditor.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.myprog.hexedit","versions":[]}]},{"name":"Disable ads","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":[]}]},{"name":"Disable ads","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"o.o.joey","versions":[]}]},{"name":"Disable auto captions","description":"Disable forced captions from being automatically enabled.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable fullscreen panels","description":"Disables video description and comments panel in fullscreen view.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable login requirement","description":"Do not force login.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Disable player popup panels","description":"Disables panels from appearing automatically when going into fullscreen (playlist or live chat).","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable screenshot popup","description":"Disables the popup that shows up when taking a screenshot.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Disable switching emoji to sticker in message input field","description":"Disables switching from emoji to sticker search mode in message input field","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Disable typing indicator","description":"Disables the indicator while typing a message","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Disable zoom haptics","description":"Disables haptics when zooming.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Downloads","description":"Removes download restrictions and changes the default path to download to.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Dynamic color","description":"Replaces the default Twitter Blue with the users Material You palette.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Enable android debugging","description":"Enables Android debugging capabilities.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Enable debugging","description":"Adds debugging options.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"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.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.spotify.lite","versions":[]}]},{"name":"Exclusive audio playback","description":"Enables the option to play music without video.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Export all activities","description":"Makes all app activities exportable.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"External downloads","description":"Adds support to download and save YouTube videos using an external app.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ExternalDownloadsResourcePatch","Player controls bytecode patch","Video information"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Feed filter","description":"Filters tiktok videos: removing ads, removing livestreams.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Fix google login","description":"Allows logging in with a Google account.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"HDR auto brightness","description":"Makes the brightness of HDR videos follow the system default.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide Shorts components","description":"Hides components from YouTube Shorts.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","LithoFilterPatch","HideShortsComponentsResourcePatch","ResourceMappingPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide ads","description":"Removes ads from Inshorts.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.nis.app","versions":[]}]},{"name":"Hide ads","description":"Removes ads from TikTok.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Hide ads","description":"Hides ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"jp.pxv.android","versions":[]}]},{"name":"Hide ads","description":"Removes general ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["VerticalScrollPatch"],"compatiblePackages":[{"name":"com.vanced.android.youtube","versions":[]}]},{"name":"Hide ads","description":"Hides ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Json hook"],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Hide ads","description":"Removes general ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Hide get premium","HideAdsResourcePatch","VerticalScrollPatch","FixBackToExitGesturePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide ads","description":"Removes ads from the Reddit.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Hide subreddit banner","Hide comment ads"],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Hide album cards","description":"Hides the album cards below the artist description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","AlbumCardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide autoplay button","description":"Hides the autoplay button in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","ResourceMappingPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide breaking news shelf","description":"Hides the breaking news shelf on the homepage tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","BreakingNewsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide captions button","description":"Hides the captions button on video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide cast button","description":"Hides the cast button in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Hide crowdfunding box","description":"Hides the crowdfunding box between the player and video description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","CrowdfundingBoxResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide email address","description":"Hides the email address in the account switcher.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideEmailAddressResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide endscreen cards","description":"Hides the suggested video cards at the end of a video in fullscreen.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideEndscreenCardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide filter bar","description":"Hides the filter bar in video feeds.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideFilterBarResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide floating microphone button","description":"Hides the floating microphone button which appears in search.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideFloatingMicrophoneButtonResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide get premium","description":"Removes all \"Get Premium\" evidences from the avatar menu.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Hide inbox ads","description":"Hides ads in inbox.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Hide info cards","description":"Hides info cards in videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideInfocardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide layout components","description":"Hides general layout components.","version":"0.0.0","excluded":false,"options":[],"dependencies":["LithoFilterPatch","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide load more button","description":"Hides the button under videos that loads similar videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideLoadMoreButtonResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide player buttons","description":"Adds the option to hide video player previous and next buttons.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide player overlay","description":"Hides the dark background overlay from the player when player controls are visible.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HidePlayerOverlayResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Hide premium navbar","description":"Removes the premium tab from the navbar.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ResourceMappingPatch"],"compatiblePackages":[{"name":"com.spotify.music","versions":[]}]},{"name":"Hide recommended users","description":"Hides recommended users.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Json hook"],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Hide seekbar","description":"Hides the seekbar.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","SeekbarColorBytecodePatch","SeekbarPreferencesPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide timeline ads","description":"Removes ads from the timeline.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.instagram.android","versions":["275.0.0.27.98"]}]},{"name":"Hide timestamp","description":"Hides timestamp in video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide video action buttons","description":"Adds the options to hide action buttons under a video.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ResourceMappingPatch","LithoFilterPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide watermark","description":"Hides creator\u0027s watermarks on videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Minimized playback","description":"Enables minimized and background playback.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Player type hook","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Minimized playback music","description":"Enables minimized playback on Kids music.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Music video ads","description":"Removes ads in the music player.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Navigation buttons","description":"Adds options to hide or change navigation buttons.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","ResolvePivotBarFingerprintsPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Old video quality menu","description":"Shows the old video quality with the advanced video quality options instead of the new one.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","OldVideoQualityMenuResourcePatch","LithoFilterPatch","BottomSheetHookPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.20.39","18.23.35"]}]},{"name":"Open links externally","description":"Open links outside of the app directly in your browser.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Playback speed","description":"Enables the playback speed option for all videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Playback speed","description":"Adds custom playback speeds and ability to remember the playback speed you chose in the video playback speed flyout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Custom playback speed","Remember playback speed"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.20.39","18.23.35"]}]},{"name":"Player flyout menu","description":"Hides player flyout menu items.","version":"0.0.0","excluded":false,"options":[],"dependencies":["LithoFilterPatch","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Predictive back gesture","description":"Enables the predictive back gesture introduced on Android 13.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Premium heading","description":"Shows premium branding on the home screen.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Premium icon reddit","description":"Unlocks premium Reddit app icons.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Pro unlock","description":"Unlocks pro-only functions.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.backdrops.wallpapers","versions":["4.52"]}]},{"name":"Promo code unlock","description":"Disables the validation of promo code. Any code will work to unlock all features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Spoof cert patch"],"compatiblePackages":[{"name":"de.dwd.warnapp","versions":[]}]},{"name":"Remember video quality","description":"Adds the ability to remember the video quality you chose in the video quality flyout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video information","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.19.35","18.20.39","18.23.35"]}]},{"name":"Remove ads","description":"Removes all ads from the app.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"net.binarymode.android.irplus","versions":[]}]},{"name":"Remove badge tab","description":"Removes the badge tab from the activity tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.sony.songpal.mdr","versions":[]}]},{"name":"Remove bootloader detection","description":"Removes the check for an unlocked bootloader.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.bmf.bmf2go","versions":[]}]},{"name":"Remove broadcasts restriction","description":"Enables starting/stopping NetGuard via broadcasts.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"eu.faircode.netguard","versions":[]}]},{"name":"Remove debugging detection","description":"Removes the USB and wireless debugging checks.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.scb.phone","versions":[]}]},{"name":"Remove device restrictions","description":"Removes restrictions from using the app on any device.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.recorder","versions":[]}]},{"name":"Remove notification badge","description":"Removes the red notification badge from the activity tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.sony.songpal.mdr","versions":[]}]},{"name":"Remove player controls background","description":"Removes the background from the video player controls.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Remove root detection","description":"Removes the check for root permissions.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.bmf.bmf2go","versions":[]}]},{"name":"Remove root detection","description":"Removes the check for root permissions and unlocked bootloader.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.oe.app","versions":[]}]},{"name":"Remove screen capture restriction","description":"Removes the restriction of capturing audio from apps that normally wouldn\u0027t allow it.","version":"0.0.0","excluded":true,"options":[],"dependencies":["RemoveCaptureRestrictionResourcePatch"],"compatiblePackages":[]},{"name":"Remove screenshot restriction","description":"Removes the restriction of taking screenshots in apps that normally wouldn\u0027t allow it.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Return YouTube Dislike","description":"Shows the dislike count of videos using the Return YouTube Dislike API.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video id hook","ReturnYouTubeDislikeResourcePatch","Player type hook"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Sanitize sharing links","description":"Removes (tracking) query parameters from the URLs when sharing links.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Seekbar tapping","description":"Enables tap-to-seek on the seekbar of the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","EnableSeekbarTappingResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Settings","description":"Adds ReVanced settings to TikTok.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Settings","description":"Adds settings menu to Twitch.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","SettingsResourcePatch"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":[]}]},{"name":"Show deleted messages","description":"Shows deleted chat messages behind a clickable spoiler.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Show seekbar","description":"Shows progress bar for all video.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Sim spoof","description":"Spoofs the information which is retrieved from the sim-card.","version":"0.0.0","excluded":true,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"SponsorBlock","description":"Integrates SponsorBlock which allows skipping video segments such as sponsored content.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video id hook","Video information","Player type hook","Player controls bytecode patch","SponsorBlockResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Spoof app version","description":"Tricks YouTube into thinking you are running an older version of the app. One of the side effects also includes restoring the old UI.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"dbrady://relay\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"free.reddit.news","versions":[]},{"name":"reddit.news","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://rubenmayayo.com\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.rubenmayayo.reddit","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"redditisfun://auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.andrewshu.android.reddit","versions":[]},{"name":"com.andrewshu.android.redditdonation","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://baconreader.com/auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.onelouder.baconreader","versions":[]},{"name":"com.onelouder.baconreader.premium","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://www.ccrama.me\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"me.ccrama.redditslide","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"infinity://localhost\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"ml.docilealligator.infinityforreddit","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://redditsync/auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":[]},{"name":"com.laurencedawson.reddit_sync.pro","versions":[]},{"name":"com.laurencedawson.reddit_sync.dev","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"https://127.0.0.1:65023/authorize_callback\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"o.o.joey","versions":[]},{"name":"o.o.joey.pro","versions":[]},{"name":"o.o.joey.dev","versions":[]}]},{"name":"Spoof signature","description":"Spoofs the signature of the app.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.oe.app","versions":[]}]},{"name":"Spoof wifi connection","description":"Spoofs an existing Wi-Fi connection.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Spotify theme","description":"Applies a custom theme.","version":"0.0.0","excluded":false,"options":[{"key":"backgroundColor","title":"Background color","description":"The background color. Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"accentColor","title":"Accent color","description":"The accent color (\u0027spotify green\u0027 by default). Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"accentPressedColor","title":"Pressed accent for the dark theme","description":"The color when accented buttons are pressed, by default slightly darker than accent. Can be a hex color or a resource reference.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.spotify.music","versions":[]}]},{"name":"Swipe controls","description":"Adds volume and brightness swipe controls.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Player type hook","SwipeControlsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Tablet mini player","description":"Enables the tablet mini player layout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Theme","description":"Applies a custom theme.","version":"0.0.0","excluded":false,"options":[{"key":"darkThemeBackgroundColor","title":"Background color for the dark theme","description":"The background color of the dark theme. Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"lightThemeBackgroundColor","title":"Background color for the light theme","description":"The background color of the light theme. Can be a hex color or a resource reference.","required":false,"choices":null}],"dependencies":["Litho color hook","SeekbarColorBytecodePatch","ThemeResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Unlock paid widgets","description":"Unlocks paid widgets of the app","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.dci.dev.androidtwelvewidgets","versions":[]}]},{"name":"Unlock plus","description":"Unlocks plus features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["SignatureDetectionPatch"],"compatiblePackages":[{"name":"com.microblink.photomath","versions":["8.20.0"]}]},{"name":"Unlock premium","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"io.yuka.android","versions":[]}]},{"name":"Unlock pro","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.candylink.openvpn","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ithebk.expensemanager","versions":[]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.awedea.nyx","versions":[]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"co.windyapp.android","versions":[]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.wakdev.apps.nfctools.se","versions":[]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"ginlemon.iconpackstudio","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"tv.trakt.trakt","versions":["1.1.1"]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["SignatureVerificationPatch","LicenseValidationPatch"],"compatiblePackages":[{"name":"com.zombodroid.MemeGenerator","versions":["4.6364","4.6370","4.6375","4.6377"]}]},{"name":"Unlock pro","description":"Unlocks all professional features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"org.totschnig.myexpenses","versions":["3.4.9"]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.vsco.cam","versions":[]}]},{"name":"Unlock themes","description":"Unlocks all themes that are inaccessible until a certain level is reached.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ticktick.task","versions":[]}]},{"name":"Unlock trial","description":"Unlocks the trial version.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"net.dinglisch.android.taskerm","versions":[]}]},{"name":"Upgrade button remover","description":"Removes the upgrade tab from the pivot bar.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Vanced MicroG support","description":"Allows YouTube Music ReVanced to run without root and under a different package name.","version":"0.0.0","excluded":false,"options":[],"dependencies":["MicroGResourcePatch"],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Vanced MicroG support","description":"Allows YouTube ReVanced to run without root and under a different package name with Vanced MicroG.","version":"0.0.0","excluded":false,"options":[],"dependencies":["MicroGResourcePatch","Hide cast button","Client spoof"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Video ads","description":"Removes ads in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Wide searchbar","description":"Replaces the search icon with a wide search bar. This will hide the YouTube logo when active.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]}] \ No newline at end of file From 236a18f9356cede156417c0d55a876d25a98cd4d Mon Sep 17 00:00:00 2001 From: oSumAtrIX Date: Thu, 3 Aug 2023 16:22:57 +0200 Subject: [PATCH 03/67] fix(Reddit is Fun - Spoof client): Use a more convincing user agent --- .../redditisfun/api/patch/SpoofClientPatch.kt | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/kotlin/app/revanced/patches/reddit/customclients/redditisfun/api/patch/SpoofClientPatch.kt b/src/main/kotlin/app/revanced/patches/reddit/customclients/redditisfun/api/patch/SpoofClientPatch.kt index b5228a2a8..79ce20445 100644 --- a/src/main/kotlin/app/revanced/patches/reddit/customclients/redditisfun/api/patch/SpoofClientPatch.kt +++ b/src/main/kotlin/app/revanced/patches/reddit/customclients/redditisfun/api/patch/SpoofClientPatch.kt @@ -58,15 +58,16 @@ class SpoofClientPatch : AbstractSpoofClientPatch( } override fun List.patchUserAgent(context: BytecodeContext): PatchResult { - // Use a random number as the user agent string. - val randomUserAgent = (0..100000).random() + // Use a random user agent. + val randomName = (0..100000).random() + val userAgent = "android:app.revanced.$randomName:v1.0.0 (by /u/revanced)\n" first().mutableMethod.addInstructions( 0, """ - const-string v0, "$randomUserAgent" - return-object v0 - """ + const-string v0, "$userAgent" + return-object v0 + """ ) return PatchResultSuccess() From 343f186ef768065786471a19aee7def69a778f76 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 3 Aug 2023 14:26:21 +0000 Subject: [PATCH 04/67] chore(release): 2.188.0-dev.2 [skip ci] # [2.188.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.1...v2.188.0-dev.2) (2023-08-03) ### Bug Fixes * **Reddit is Fun - Spoof client:** Use a more convincing user agent ([236a18f](https://github.com/ReVanced/revanced-patches/commit/236a18f9356cede156417c0d55a876d25a98cd4d)) --- CHANGELOG.md | 7 +++++++ gradle.properties | 2 +- patches.json | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2cb8adc3d..758e28978 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [2.188.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.1...v2.188.0-dev.2) (2023-08-03) + + +### Bug Fixes + +* **Reddit is Fun - Spoof client:** Use a more convincing user agent ([236a18f](https://github.com/ReVanced/revanced-patches/commit/236a18f9356cede156417c0d55a876d25a98cd4d)) + # [2.188.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v2.187.0...v2.188.0-dev.1) (2023-08-03) diff --git a/gradle.properties b/gradle.properties index 6fc514514..dddc24167 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ org.gradle.parallel = true org.gradle.caching = true kotlin.code.style = official -version = 2.188.0-dev.1 +version = 2.188.0-dev.2 diff --git a/patches.json b/patches.json index a3f6f7af4..908f926ac 100644 --- a/patches.json +++ b/patches.json @@ -1 +1 @@ -[{"name":"Always autorepeat","description":"Always repeats the playing video again.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Auto claim channel points","description":"Automatically claim Channel Points.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Background play","description":"Enables playing music in the background.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Block audio ads","description":"Blocks audio ads in streams and VODs.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Block embedded ads","description":"Blocks embedded stream ads using services like TTV.lol or PurpleAdBlocker.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Block video ads","Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Block video ads","description":"Blocks video ads in streams and VODs.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Bypass certificate checks","description":"Bypasses certificate checks which prevent YouTube Music from working on Android Auto.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Change package name","description":"Changes the package name.","version":"0.0.0","excluded":true,"options":[{"key":"packageName","title":"Package name","description":"The name of the package to rename of the app.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[]},{"name":"Client spoof","description":"Spoofs the client to allow playback.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Spoof signature verification"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Codecs unlock","description":"Adds more audio codec options. The new audio codecs usually result in better audio quality.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Comments","description":"Hides components related to comments.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings","LithoFilterPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Compact header","description":"Hides the music category bar at the top of the homepage.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Copy video url","description":"Adds buttons in player to copy video links.","version":"0.0.0","excluded":false,"options":[],"dependencies":["CopyVideoUrlResourcePatch","Player controls bytecode patch","Video information"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Custom branding","description":"Changes the YouTube launcher icon and name to your choice (defaults to ReVanced).","version":"0.0.0","excluded":false,"options":[{"key":"appName","title":"Application Name","description":"The name of the application it will show on your home screen.","required":true,"choices":null},{"key":"iconPath","title":"App Icon Path","description":"A path containing mipmap resource folders with icons.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Debug mode","description":"Enables Twitch\u0027s internal debugging mode.","version":"0.0.0","excluded":true,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":[]}]},{"name":"Disable Shorts on startup","description":"Disables playing YouTube Shorts when launching YouTube.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable Sync for Lemmy bottom sheet","description":"Disables the bottom sheet at the startup that asks you to signup to \"Sync for Lemmy\".","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":["v23.06.30-13:39"]},{"name":"com.laurencedawson.reddit_sync.pro","versions":[]},{"name":"com.laurencedawson.reddit_sync.dev","versions":[]}]},{"name":"Disable ads","description":"Disables ads in HexEditor.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.myprog.hexedit","versions":[]}]},{"name":"Disable ads","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":[]}]},{"name":"Disable ads","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"o.o.joey","versions":[]}]},{"name":"Disable auto captions","description":"Disable forced captions from being automatically enabled.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable fullscreen panels","description":"Disables video description and comments panel in fullscreen view.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable login requirement","description":"Do not force login.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Disable player popup panels","description":"Disables panels from appearing automatically when going into fullscreen (playlist or live chat).","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable screenshot popup","description":"Disables the popup that shows up when taking a screenshot.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Disable switching emoji to sticker in message input field","description":"Disables switching from emoji to sticker search mode in message input field","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Disable typing indicator","description":"Disables the indicator while typing a message","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Disable zoom haptics","description":"Disables haptics when zooming.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Downloads","description":"Removes download restrictions and changes the default path to download to.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Dynamic color","description":"Replaces the default Twitter Blue with the users Material You palette.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Enable android debugging","description":"Enables Android debugging capabilities.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Enable debugging","description":"Adds debugging options.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"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.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.spotify.lite","versions":[]}]},{"name":"Exclusive audio playback","description":"Enables the option to play music without video.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Export all activities","description":"Makes all app activities exportable.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"External downloads","description":"Adds support to download and save YouTube videos using an external app.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ExternalDownloadsResourcePatch","Player controls bytecode patch","Video information"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Feed filter","description":"Filters tiktok videos: removing ads, removing livestreams.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Fix google login","description":"Allows logging in with a Google account.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"HDR auto brightness","description":"Makes the brightness of HDR videos follow the system default.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide Shorts components","description":"Hides components from YouTube Shorts.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","LithoFilterPatch","HideShortsComponentsResourcePatch","ResourceMappingPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide ads","description":"Removes ads from Inshorts.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.nis.app","versions":[]}]},{"name":"Hide ads","description":"Removes ads from TikTok.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Hide ads","description":"Hides ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"jp.pxv.android","versions":[]}]},{"name":"Hide ads","description":"Removes general ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["VerticalScrollPatch"],"compatiblePackages":[{"name":"com.vanced.android.youtube","versions":[]}]},{"name":"Hide ads","description":"Hides ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Json hook"],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Hide ads","description":"Removes general ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Hide get premium","HideAdsResourcePatch","VerticalScrollPatch","FixBackToExitGesturePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide ads","description":"Removes ads from the Reddit.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Hide subreddit banner","Hide comment ads"],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Hide album cards","description":"Hides the album cards below the artist description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","AlbumCardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide autoplay button","description":"Hides the autoplay button in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","ResourceMappingPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide breaking news shelf","description":"Hides the breaking news shelf on the homepage tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","BreakingNewsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide captions button","description":"Hides the captions button on video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide cast button","description":"Hides the cast button in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Hide crowdfunding box","description":"Hides the crowdfunding box between the player and video description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","CrowdfundingBoxResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide email address","description":"Hides the email address in the account switcher.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideEmailAddressResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide endscreen cards","description":"Hides the suggested video cards at the end of a video in fullscreen.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideEndscreenCardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide filter bar","description":"Hides the filter bar in video feeds.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideFilterBarResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide floating microphone button","description":"Hides the floating microphone button which appears in search.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideFloatingMicrophoneButtonResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide get premium","description":"Removes all \"Get Premium\" evidences from the avatar menu.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Hide inbox ads","description":"Hides ads in inbox.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Hide info cards","description":"Hides info cards in videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideInfocardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide layout components","description":"Hides general layout components.","version":"0.0.0","excluded":false,"options":[],"dependencies":["LithoFilterPatch","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide load more button","description":"Hides the button under videos that loads similar videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideLoadMoreButtonResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide player buttons","description":"Adds the option to hide video player previous and next buttons.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide player overlay","description":"Hides the dark background overlay from the player when player controls are visible.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HidePlayerOverlayResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Hide premium navbar","description":"Removes the premium tab from the navbar.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ResourceMappingPatch"],"compatiblePackages":[{"name":"com.spotify.music","versions":[]}]},{"name":"Hide recommended users","description":"Hides recommended users.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Json hook"],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Hide seekbar","description":"Hides the seekbar.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","SeekbarColorBytecodePatch","SeekbarPreferencesPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide timeline ads","description":"Removes ads from the timeline.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.instagram.android","versions":["275.0.0.27.98"]}]},{"name":"Hide timestamp","description":"Hides timestamp in video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide video action buttons","description":"Adds the options to hide action buttons under a video.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ResourceMappingPatch","LithoFilterPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide watermark","description":"Hides creator\u0027s watermarks on videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Minimized playback","description":"Enables minimized and background playback.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Player type hook","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Minimized playback music","description":"Enables minimized playback on Kids music.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Music video ads","description":"Removes ads in the music player.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Navigation buttons","description":"Adds options to hide or change navigation buttons.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","ResolvePivotBarFingerprintsPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Old video quality menu","description":"Shows the old video quality with the advanced video quality options instead of the new one.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","OldVideoQualityMenuResourcePatch","LithoFilterPatch","BottomSheetHookPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.20.39","18.23.35"]}]},{"name":"Open links externally","description":"Open links outside of the app directly in your browser.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Playback speed","description":"Enables the playback speed option for all videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Playback speed","description":"Adds custom playback speeds and ability to remember the playback speed you chose in the video playback speed flyout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Custom playback speed","Remember playback speed"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.20.39","18.23.35"]}]},{"name":"Player flyout menu","description":"Hides player flyout menu items.","version":"0.0.0","excluded":false,"options":[],"dependencies":["LithoFilterPatch","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Predictive back gesture","description":"Enables the predictive back gesture introduced on Android 13.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Premium heading","description":"Shows premium branding on the home screen.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Premium icon reddit","description":"Unlocks premium Reddit app icons.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Pro unlock","description":"Unlocks pro-only functions.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.backdrops.wallpapers","versions":["4.52"]}]},{"name":"Promo code unlock","description":"Disables the validation of promo code. Any code will work to unlock all features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Spoof cert patch"],"compatiblePackages":[{"name":"de.dwd.warnapp","versions":[]}]},{"name":"Remember video quality","description":"Adds the ability to remember the video quality you chose in the video quality flyout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video information","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.19.35","18.20.39","18.23.35"]}]},{"name":"Remove ads","description":"Removes all ads from the app.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"net.binarymode.android.irplus","versions":[]}]},{"name":"Remove badge tab","description":"Removes the badge tab from the activity tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.sony.songpal.mdr","versions":[]}]},{"name":"Remove bootloader detection","description":"Removes the check for an unlocked bootloader.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.bmf.bmf2go","versions":[]}]},{"name":"Remove broadcasts restriction","description":"Enables starting/stopping NetGuard via broadcasts.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"eu.faircode.netguard","versions":[]}]},{"name":"Remove debugging detection","description":"Removes the USB and wireless debugging checks.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.scb.phone","versions":[]}]},{"name":"Remove device restrictions","description":"Removes restrictions from using the app on any device.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.recorder","versions":[]}]},{"name":"Remove notification badge","description":"Removes the red notification badge from the activity tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.sony.songpal.mdr","versions":[]}]},{"name":"Remove player controls background","description":"Removes the background from the video player controls.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Remove root detection","description":"Removes the check for root permissions.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.bmf.bmf2go","versions":[]}]},{"name":"Remove root detection","description":"Removes the check for root permissions and unlocked bootloader.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.oe.app","versions":[]}]},{"name":"Remove screen capture restriction","description":"Removes the restriction of capturing audio from apps that normally wouldn\u0027t allow it.","version":"0.0.0","excluded":true,"options":[],"dependencies":["RemoveCaptureRestrictionResourcePatch"],"compatiblePackages":[]},{"name":"Remove screenshot restriction","description":"Removes the restriction of taking screenshots in apps that normally wouldn\u0027t allow it.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Return YouTube Dislike","description":"Shows the dislike count of videos using the Return YouTube Dislike API.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video id hook","ReturnYouTubeDislikeResourcePatch","Player type hook"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Sanitize sharing links","description":"Removes (tracking) query parameters from the URLs when sharing links.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Seekbar tapping","description":"Enables tap-to-seek on the seekbar of the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","EnableSeekbarTappingResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Settings","description":"Adds ReVanced settings to TikTok.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Settings","description":"Adds settings menu to Twitch.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","SettingsResourcePatch"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":[]}]},{"name":"Show deleted messages","description":"Shows deleted chat messages behind a clickable spoiler.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Show seekbar","description":"Shows progress bar for all video.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Sim spoof","description":"Spoofs the information which is retrieved from the sim-card.","version":"0.0.0","excluded":true,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"SponsorBlock","description":"Integrates SponsorBlock which allows skipping video segments such as sponsored content.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video id hook","Video information","Player type hook","Player controls bytecode patch","SponsorBlockResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Spoof app version","description":"Tricks YouTube into thinking you are running an older version of the app. One of the side effects also includes restoring the old UI.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"dbrady://relay\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"free.reddit.news","versions":[]},{"name":"reddit.news","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://rubenmayayo.com\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.rubenmayayo.reddit","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"redditisfun://auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.andrewshu.android.reddit","versions":[]},{"name":"com.andrewshu.android.redditdonation","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://baconreader.com/auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.onelouder.baconreader","versions":[]},{"name":"com.onelouder.baconreader.premium","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://www.ccrama.me\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"me.ccrama.redditslide","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"infinity://localhost\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"ml.docilealligator.infinityforreddit","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://redditsync/auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":[]},{"name":"com.laurencedawson.reddit_sync.pro","versions":[]},{"name":"com.laurencedawson.reddit_sync.dev","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"https://127.0.0.1:65023/authorize_callback\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"o.o.joey","versions":[]},{"name":"o.o.joey.pro","versions":[]},{"name":"o.o.joey.dev","versions":[]}]},{"name":"Spoof signature","description":"Spoofs the signature of the app.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.oe.app","versions":[]}]},{"name":"Spoof wifi connection","description":"Spoofs an existing Wi-Fi connection.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Spotify theme","description":"Applies a custom theme.","version":"0.0.0","excluded":false,"options":[{"key":"backgroundColor","title":"Background color","description":"The background color. Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"accentColor","title":"Accent color","description":"The accent color (\u0027spotify green\u0027 by default). Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"accentPressedColor","title":"Pressed accent for the dark theme","description":"The color when accented buttons are pressed, by default slightly darker than accent. Can be a hex color or a resource reference.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.spotify.music","versions":[]}]},{"name":"Swipe controls","description":"Adds volume and brightness swipe controls.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Player type hook","SwipeControlsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Tablet mini player","description":"Enables the tablet mini player layout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Theme","description":"Applies a custom theme.","version":"0.0.0","excluded":false,"options":[{"key":"darkThemeBackgroundColor","title":"Background color for the dark theme","description":"The background color of the dark theme. Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"lightThemeBackgroundColor","title":"Background color for the light theme","description":"The background color of the light theme. Can be a hex color or a resource reference.","required":false,"choices":null}],"dependencies":["Litho color hook","SeekbarColorBytecodePatch","ThemeResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Unlock paid widgets","description":"Unlocks paid widgets of the app","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.dci.dev.androidtwelvewidgets","versions":[]}]},{"name":"Unlock plus","description":"Unlocks plus features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["SignatureDetectionPatch"],"compatiblePackages":[{"name":"com.microblink.photomath","versions":["8.20.0"]}]},{"name":"Unlock premium","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"io.yuka.android","versions":[]}]},{"name":"Unlock pro","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.candylink.openvpn","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ithebk.expensemanager","versions":[]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.awedea.nyx","versions":[]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"co.windyapp.android","versions":[]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.wakdev.apps.nfctools.se","versions":[]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"ginlemon.iconpackstudio","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"tv.trakt.trakt","versions":["1.1.1"]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["SignatureVerificationPatch","LicenseValidationPatch"],"compatiblePackages":[{"name":"com.zombodroid.MemeGenerator","versions":["4.6364","4.6370","4.6375","4.6377"]}]},{"name":"Unlock pro","description":"Unlocks all professional features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"org.totschnig.myexpenses","versions":["3.4.9"]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.vsco.cam","versions":[]}]},{"name":"Unlock themes","description":"Unlocks all themes that are inaccessible until a certain level is reached.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ticktick.task","versions":[]}]},{"name":"Unlock trial","description":"Unlocks the trial version.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"net.dinglisch.android.taskerm","versions":[]}]},{"name":"Upgrade button remover","description":"Removes the upgrade tab from the pivot bar.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Vanced MicroG support","description":"Allows YouTube Music ReVanced to run without root and under a different package name.","version":"0.0.0","excluded":false,"options":[],"dependencies":["MicroGResourcePatch"],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Vanced MicroG support","description":"Allows YouTube ReVanced to run without root and under a different package name with Vanced MicroG.","version":"0.0.0","excluded":false,"options":[],"dependencies":["MicroGResourcePatch","Hide cast button","Client spoof"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Video ads","description":"Removes ads in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Wide searchbar","description":"Replaces the search icon with a wide search bar. This will hide the YouTube logo when active.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]}] \ No newline at end of file +[{"name":"Always autorepeat","description":"Always repeats the playing video again.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Auto claim channel points","description":"Automatically claim Channel Points.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Background play","description":"Enables playing music in the background.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Block audio ads","description":"Blocks audio ads in streams and VODs.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Block embedded ads","description":"Blocks embedded stream ads using services like TTV.lol or PurpleAdBlocker.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Block video ads","Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Block video ads","description":"Blocks video ads in streams and VODs.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Bypass certificate checks","description":"Bypasses certificate checks which prevent YouTube Music from working on Android Auto.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Change package name","description":"Changes the package name.","version":"0.0.0","excluded":true,"options":[{"key":"packageName","title":"Package name","description":"The name of the package to rename of the app.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[]},{"name":"Client spoof","description":"Spoofs the client to allow playback.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Spoof signature verification"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Codecs unlock","description":"Adds more audio codec options. The new audio codecs usually result in better audio quality.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Comments","description":"Hides components related to comments.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings","LithoFilterPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Compact header","description":"Hides the music category bar at the top of the homepage.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Copy video url","description":"Adds buttons in player to copy video links.","version":"0.0.0","excluded":false,"options":[],"dependencies":["CopyVideoUrlResourcePatch","Player controls bytecode patch","Video information"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Custom branding","description":"Changes the YouTube launcher icon and name to your choice (defaults to ReVanced).","version":"0.0.0","excluded":false,"options":[{"key":"appName","title":"Application Name","description":"The name of the application it will show on your home screen.","required":true,"choices":null},{"key":"iconPath","title":"App Icon Path","description":"A path containing mipmap resource folders with icons.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Debug mode","description":"Enables Twitch\u0027s internal debugging mode.","version":"0.0.0","excluded":true,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":[]}]},{"name":"Disable Shorts on startup","description":"Disables playing YouTube Shorts when launching YouTube.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable Sync for Lemmy bottom sheet","description":"Disables the bottom sheet at the startup that asks you to signup to \"Sync for Lemmy\".","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":["v23.06.30-13:39"]},{"name":"com.laurencedawson.reddit_sync.pro","versions":[]},{"name":"com.laurencedawson.reddit_sync.dev","versions":[]}]},{"name":"Disable ads","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":[]}]},{"name":"Disable ads","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"o.o.joey","versions":[]}]},{"name":"Disable ads","description":"Disables ads in HexEditor.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.myprog.hexedit","versions":[]}]},{"name":"Disable auto captions","description":"Disable forced captions from being automatically enabled.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable fullscreen panels","description":"Disables video description and comments panel in fullscreen view.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable login requirement","description":"Do not force login.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Disable player popup panels","description":"Disables panels from appearing automatically when going into fullscreen (playlist or live chat).","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable screenshot popup","description":"Disables the popup that shows up when taking a screenshot.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Disable switching emoji to sticker in message input field","description":"Disables switching from emoji to sticker search mode in message input field","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Disable typing indicator","description":"Disables the indicator while typing a message","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Disable zoom haptics","description":"Disables haptics when zooming.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Downloads","description":"Removes download restrictions and changes the default path to download to.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Dynamic color","description":"Replaces the default Twitter Blue with the users Material You palette.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Enable android debugging","description":"Enables Android debugging capabilities.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Enable debugging","description":"Adds debugging options.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"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.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.spotify.lite","versions":[]}]},{"name":"Exclusive audio playback","description":"Enables the option to play music without video.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Export all activities","description":"Makes all app activities exportable.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"External downloads","description":"Adds support to download and save YouTube videos using an external app.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ExternalDownloadsResourcePatch","Player controls bytecode patch","Video information"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Feed filter","description":"Filters tiktok videos: removing ads, removing livestreams.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Fix google login","description":"Allows logging in with a Google account.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"HDR auto brightness","description":"Makes the brightness of HDR videos follow the system default.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide Shorts components","description":"Hides components from YouTube Shorts.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","LithoFilterPatch","HideShortsComponentsResourcePatch","ResourceMappingPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide ads","description":"Removes ads from the Reddit.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Hide subreddit banner","Hide comment ads"],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Hide ads","description":"Removes general ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["VerticalScrollPatch"],"compatiblePackages":[{"name":"com.vanced.android.youtube","versions":[]}]},{"name":"Hide ads","description":"Hides ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Json hook"],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Hide ads","description":"Removes ads from Inshorts.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.nis.app","versions":[]}]},{"name":"Hide ads","description":"Removes general ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Hide get premium","HideAdsResourcePatch","VerticalScrollPatch","FixBackToExitGesturePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide ads","description":"Removes ads from TikTok.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Hide ads","description":"Hides ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"jp.pxv.android","versions":[]}]},{"name":"Hide album cards","description":"Hides the album cards below the artist description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","AlbumCardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide autoplay button","description":"Hides the autoplay button in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","ResourceMappingPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide breaking news shelf","description":"Hides the breaking news shelf on the homepage tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","BreakingNewsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide captions button","description":"Hides the captions button on video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide cast button","description":"Hides the cast button in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Hide crowdfunding box","description":"Hides the crowdfunding box between the player and video description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","CrowdfundingBoxResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide email address","description":"Hides the email address in the account switcher.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideEmailAddressResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide endscreen cards","description":"Hides the suggested video cards at the end of a video in fullscreen.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideEndscreenCardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide filter bar","description":"Hides the filter bar in video feeds.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideFilterBarResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide floating microphone button","description":"Hides the floating microphone button which appears in search.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideFloatingMicrophoneButtonResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide get premium","description":"Removes all \"Get Premium\" evidences from the avatar menu.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Hide inbox ads","description":"Hides ads in inbox.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Hide info cards","description":"Hides info cards in videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideInfocardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide layout components","description":"Hides general layout components.","version":"0.0.0","excluded":false,"options":[],"dependencies":["LithoFilterPatch","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide load more button","description":"Hides the button under videos that loads similar videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideLoadMoreButtonResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide player buttons","description":"Adds the option to hide video player previous and next buttons.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide player overlay","description":"Hides the dark background overlay from the player when player controls are visible.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HidePlayerOverlayResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Hide premium navbar","description":"Removes the premium tab from the navbar.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ResourceMappingPatch"],"compatiblePackages":[{"name":"com.spotify.music","versions":[]}]},{"name":"Hide recommended users","description":"Hides recommended users.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Json hook"],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Hide seekbar","description":"Hides the seekbar.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","SeekbarColorBytecodePatch","SeekbarPreferencesPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide timeline ads","description":"Removes ads from the timeline.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.instagram.android","versions":["275.0.0.27.98"]}]},{"name":"Hide timestamp","description":"Hides timestamp in video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide video action buttons","description":"Adds the options to hide action buttons under a video.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ResourceMappingPatch","LithoFilterPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide watermark","description":"Hides creator\u0027s watermarks on videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Minimized playback","description":"Enables minimized and background playback.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Player type hook","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Minimized playback music","description":"Enables minimized playback on Kids music.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Music video ads","description":"Removes ads in the music player.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Navigation buttons","description":"Adds options to hide or change navigation buttons.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","ResolvePivotBarFingerprintsPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Old video quality menu","description":"Shows the old video quality with the advanced video quality options instead of the new one.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","OldVideoQualityMenuResourcePatch","LithoFilterPatch","BottomSheetHookPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.20.39","18.23.35"]}]},{"name":"Open links externally","description":"Open links outside of the app directly in your browser.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Playback speed","description":"Adds custom playback speeds and ability to remember the playback speed you chose in the video playback speed flyout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Custom playback speed","Remember playback speed"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.20.39","18.23.35"]}]},{"name":"Playback speed","description":"Enables the playback speed option for all videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Player flyout menu","description":"Hides player flyout menu items.","version":"0.0.0","excluded":false,"options":[],"dependencies":["LithoFilterPatch","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Predictive back gesture","description":"Enables the predictive back gesture introduced on Android 13.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Premium heading","description":"Shows premium branding on the home screen.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Premium icon reddit","description":"Unlocks premium Reddit app icons.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Pro unlock","description":"Unlocks pro-only functions.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.backdrops.wallpapers","versions":["4.52"]}]},{"name":"Promo code unlock","description":"Disables the validation of promo code. Any code will work to unlock all features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Spoof cert patch"],"compatiblePackages":[{"name":"de.dwd.warnapp","versions":[]}]},{"name":"Remember video quality","description":"Adds the ability to remember the video quality you chose in the video quality flyout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video information","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.19.35","18.20.39","18.23.35"]}]},{"name":"Remove ads","description":"Removes all ads from the app.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"net.binarymode.android.irplus","versions":[]}]},{"name":"Remove badge tab","description":"Removes the badge tab from the activity tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.sony.songpal.mdr","versions":[]}]},{"name":"Remove bootloader detection","description":"Removes the check for an unlocked bootloader.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.bmf.bmf2go","versions":[]}]},{"name":"Remove broadcasts restriction","description":"Enables starting/stopping NetGuard via broadcasts.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"eu.faircode.netguard","versions":[]}]},{"name":"Remove debugging detection","description":"Removes the USB and wireless debugging checks.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.scb.phone","versions":[]}]},{"name":"Remove device restrictions","description":"Removes restrictions from using the app on any device.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.recorder","versions":[]}]},{"name":"Remove notification badge","description":"Removes the red notification badge from the activity tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.sony.songpal.mdr","versions":[]}]},{"name":"Remove player controls background","description":"Removes the background from the video player controls.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Remove root detection","description":"Removes the check for root permissions.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.bmf.bmf2go","versions":[]}]},{"name":"Remove root detection","description":"Removes the check for root permissions and unlocked bootloader.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.oe.app","versions":[]}]},{"name":"Remove screen capture restriction","description":"Removes the restriction of capturing audio from apps that normally wouldn\u0027t allow it.","version":"0.0.0","excluded":true,"options":[],"dependencies":["RemoveCaptureRestrictionResourcePatch"],"compatiblePackages":[]},{"name":"Remove screenshot restriction","description":"Removes the restriction of taking screenshots in apps that normally wouldn\u0027t allow it.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Return YouTube Dislike","description":"Shows the dislike count of videos using the Return YouTube Dislike API.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video id hook","ReturnYouTubeDislikeResourcePatch","Player type hook"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Sanitize sharing links","description":"Removes (tracking) query parameters from the URLs when sharing links.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Seekbar tapping","description":"Enables tap-to-seek on the seekbar of the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","EnableSeekbarTappingResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Settings","description":"Adds settings menu to Twitch.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","SettingsResourcePatch"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":[]}]},{"name":"Settings","description":"Adds ReVanced settings to TikTok.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Show deleted messages","description":"Shows deleted chat messages behind a clickable spoiler.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Show seekbar","description":"Shows progress bar for all video.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Sim spoof","description":"Spoofs the information which is retrieved from the sim-card.","version":"0.0.0","excluded":true,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"SponsorBlock","description":"Integrates SponsorBlock which allows skipping video segments such as sponsored content.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video id hook","Video information","Player type hook","Player controls bytecode patch","SponsorBlockResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Spoof app version","description":"Tricks YouTube into thinking you are running an older version of the app. One of the side effects also includes restoring the old UI.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://baconreader.com/auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.onelouder.baconreader","versions":[]},{"name":"com.onelouder.baconreader.premium","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"dbrady://relay\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"free.reddit.news","versions":[]},{"name":"reddit.news","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://rubenmayayo.com\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.rubenmayayo.reddit","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://www.ccrama.me\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"me.ccrama.redditslide","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"redditisfun://auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.andrewshu.android.reddit","versions":[]},{"name":"com.andrewshu.android.redditdonation","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://redditsync/auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":[]},{"name":"com.laurencedawson.reddit_sync.pro","versions":[]},{"name":"com.laurencedawson.reddit_sync.dev","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"https://127.0.0.1:65023/authorize_callback\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"o.o.joey","versions":[]},{"name":"o.o.joey.pro","versions":[]},{"name":"o.o.joey.dev","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"infinity://localhost\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"ml.docilealligator.infinityforreddit","versions":[]}]},{"name":"Spoof signature","description":"Spoofs the signature of the app.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.oe.app","versions":[]}]},{"name":"Spoof wifi connection","description":"Spoofs an existing Wi-Fi connection.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Spotify theme","description":"Applies a custom theme.","version":"0.0.0","excluded":false,"options":[{"key":"backgroundColor","title":"Background color","description":"The background color. Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"accentColor","title":"Accent color","description":"The accent color (\u0027spotify green\u0027 by default). Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"accentPressedColor","title":"Pressed accent for the dark theme","description":"The color when accented buttons are pressed, by default slightly darker than accent. Can be a hex color or a resource reference.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.spotify.music","versions":[]}]},{"name":"Swipe controls","description":"Adds volume and brightness swipe controls.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Player type hook","SwipeControlsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Tablet mini player","description":"Enables the tablet mini player layout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Theme","description":"Applies a custom theme.","version":"0.0.0","excluded":false,"options":[{"key":"darkThemeBackgroundColor","title":"Background color for the dark theme","description":"The background color of the dark theme. Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"lightThemeBackgroundColor","title":"Background color for the light theme","description":"The background color of the light theme. Can be a hex color or a resource reference.","required":false,"choices":null}],"dependencies":["Litho color hook","SeekbarColorBytecodePatch","ThemeResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Unlock paid widgets","description":"Unlocks paid widgets of the app","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.dci.dev.androidtwelvewidgets","versions":[]}]},{"name":"Unlock plus","description":"Unlocks plus features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["SignatureDetectionPatch"],"compatiblePackages":[{"name":"com.microblink.photomath","versions":["8.20.0"]}]},{"name":"Unlock premium","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"io.yuka.android","versions":[]}]},{"name":"Unlock pro","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.candylink.openvpn","versions":[]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"ginlemon.iconpackstudio","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["SignatureVerificationPatch","LicenseValidationPatch"],"compatiblePackages":[{"name":"com.zombodroid.MemeGenerator","versions":["4.6364","4.6370","4.6375","4.6377"]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.wakdev.apps.nfctools.se","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ithebk.expensemanager","versions":[]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"co.windyapp.android","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"tv.trakt.trakt","versions":["1.1.1"]}]},{"name":"Unlock pro","description":"Unlocks all professional features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"org.totschnig.myexpenses","versions":["3.4.9"]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.awedea.nyx","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.vsco.cam","versions":[]}]},{"name":"Unlock themes","description":"Unlocks all themes that are inaccessible until a certain level is reached.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ticktick.task","versions":[]}]},{"name":"Unlock trial","description":"Unlocks the trial version.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"net.dinglisch.android.taskerm","versions":[]}]},{"name":"Upgrade button remover","description":"Removes the upgrade tab from the pivot bar.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Vanced MicroG support","description":"Allows YouTube ReVanced to run without root and under a different package name with Vanced MicroG.","version":"0.0.0","excluded":false,"options":[],"dependencies":["MicroGResourcePatch","Hide cast button","Client spoof"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Vanced MicroG support","description":"Allows YouTube Music ReVanced to run without root and under a different package name.","version":"0.0.0","excluded":false,"options":[],"dependencies":["MicroGResourcePatch"],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Video ads","description":"Removes ads in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Wide searchbar","description":"Replaces the search icon with a wide search bar. This will hide the YouTube logo when active.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]}] \ No newline at end of file From 545388b3b21cabb485c4d2025756c48984548d6b Mon Sep 17 00:00:00 2001 From: oSumAtrIX Date: Thu, 3 Aug 2023 16:39:47 +0200 Subject: [PATCH 05/67] fix: remove newline --- .../customclients/redditisfun/api/patch/SpoofClientPatch.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/kotlin/app/revanced/patches/reddit/customclients/redditisfun/api/patch/SpoofClientPatch.kt b/src/main/kotlin/app/revanced/patches/reddit/customclients/redditisfun/api/patch/SpoofClientPatch.kt index 79ce20445..66702d8f7 100644 --- a/src/main/kotlin/app/revanced/patches/reddit/customclients/redditisfun/api/patch/SpoofClientPatch.kt +++ b/src/main/kotlin/app/revanced/patches/reddit/customclients/redditisfun/api/patch/SpoofClientPatch.kt @@ -60,7 +60,7 @@ class SpoofClientPatch : AbstractSpoofClientPatch( override fun List.patchUserAgent(context: BytecodeContext): PatchResult { // Use a random user agent. val randomName = (0..100000).random() - val userAgent = "android:app.revanced.$randomName:v1.0.0 (by /u/revanced)\n" + val userAgent = "android:app.revanced.$randomName:v1.0.0 (by /u/revanced)" first().mutableMethod.addInstructions( 0, From a519919779cbe6f8b9cc416424b50f6b0a1432dc Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 3 Aug 2023 14:43:30 +0000 Subject: [PATCH 06/67] chore(release): 2.188.0-dev.3 [skip ci] # [2.188.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.2...v2.188.0-dev.3) (2023-08-03) ### Bug Fixes * remove newline ([545388b](https://github.com/ReVanced/revanced-patches/commit/545388b3b21cabb485c4d2025756c48984548d6b)) --- CHANGELOG.md | 7 +++++++ gradle.properties | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 758e28978..d55d7cec7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [2.188.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.2...v2.188.0-dev.3) (2023-08-03) + + +### Bug Fixes + +* remove newline ([545388b](https://github.com/ReVanced/revanced-patches/commit/545388b3b21cabb485c4d2025756c48984548d6b)) + # [2.188.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.1...v2.188.0-dev.2) (2023-08-03) diff --git a/gradle.properties b/gradle.properties index dddc24167..166263a81 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ org.gradle.parallel = true org.gradle.caching = true kotlin.code.style = official -version = 2.188.0-dev.2 +version = 2.188.0-dev.3 From 08413bdc97aef892f7372c585d1d792eb95e30f4 Mon Sep 17 00:00:00 2001 From: d4rkk3y <43563783+d4rkk3y@users.noreply.github.com> Date: Thu, 3 Aug 2023 23:12:45 +0700 Subject: [PATCH 07/67] fix(Tiktok - Show seekbar): Bump compatibility (#2737) --- .../fingerprints/ShouldShowSeekBarFingerprint.kt | 9 +++++++++ .../interaction/seekbar/patch/ShowSeekbarPatch.kt | 15 ++++++++++++--- 2 files changed, 21 insertions(+), 3 deletions(-) create mode 100644 src/main/kotlin/app/revanced/patches/tiktok/interaction/seekbar/fingerprints/ShouldShowSeekBarFingerprint.kt diff --git a/src/main/kotlin/app/revanced/patches/tiktok/interaction/seekbar/fingerprints/ShouldShowSeekBarFingerprint.kt b/src/main/kotlin/app/revanced/patches/tiktok/interaction/seekbar/fingerprints/ShouldShowSeekBarFingerprint.kt new file mode 100644 index 000000000..d13cfe33a --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/tiktok/interaction/seekbar/fingerprints/ShouldShowSeekBarFingerprint.kt @@ -0,0 +1,9 @@ +package app.revanced.patches.tiktok.interaction.seekbar.fingerprints + +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint + +object ShouldShowSeekBarFingerprint : MethodFingerprint( + strings = listOf( + "can not show seekbar, state: 1, not in resume" + ), +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/tiktok/interaction/seekbar/patch/ShowSeekbarPatch.kt b/src/main/kotlin/app/revanced/patches/tiktok/interaction/seekbar/patch/ShowSeekbarPatch.kt index f0cf94359..713d4557d 100644 --- a/src/main/kotlin/app/revanced/patches/tiktok/interaction/seekbar/patch/ShowSeekbarPatch.kt +++ b/src/main/kotlin/app/revanced/patches/tiktok/interaction/seekbar/patch/ShowSeekbarPatch.kt @@ -5,14 +5,13 @@ import app.revanced.patcher.annotation.Description import app.revanced.patcher.annotation.Name import app.revanced.patcher.data.BytecodeContext import app.revanced.patcher.extensions.InstructionExtensions.addInstructions -import app.revanced.patcher.extensions.InstructionExtensions.getInstruction import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.PatchResult import app.revanced.patcher.patch.PatchResultSuccess import app.revanced.patcher.patch.annotations.Patch import app.revanced.patches.tiktok.interaction.seekbar.annotations.ShowSeekbarCompatibility import app.revanced.patches.tiktok.interaction.seekbar.fingerprints.SetSeekBarShowTypeFingerprint -import org.jf.dexlib2.iface.instruction.formats.Instruction22t +import app.revanced.patches.tiktok.interaction.seekbar.fingerprints.ShouldShowSeekBarFingerprint @Patch @Name("Show seekbar") @@ -21,11 +20,21 @@ import org.jf.dexlib2.iface.instruction.formats.Instruction22t class ShowSeekbarPatch : BytecodePatch( listOf( SetSeekBarShowTypeFingerprint, + ShouldShowSeekBarFingerprint, ) ) { override fun execute(context: BytecodeContext): PatchResult { + ShouldShowSeekBarFingerprint.result?.mutableMethod?.apply { + addInstructions( + 0, + """ + const/4 v0, 0x1 + return v0 + """ + ) + } SetSeekBarShowTypeFingerprint.result?.mutableMethod?.apply { - val typeRegister = getInstruction(1).registerB + val typeRegister = implementation!!.registerCount - 1 addInstructions( 0, From e18a9bcb50705d374ccbf03cd6ab9a140a2f23ec Mon Sep 17 00:00:00 2001 From: Aunali321 <48486084+Aunali321@users.noreply.github.com> Date: Thu, 3 Aug 2023 21:46:30 +0530 Subject: [PATCH 08/67] feat(Lightroom): Add `Unlock premium` patch (#2740) Co-authored-by: oSumAtrIX --- .../annotations/UnlockPremiumCompatibility.kt | 8 ++++++ .../fingerprint/HasPurchasedFingerprint.kt | 18 +++++++++++++ .../misc/premium/patch/UnlockPremiumPatch.kt | 27 +++++++++++++++++++ 3 files changed, 53 insertions(+) create mode 100644 src/main/kotlin/app/revanced/patches/lightroom/misc/premium/annotations/UnlockPremiumCompatibility.kt create mode 100644 src/main/kotlin/app/revanced/patches/lightroom/misc/premium/fingerprint/HasPurchasedFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/lightroom/misc/premium/patch/UnlockPremiumPatch.kt diff --git a/src/main/kotlin/app/revanced/patches/lightroom/misc/premium/annotations/UnlockPremiumCompatibility.kt b/src/main/kotlin/app/revanced/patches/lightroom/misc/premium/annotations/UnlockPremiumCompatibility.kt new file mode 100644 index 000000000..1c03bff62 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/lightroom/misc/premium/annotations/UnlockPremiumCompatibility.kt @@ -0,0 +1,8 @@ +package app.revanced.patches.lightroom.misc.premium.annotations + +import app.revanced.patcher.annotation.Compatibility +import app.revanced.patcher.annotation.Package + +@Compatibility([Package("com.adobe.lrmobile")]) +@Target(AnnotationTarget.CLASS) +internal annotation class UnlockPremiumCompatibility diff --git a/src/main/kotlin/app/revanced/patches/lightroom/misc/premium/fingerprint/HasPurchasedFingerprint.kt b/src/main/kotlin/app/revanced/patches/lightroom/misc/premium/fingerprint/HasPurchasedFingerprint.kt new file mode 100644 index 000000000..a56881fd0 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/lightroom/misc/premium/fingerprint/HasPurchasedFingerprint.kt @@ -0,0 +1,18 @@ +package app.revanced.patches.lightroom.misc.premium.fingerprint + +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint +import org.jf.dexlib2.AccessFlags +import org.jf.dexlib2.Opcode + +object HasPurchasedFingerprint : MethodFingerprint( + returnType = "Z", + accessFlags = AccessFlags.PRIVATE or AccessFlags.FINAL, + strings = listOf("isPurchaseDoneRecently = true, access platform profile present? = "), + opcodes = listOf( + Opcode.SGET_OBJECT, + Opcode.CONST_4, + Opcode.CONST_4, + Opcode.CONST_4, + ) +) diff --git a/src/main/kotlin/app/revanced/patches/lightroom/misc/premium/patch/UnlockPremiumPatch.kt b/src/main/kotlin/app/revanced/patches/lightroom/misc/premium/patch/UnlockPremiumPatch.kt new file mode 100644 index 000000000..ccd59536b --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/lightroom/misc/premium/patch/UnlockPremiumPatch.kt @@ -0,0 +1,27 @@ +package app.revanced.patches.lightroom.misc.premium.patch + +import app.revanced.extensions.toErrorResult +import app.revanced.patcher.annotation.Description +import app.revanced.patcher.annotation.Name +import app.revanced.patcher.data.BytecodeContext +import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction +import app.revanced.patcher.patch.BytecodePatch +import app.revanced.patcher.patch.PatchResult +import app.revanced.patcher.patch.PatchResultSuccess +import app.revanced.patcher.patch.annotations.Patch +import app.revanced.patches.lightroom.misc.premium.annotations.UnlockPremiumCompatibility +import app.revanced.patches.lightroom.misc.premium.fingerprint.HasPurchasedFingerprint + +@Patch +@Name("Unlock premium") +@Description("Unlocks premium features.") +@UnlockPremiumCompatibility +class UnlockPremiumPatch : BytecodePatch(listOf(HasPurchasedFingerprint)) { + override fun execute(context: BytecodeContext): PatchResult { + // Set hasPremium = true. + HasPurchasedFingerprint.result?.mutableMethod?.replaceInstruction(2, "const/4 v2, 0x1") + ?: throw HasPurchasedFingerprint.toErrorResult() + + return PatchResultSuccess() + } +} \ No newline at end of file From 86a271cd7cc3d1d2a11ff9ebe962574368b93f4f Mon Sep 17 00:00:00 2001 From: Matthew Date: Thu, 3 Aug 2023 09:22:13 -0700 Subject: [PATCH 09/67] feat(YouTube Music): Add `Permanent Shuffle` patch (#2730) Co-authored-by: oSumAtrIX --- .../fingerprints/DisableShuffleFingerprint.kt | 20 +++++++++++++ .../patch/PermanentShufflePatch.kt | 29 +++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 src/main/kotlin/app/revanced/patches/music/interaction/permanentshuffle/fingerprints/DisableShuffleFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/music/interaction/permanentshuffle/patch/PermanentShufflePatch.kt diff --git a/src/main/kotlin/app/revanced/patches/music/interaction/permanentshuffle/fingerprints/DisableShuffleFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/interaction/permanentshuffle/fingerprints/DisableShuffleFingerprint.kt new file mode 100644 index 000000000..818606d9a --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/music/interaction/permanentshuffle/fingerprints/DisableShuffleFingerprint.kt @@ -0,0 +1,20 @@ +package app.revanced.patches.music.interaction.permanentshuffle.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint +import org.jf.dexlib2.AccessFlags +import org.jf.dexlib2.Opcode + +object DisableShuffleFingerprint : MethodFingerprint( + "V", + AccessFlags.PUBLIC or AccessFlags.FINAL, + listOf(), + listOf( + Opcode.IGET_OBJECT, + Opcode.INVOKE_VIRTUAL, + Opcode.SGET_OBJECT, + Opcode.IPUT_OBJECT, + Opcode.IGET_OBJECT, + Opcode.INVOKE_VIRTUAL + ) +) diff --git a/src/main/kotlin/app/revanced/patches/music/interaction/permanentshuffle/patch/PermanentShufflePatch.kt b/src/main/kotlin/app/revanced/patches/music/interaction/permanentshuffle/patch/PermanentShufflePatch.kt new file mode 100644 index 000000000..c95d26b58 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/music/interaction/permanentshuffle/patch/PermanentShufflePatch.kt @@ -0,0 +1,29 @@ +package app.revanced.patches.music.interaction.permanentshuffle.patch + +import app.revanced.extensions.toErrorResult +import app.revanced.patcher.annotation.Description +import app.revanced.patcher.annotation.Name +import app.revanced.patcher.data.BytecodeContext +import app.revanced.patcher.extensions.InstructionExtensions.addInstruction +import app.revanced.patcher.patch.BytecodePatch +import app.revanced.patcher.patch.PatchResult +import app.revanced.patcher.patch.PatchResultSuccess +import app.revanced.patcher.patch.annotations.Patch +import app.revanced.patches.music.annotations.MusicCompatibility +import app.revanced.patches.music.interaction.permanentshuffle.fingerprints.DisableShuffleFingerprint + +@Patch(false) +@Name("Permanent shuffle") +@Description("Permanently remember your shuffle preference " + + "even if the playlist ends or another track is played.") +@MusicCompatibility +class PermanentShuffleTogglePatch : BytecodePatch( + listOf(DisableShuffleFingerprint) +) { + override fun execute(context: BytecodeContext): PatchResult { + DisableShuffleFingerprint.result?.mutableMethod?.addInstruction(0, "return-void") + ?: return DisableShuffleFingerprint.toErrorResult() + + return PatchResultSuccess() + } +} From 896a71308f1084d7f941c5b59610e40ea5d53009 Mon Sep 17 00:00:00 2001 From: Aunali321 <48486084+Aunali321@users.noreply.github.com> Date: Thu, 3 Aug 2023 21:54:28 +0530 Subject: [PATCH 10/67] feat(Lightroom): Add `Disable mandatory login` patch (#2738) Co-authored-by: oSumAtrIX --- .../DisableMandatoryLoginCompatibility.kt | 8 ++++++ .../fingerprint/IsLoggedInFingerprint.kt | 19 +++++++++++++ .../login/patch/DisableMandatoryLoginPatch.kt | 27 +++++++++++++++++++ 3 files changed, 54 insertions(+) create mode 100644 src/main/kotlin/app/revanced/patches/lightroom/misc/login/annotations/DisableMandatoryLoginCompatibility.kt create mode 100644 src/main/kotlin/app/revanced/patches/lightroom/misc/login/fingerprint/IsLoggedInFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/lightroom/misc/login/patch/DisableMandatoryLoginPatch.kt diff --git a/src/main/kotlin/app/revanced/patches/lightroom/misc/login/annotations/DisableMandatoryLoginCompatibility.kt b/src/main/kotlin/app/revanced/patches/lightroom/misc/login/annotations/DisableMandatoryLoginCompatibility.kt new file mode 100644 index 000000000..edc9e6896 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/lightroom/misc/login/annotations/DisableMandatoryLoginCompatibility.kt @@ -0,0 +1,8 @@ +package app.revanced.patches.lightroom.misc.login.annotations + +import app.revanced.patcher.annotation.Compatibility +import app.revanced.patcher.annotation.Package + +@Compatibility([Package("com.adobe.lrmobile",)]) +@Target(AnnotationTarget.CLASS) +internal annotation class DisableMandatoryLoginCompatibility diff --git a/src/main/kotlin/app/revanced/patches/lightroom/misc/login/fingerprint/IsLoggedInFingerprint.kt b/src/main/kotlin/app/revanced/patches/lightroom/misc/login/fingerprint/IsLoggedInFingerprint.kt new file mode 100644 index 000000000..2a57095a8 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/lightroom/misc/login/fingerprint/IsLoggedInFingerprint.kt @@ -0,0 +1,19 @@ +package app.revanced.patches.lightroom.misc.login.fingerprint + +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint +import org.jf.dexlib2.AccessFlags +import org.jf.dexlib2.Opcode + +object IsLoggedInFingerprint : MethodFingerprint( + returnType = "Z", + accessFlags = AccessFlags.PUBLIC or AccessFlags.STATIC or AccessFlags.FINAL, + opcodes = listOf( + Opcode.INVOKE_STATIC, + Opcode.MOVE_RESULT_OBJECT, + Opcode.SGET_OBJECT, + Opcode.IF_NE, + Opcode.CONST_4, + Opcode.GOTO + ) +) diff --git a/src/main/kotlin/app/revanced/patches/lightroom/misc/login/patch/DisableMandatoryLoginPatch.kt b/src/main/kotlin/app/revanced/patches/lightroom/misc/login/patch/DisableMandatoryLoginPatch.kt new file mode 100644 index 000000000..49d4f46a4 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/lightroom/misc/login/patch/DisableMandatoryLoginPatch.kt @@ -0,0 +1,27 @@ +package app.revanced.patches.lightroom.misc.login.patch + +import app.revanced.extensions.toErrorResult +import app.revanced.patcher.annotation.Name +import app.revanced.patcher.data.BytecodeContext +import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction +import app.revanced.patcher.patch.BytecodePatch +import app.revanced.patcher.patch.PatchResult +import app.revanced.patcher.patch.PatchResultSuccess +import app.revanced.patcher.patch.annotations.Patch +import app.revanced.patches.lightroom.misc.login.annotations.DisableMandatoryLoginCompatibility +import app.revanced.patches.lightroom.misc.login.fingerprint.IsLoggedInFingerprint + +@Patch +@Name("Disable mandatory login") +@DisableMandatoryLoginCompatibility +class DisableMandatoryLoginPatch : BytecodePatch(listOf(IsLoggedInFingerprint)) { + override fun execute(context: BytecodeContext): PatchResult { + IsLoggedInFingerprint.result?.mutableMethod?.apply { + val index = implementation!!.instructions.lastIndex - 1 + // Set isLoggedIn = true. + replaceInstruction(index, "const/4 v0, 0x1") + } ?: throw IsLoggedInFingerprint.toErrorResult() + + return PatchResultSuccess() + } +} \ No newline at end of file From 26f9b0514fda9434b2a36d2f9e5ad6a4f5bb94bd Mon Sep 17 00:00:00 2001 From: oSumAtrIX Date: Thu, 3 Aug 2023 18:34:14 +0200 Subject: [PATCH 11/67] fix: improve wording --- .../patches/reddit/customclients/AbstractSpoofClientPatch.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/kotlin/app/revanced/patches/reddit/customclients/AbstractSpoofClientPatch.kt b/src/main/kotlin/app/revanced/patches/reddit/customclients/AbstractSpoofClientPatch.kt index 972b6dd5a..93840b57f 100644 --- a/src/main/kotlin/app/revanced/patches/reddit/customclients/AbstractSpoofClientPatch.kt +++ b/src/main/kotlin/app/revanced/patches/reddit/customclients/AbstractSpoofClientPatch.kt @@ -31,7 +31,7 @@ abstract class AbstractSpoofClientPatch( val error = """ In order to use this patch, you need to provide a client ID. - You can do this by creating a file at ${it.absolutePath} with the client ID as its content. + You can do that by creating a file at ${it.absolutePath} with the client ID as its content. Alternatively, you can provide the client ID using patch options. You can get your client ID from https://www.reddit.com/prefs/apps. From 95407be197402b8bb24c826ac36522ee1c4a4246 Mon Sep 17 00:00:00 2001 From: oSumAtrIX Date: Thu, 3 Aug 2023 20:37:47 +0200 Subject: [PATCH 12/67] build(Needs bump): Bump compatibility --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 930992c5e..107444c24 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -27,7 +27,7 @@ repositories { } dependencies { - implementation("app.revanced:revanced-patcher:12.0.0") + implementation("app.revanced:revanced-patcher:12.1.1") implementation("app.revanced:multidexlib2:2.5.3-a3836654") // Required for meta implementation("com.google.code.gson:gson:2.10.1") From c5928b2b17496aca7524108a9cf8d05b1a24d353 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 3 Aug 2023 18:41:28 +0000 Subject: [PATCH 13/67] chore(release): 2.188.0-dev.4 [skip ci] # [2.188.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.3...v2.188.0-dev.4) (2023-08-03) ### Bug Fixes * improve wording ([26f9b05](https://github.com/ReVanced/revanced-patches/commit/26f9b0514fda9434b2a36d2f9e5ad6a4f5bb94bd)) * **Tiktok - Show seekbar:** Bump compatibility ([#2737](https://github.com/ReVanced/revanced-patches/issues/2737)) ([08413bd](https://github.com/ReVanced/revanced-patches/commit/08413bdc97aef892f7372c585d1d792eb95e30f4)) ### Features * **Lightroom:** Add `Disable mandatory login` patch ([#2738](https://github.com/ReVanced/revanced-patches/issues/2738)) ([896a713](https://github.com/ReVanced/revanced-patches/commit/896a71308f1084d7f941c5b59610e40ea5d53009)) * **Lightroom:** Add `Unlock premium` patch ([#2740](https://github.com/ReVanced/revanced-patches/issues/2740)) ([e18a9bc](https://github.com/ReVanced/revanced-patches/commit/e18a9bcb50705d374ccbf03cd6ab9a140a2f23ec)) * **YouTube Music:** Add `Permanent Shuffle` patch ([#2730](https://github.com/ReVanced/revanced-patches/issues/2730)) ([86a271c](https://github.com/ReVanced/revanced-patches/commit/86a271cd7cc3d1d2a11ff9ebe962574368b93f4f)) --- CHANGELOG.md | 15 +++++++++++++++ gradle.properties | 2 +- patches.json | 2 +- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d55d7cec7..778088018 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,18 @@ +# [2.188.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.3...v2.188.0-dev.4) (2023-08-03) + + +### Bug Fixes + +* improve wording ([26f9b05](https://github.com/ReVanced/revanced-patches/commit/26f9b0514fda9434b2a36d2f9e5ad6a4f5bb94bd)) +* **Tiktok - Show seekbar:** Bump compatibility ([#2737](https://github.com/ReVanced/revanced-patches/issues/2737)) ([08413bd](https://github.com/ReVanced/revanced-patches/commit/08413bdc97aef892f7372c585d1d792eb95e30f4)) + + +### Features + +* **Lightroom:** Add `Disable mandatory login` patch ([#2738](https://github.com/ReVanced/revanced-patches/issues/2738)) ([896a713](https://github.com/ReVanced/revanced-patches/commit/896a71308f1084d7f941c5b59610e40ea5d53009)) +* **Lightroom:** Add `Unlock premium` patch ([#2740](https://github.com/ReVanced/revanced-patches/issues/2740)) ([e18a9bc](https://github.com/ReVanced/revanced-patches/commit/e18a9bcb50705d374ccbf03cd6ab9a140a2f23ec)) +* **YouTube Music:** Add `Permanent Shuffle` patch ([#2730](https://github.com/ReVanced/revanced-patches/issues/2730)) ([86a271c](https://github.com/ReVanced/revanced-patches/commit/86a271cd7cc3d1d2a11ff9ebe962574368b93f4f)) + # [2.188.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.2...v2.188.0-dev.3) (2023-08-03) diff --git a/gradle.properties b/gradle.properties index 166263a81..a3ce77d32 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ org.gradle.parallel = true org.gradle.caching = true kotlin.code.style = official -version = 2.188.0-dev.3 +version = 2.188.0-dev.4 diff --git a/patches.json b/patches.json index 908f926ac..9dc1ab1fe 100644 --- a/patches.json +++ b/patches.json @@ -1 +1 @@ -[{"name":"Always autorepeat","description":"Always repeats the playing video again.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Auto claim channel points","description":"Automatically claim Channel Points.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Background play","description":"Enables playing music in the background.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Block audio ads","description":"Blocks audio ads in streams and VODs.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Block embedded ads","description":"Blocks embedded stream ads using services like TTV.lol or PurpleAdBlocker.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Block video ads","Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Block video ads","description":"Blocks video ads in streams and VODs.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Bypass certificate checks","description":"Bypasses certificate checks which prevent YouTube Music from working on Android Auto.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Change package name","description":"Changes the package name.","version":"0.0.0","excluded":true,"options":[{"key":"packageName","title":"Package name","description":"The name of the package to rename of the app.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[]},{"name":"Client spoof","description":"Spoofs the client to allow playback.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Spoof signature verification"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Codecs unlock","description":"Adds more audio codec options. The new audio codecs usually result in better audio quality.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Comments","description":"Hides components related to comments.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings","LithoFilterPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Compact header","description":"Hides the music category bar at the top of the homepage.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Copy video url","description":"Adds buttons in player to copy video links.","version":"0.0.0","excluded":false,"options":[],"dependencies":["CopyVideoUrlResourcePatch","Player controls bytecode patch","Video information"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Custom branding","description":"Changes the YouTube launcher icon and name to your choice (defaults to ReVanced).","version":"0.0.0","excluded":false,"options":[{"key":"appName","title":"Application Name","description":"The name of the application it will show on your home screen.","required":true,"choices":null},{"key":"iconPath","title":"App Icon Path","description":"A path containing mipmap resource folders with icons.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Debug mode","description":"Enables Twitch\u0027s internal debugging mode.","version":"0.0.0","excluded":true,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":[]}]},{"name":"Disable Shorts on startup","description":"Disables playing YouTube Shorts when launching YouTube.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable Sync for Lemmy bottom sheet","description":"Disables the bottom sheet at the startup that asks you to signup to \"Sync for Lemmy\".","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":["v23.06.30-13:39"]},{"name":"com.laurencedawson.reddit_sync.pro","versions":[]},{"name":"com.laurencedawson.reddit_sync.dev","versions":[]}]},{"name":"Disable ads","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":[]}]},{"name":"Disable ads","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"o.o.joey","versions":[]}]},{"name":"Disable ads","description":"Disables ads in HexEditor.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.myprog.hexedit","versions":[]}]},{"name":"Disable auto captions","description":"Disable forced captions from being automatically enabled.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable fullscreen panels","description":"Disables video description and comments panel in fullscreen view.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable login requirement","description":"Do not force login.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Disable player popup panels","description":"Disables panels from appearing automatically when going into fullscreen (playlist or live chat).","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable screenshot popup","description":"Disables the popup that shows up when taking a screenshot.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Disable switching emoji to sticker in message input field","description":"Disables switching from emoji to sticker search mode in message input field","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Disable typing indicator","description":"Disables the indicator while typing a message","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Disable zoom haptics","description":"Disables haptics when zooming.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Downloads","description":"Removes download restrictions and changes the default path to download to.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Dynamic color","description":"Replaces the default Twitter Blue with the users Material You palette.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Enable android debugging","description":"Enables Android debugging capabilities.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Enable debugging","description":"Adds debugging options.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"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.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.spotify.lite","versions":[]}]},{"name":"Exclusive audio playback","description":"Enables the option to play music without video.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Export all activities","description":"Makes all app activities exportable.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"External downloads","description":"Adds support to download and save YouTube videos using an external app.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ExternalDownloadsResourcePatch","Player controls bytecode patch","Video information"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Feed filter","description":"Filters tiktok videos: removing ads, removing livestreams.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Fix google login","description":"Allows logging in with a Google account.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"HDR auto brightness","description":"Makes the brightness of HDR videos follow the system default.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide Shorts components","description":"Hides components from YouTube Shorts.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","LithoFilterPatch","HideShortsComponentsResourcePatch","ResourceMappingPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide ads","description":"Removes ads from the Reddit.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Hide subreddit banner","Hide comment ads"],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Hide ads","description":"Removes general ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["VerticalScrollPatch"],"compatiblePackages":[{"name":"com.vanced.android.youtube","versions":[]}]},{"name":"Hide ads","description":"Hides ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Json hook"],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Hide ads","description":"Removes ads from Inshorts.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.nis.app","versions":[]}]},{"name":"Hide ads","description":"Removes general ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Hide get premium","HideAdsResourcePatch","VerticalScrollPatch","FixBackToExitGesturePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide ads","description":"Removes ads from TikTok.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Hide ads","description":"Hides ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"jp.pxv.android","versions":[]}]},{"name":"Hide album cards","description":"Hides the album cards below the artist description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","AlbumCardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide autoplay button","description":"Hides the autoplay button in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","ResourceMappingPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide breaking news shelf","description":"Hides the breaking news shelf on the homepage tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","BreakingNewsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide captions button","description":"Hides the captions button on video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide cast button","description":"Hides the cast button in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Hide crowdfunding box","description":"Hides the crowdfunding box between the player and video description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","CrowdfundingBoxResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide email address","description":"Hides the email address in the account switcher.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideEmailAddressResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide endscreen cards","description":"Hides the suggested video cards at the end of a video in fullscreen.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideEndscreenCardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide filter bar","description":"Hides the filter bar in video feeds.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideFilterBarResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide floating microphone button","description":"Hides the floating microphone button which appears in search.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideFloatingMicrophoneButtonResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide get premium","description":"Removes all \"Get Premium\" evidences from the avatar menu.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Hide inbox ads","description":"Hides ads in inbox.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Hide info cards","description":"Hides info cards in videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideInfocardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide layout components","description":"Hides general layout components.","version":"0.0.0","excluded":false,"options":[],"dependencies":["LithoFilterPatch","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide load more button","description":"Hides the button under videos that loads similar videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideLoadMoreButtonResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide player buttons","description":"Adds the option to hide video player previous and next buttons.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide player overlay","description":"Hides the dark background overlay from the player when player controls are visible.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HidePlayerOverlayResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Hide premium navbar","description":"Removes the premium tab from the navbar.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ResourceMappingPatch"],"compatiblePackages":[{"name":"com.spotify.music","versions":[]}]},{"name":"Hide recommended users","description":"Hides recommended users.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Json hook"],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Hide seekbar","description":"Hides the seekbar.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","SeekbarColorBytecodePatch","SeekbarPreferencesPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide timeline ads","description":"Removes ads from the timeline.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.instagram.android","versions":["275.0.0.27.98"]}]},{"name":"Hide timestamp","description":"Hides timestamp in video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide video action buttons","description":"Adds the options to hide action buttons under a video.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ResourceMappingPatch","LithoFilterPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide watermark","description":"Hides creator\u0027s watermarks on videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Minimized playback","description":"Enables minimized and background playback.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Player type hook","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Minimized playback music","description":"Enables minimized playback on Kids music.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Music video ads","description":"Removes ads in the music player.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Navigation buttons","description":"Adds options to hide or change navigation buttons.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","ResolvePivotBarFingerprintsPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Old video quality menu","description":"Shows the old video quality with the advanced video quality options instead of the new one.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","OldVideoQualityMenuResourcePatch","LithoFilterPatch","BottomSheetHookPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.20.39","18.23.35"]}]},{"name":"Open links externally","description":"Open links outside of the app directly in your browser.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Playback speed","description":"Adds custom playback speeds and ability to remember the playback speed you chose in the video playback speed flyout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Custom playback speed","Remember playback speed"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.20.39","18.23.35"]}]},{"name":"Playback speed","description":"Enables the playback speed option for all videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Player flyout menu","description":"Hides player flyout menu items.","version":"0.0.0","excluded":false,"options":[],"dependencies":["LithoFilterPatch","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Predictive back gesture","description":"Enables the predictive back gesture introduced on Android 13.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Premium heading","description":"Shows premium branding on the home screen.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Premium icon reddit","description":"Unlocks premium Reddit app icons.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Pro unlock","description":"Unlocks pro-only functions.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.backdrops.wallpapers","versions":["4.52"]}]},{"name":"Promo code unlock","description":"Disables the validation of promo code. Any code will work to unlock all features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Spoof cert patch"],"compatiblePackages":[{"name":"de.dwd.warnapp","versions":[]}]},{"name":"Remember video quality","description":"Adds the ability to remember the video quality you chose in the video quality flyout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video information","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.19.35","18.20.39","18.23.35"]}]},{"name":"Remove ads","description":"Removes all ads from the app.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"net.binarymode.android.irplus","versions":[]}]},{"name":"Remove badge tab","description":"Removes the badge tab from the activity tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.sony.songpal.mdr","versions":[]}]},{"name":"Remove bootloader detection","description":"Removes the check for an unlocked bootloader.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.bmf.bmf2go","versions":[]}]},{"name":"Remove broadcasts restriction","description":"Enables starting/stopping NetGuard via broadcasts.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"eu.faircode.netguard","versions":[]}]},{"name":"Remove debugging detection","description":"Removes the USB and wireless debugging checks.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.scb.phone","versions":[]}]},{"name":"Remove device restrictions","description":"Removes restrictions from using the app on any device.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.recorder","versions":[]}]},{"name":"Remove notification badge","description":"Removes the red notification badge from the activity tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.sony.songpal.mdr","versions":[]}]},{"name":"Remove player controls background","description":"Removes the background from the video player controls.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Remove root detection","description":"Removes the check for root permissions.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.bmf.bmf2go","versions":[]}]},{"name":"Remove root detection","description":"Removes the check for root permissions and unlocked bootloader.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.oe.app","versions":[]}]},{"name":"Remove screen capture restriction","description":"Removes the restriction of capturing audio from apps that normally wouldn\u0027t allow it.","version":"0.0.0","excluded":true,"options":[],"dependencies":["RemoveCaptureRestrictionResourcePatch"],"compatiblePackages":[]},{"name":"Remove screenshot restriction","description":"Removes the restriction of taking screenshots in apps that normally wouldn\u0027t allow it.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Return YouTube Dislike","description":"Shows the dislike count of videos using the Return YouTube Dislike API.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video id hook","ReturnYouTubeDislikeResourcePatch","Player type hook"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Sanitize sharing links","description":"Removes (tracking) query parameters from the URLs when sharing links.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Seekbar tapping","description":"Enables tap-to-seek on the seekbar of the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","EnableSeekbarTappingResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Settings","description":"Adds settings menu to Twitch.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","SettingsResourcePatch"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":[]}]},{"name":"Settings","description":"Adds ReVanced settings to TikTok.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Show deleted messages","description":"Shows deleted chat messages behind a clickable spoiler.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Show seekbar","description":"Shows progress bar for all video.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Sim spoof","description":"Spoofs the information which is retrieved from the sim-card.","version":"0.0.0","excluded":true,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"SponsorBlock","description":"Integrates SponsorBlock which allows skipping video segments such as sponsored content.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video id hook","Video information","Player type hook","Player controls bytecode patch","SponsorBlockResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Spoof app version","description":"Tricks YouTube into thinking you are running an older version of the app. One of the side effects also includes restoring the old UI.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://baconreader.com/auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.onelouder.baconreader","versions":[]},{"name":"com.onelouder.baconreader.premium","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"dbrady://relay\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"free.reddit.news","versions":[]},{"name":"reddit.news","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://rubenmayayo.com\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.rubenmayayo.reddit","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://www.ccrama.me\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"me.ccrama.redditslide","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"redditisfun://auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.andrewshu.android.reddit","versions":[]},{"name":"com.andrewshu.android.redditdonation","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://redditsync/auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":[]},{"name":"com.laurencedawson.reddit_sync.pro","versions":[]},{"name":"com.laurencedawson.reddit_sync.dev","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"https://127.0.0.1:65023/authorize_callback\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"o.o.joey","versions":[]},{"name":"o.o.joey.pro","versions":[]},{"name":"o.o.joey.dev","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"infinity://localhost\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"ml.docilealligator.infinityforreddit","versions":[]}]},{"name":"Spoof signature","description":"Spoofs the signature of the app.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.oe.app","versions":[]}]},{"name":"Spoof wifi connection","description":"Spoofs an existing Wi-Fi connection.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Spotify theme","description":"Applies a custom theme.","version":"0.0.0","excluded":false,"options":[{"key":"backgroundColor","title":"Background color","description":"The background color. Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"accentColor","title":"Accent color","description":"The accent color (\u0027spotify green\u0027 by default). Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"accentPressedColor","title":"Pressed accent for the dark theme","description":"The color when accented buttons are pressed, by default slightly darker than accent. Can be a hex color or a resource reference.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.spotify.music","versions":[]}]},{"name":"Swipe controls","description":"Adds volume and brightness swipe controls.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Player type hook","SwipeControlsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Tablet mini player","description":"Enables the tablet mini player layout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Theme","description":"Applies a custom theme.","version":"0.0.0","excluded":false,"options":[{"key":"darkThemeBackgroundColor","title":"Background color for the dark theme","description":"The background color of the dark theme. Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"lightThemeBackgroundColor","title":"Background color for the light theme","description":"The background color of the light theme. Can be a hex color or a resource reference.","required":false,"choices":null}],"dependencies":["Litho color hook","SeekbarColorBytecodePatch","ThemeResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Unlock paid widgets","description":"Unlocks paid widgets of the app","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.dci.dev.androidtwelvewidgets","versions":[]}]},{"name":"Unlock plus","description":"Unlocks plus features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["SignatureDetectionPatch"],"compatiblePackages":[{"name":"com.microblink.photomath","versions":["8.20.0"]}]},{"name":"Unlock premium","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"io.yuka.android","versions":[]}]},{"name":"Unlock pro","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.candylink.openvpn","versions":[]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"ginlemon.iconpackstudio","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["SignatureVerificationPatch","LicenseValidationPatch"],"compatiblePackages":[{"name":"com.zombodroid.MemeGenerator","versions":["4.6364","4.6370","4.6375","4.6377"]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.wakdev.apps.nfctools.se","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ithebk.expensemanager","versions":[]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"co.windyapp.android","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"tv.trakt.trakt","versions":["1.1.1"]}]},{"name":"Unlock pro","description":"Unlocks all professional features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"org.totschnig.myexpenses","versions":["3.4.9"]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.awedea.nyx","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.vsco.cam","versions":[]}]},{"name":"Unlock themes","description":"Unlocks all themes that are inaccessible until a certain level is reached.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ticktick.task","versions":[]}]},{"name":"Unlock trial","description":"Unlocks the trial version.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"net.dinglisch.android.taskerm","versions":[]}]},{"name":"Upgrade button remover","description":"Removes the upgrade tab from the pivot bar.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Vanced MicroG support","description":"Allows YouTube ReVanced to run without root and under a different package name with Vanced MicroG.","version":"0.0.0","excluded":false,"options":[],"dependencies":["MicroGResourcePatch","Hide cast button","Client spoof"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Vanced MicroG support","description":"Allows YouTube Music ReVanced to run without root and under a different package name.","version":"0.0.0","excluded":false,"options":[],"dependencies":["MicroGResourcePatch"],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Video ads","description":"Removes ads in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Wide searchbar","description":"Replaces the search icon with a wide search bar. This will hide the YouTube logo when active.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]}] \ No newline at end of file +[{"name":"Always autorepeat","description":"Always repeats the playing video again.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Auto claim channel points","description":"Automatically claim Channel Points.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Background play","description":"Enables playing music in the background.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Block audio ads","description":"Blocks audio ads in streams and VODs.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Block embedded ads","description":"Blocks embedded stream ads using services like TTV.lol or PurpleAdBlocker.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Block video ads","Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Block video ads","description":"Blocks video ads in streams and VODs.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Bypass certificate checks","description":"Bypasses certificate checks which prevent YouTube Music from working on Android Auto.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Change package name","description":"Changes the package name.","version":"0.0.0","excluded":true,"options":[{"key":"packageName","title":"Package name","description":"The name of the package to rename of the app.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[]},{"name":"Client spoof","description":"Spoofs the client to allow playback.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Spoof signature verification"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Codecs unlock","description":"Adds more audio codec options. The new audio codecs usually result in better audio quality.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Comments","description":"Hides components related to comments.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings","LithoFilterPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Compact header","description":"Hides the music category bar at the top of the homepage.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Copy video url","description":"Adds buttons in player to copy video links.","version":"0.0.0","excluded":false,"options":[],"dependencies":["CopyVideoUrlResourcePatch","Player controls bytecode patch","Video information"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Custom branding","description":"Changes the YouTube launcher icon and name to your choice (defaults to ReVanced).","version":"0.0.0","excluded":false,"options":[{"key":"appName","title":"Application Name","description":"The name of the application it will show on your home screen.","required":true,"choices":null},{"key":"iconPath","title":"App Icon Path","description":"A path containing mipmap resource folders with icons.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Debug mode","description":"Enables Twitch\u0027s internal debugging mode.","version":"0.0.0","excluded":true,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":[]}]},{"name":"Disable Shorts on startup","description":"Disables playing YouTube Shorts when launching YouTube.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable Sync for Lemmy bottom sheet","description":"Disables the bottom sheet at the startup that asks you to signup to \"Sync for Lemmy\".","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":["v23.06.30-13:39"]},{"name":"com.laurencedawson.reddit_sync.pro","versions":[]},{"name":"com.laurencedawson.reddit_sync.dev","versions":[]}]},{"name":"Disable ads","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":[]}]},{"name":"Disable ads","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"o.o.joey","versions":[]}]},{"name":"Disable ads","description":"Disables ads in HexEditor.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.myprog.hexedit","versions":[]}]},{"name":"Disable auto captions","description":"Disable forced captions from being automatically enabled.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable fullscreen panels","description":"Disables video description and comments panel in fullscreen view.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable login requirement","description":"Do not force login.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Disable mandatory login","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.adobe.lrmobile","versions":[]}]},{"name":"Disable player popup panels","description":"Disables panels from appearing automatically when going into fullscreen (playlist or live chat).","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable screenshot popup","description":"Disables the popup that shows up when taking a screenshot.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Disable switching emoji to sticker in message input field","description":"Disables switching from emoji to sticker search mode in message input field","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Disable typing indicator","description":"Disables the indicator while typing a message","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Disable zoom haptics","description":"Disables haptics when zooming.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Downloads","description":"Removes download restrictions and changes the default path to download to.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Dynamic color","description":"Replaces the default Twitter Blue with the users Material You palette.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Enable android debugging","description":"Enables Android debugging capabilities.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Enable debugging","description":"Adds debugging options.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"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.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.spotify.lite","versions":[]}]},{"name":"Exclusive audio playback","description":"Enables the option to play music without video.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Export all activities","description":"Makes all app activities exportable.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"External downloads","description":"Adds support to download and save YouTube videos using an external app.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ExternalDownloadsResourcePatch","Player controls bytecode patch","Video information"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Feed filter","description":"Filters tiktok videos: removing ads, removing livestreams.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Fix google login","description":"Allows logging in with a Google account.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"HDR auto brightness","description":"Makes the brightness of HDR videos follow the system default.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide Shorts components","description":"Hides components from YouTube Shorts.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","LithoFilterPatch","HideShortsComponentsResourcePatch","ResourceMappingPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide ads","description":"Removes ads from the Reddit.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Hide subreddit banner","Hide comment ads"],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Hide ads","description":"Removes general ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["VerticalScrollPatch"],"compatiblePackages":[{"name":"com.vanced.android.youtube","versions":[]}]},{"name":"Hide ads","description":"Hides ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Json hook"],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Hide ads","description":"Removes ads from Inshorts.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.nis.app","versions":[]}]},{"name":"Hide ads","description":"Removes general ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Hide get premium","HideAdsResourcePatch","VerticalScrollPatch","FixBackToExitGesturePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide ads","description":"Removes ads from TikTok.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Hide ads","description":"Hides ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"jp.pxv.android","versions":[]}]},{"name":"Hide album cards","description":"Hides the album cards below the artist description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","AlbumCardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide autoplay button","description":"Hides the autoplay button in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","ResourceMappingPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide breaking news shelf","description":"Hides the breaking news shelf on the homepage tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","BreakingNewsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide captions button","description":"Hides the captions button on video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide cast button","description":"Hides the cast button in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Hide crowdfunding box","description":"Hides the crowdfunding box between the player and video description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","CrowdfundingBoxResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide email address","description":"Hides the email address in the account switcher.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideEmailAddressResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide endscreen cards","description":"Hides the suggested video cards at the end of a video in fullscreen.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideEndscreenCardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide filter bar","description":"Hides the filter bar in video feeds.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideFilterBarResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide floating microphone button","description":"Hides the floating microphone button which appears in search.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideFloatingMicrophoneButtonResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide get premium","description":"Removes all \"Get Premium\" evidences from the avatar menu.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Hide inbox ads","description":"Hides ads in inbox.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Hide info cards","description":"Hides info cards in videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideInfocardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide layout components","description":"Hides general layout components.","version":"0.0.0","excluded":false,"options":[],"dependencies":["LithoFilterPatch","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide load more button","description":"Hides the button under videos that loads similar videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideLoadMoreButtonResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide player buttons","description":"Adds the option to hide video player previous and next buttons.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide player overlay","description":"Hides the dark background overlay from the player when player controls are visible.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HidePlayerOverlayResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Hide premium navbar","description":"Removes the premium tab from the navbar.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ResourceMappingPatch"],"compatiblePackages":[{"name":"com.spotify.music","versions":[]}]},{"name":"Hide recommended users","description":"Hides recommended users.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Json hook"],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Hide seekbar","description":"Hides the seekbar.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","SeekbarColorBytecodePatch","SeekbarPreferencesPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide timeline ads","description":"Removes ads from the timeline.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.instagram.android","versions":["275.0.0.27.98"]}]},{"name":"Hide timestamp","description":"Hides timestamp in video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide video action buttons","description":"Adds the options to hide action buttons under a video.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ResourceMappingPatch","LithoFilterPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide watermark","description":"Hides creator\u0027s watermarks on videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Minimized playback","description":"Enables minimized and background playback.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Player type hook","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Minimized playback music","description":"Enables minimized playback on Kids music.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Music video ads","description":"Removes ads in the music player.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Navigation buttons","description":"Adds options to hide or change navigation buttons.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","ResolvePivotBarFingerprintsPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Old video quality menu","description":"Shows the old video quality with the advanced video quality options instead of the new one.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","OldVideoQualityMenuResourcePatch","LithoFilterPatch","BottomSheetHookPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.20.39","18.23.35"]}]},{"name":"Open links externally","description":"Open links outside of the app directly in your browser.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Permanent shuffle","description":"Permanently remember your shuffle preference even if the playlist ends or another track is played.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Playback speed","description":"Adds custom playback speeds and ability to remember the playback speed you chose in the video playback speed flyout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Custom playback speed","Remember playback speed"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.20.39","18.23.35"]}]},{"name":"Playback speed","description":"Enables the playback speed option for all videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Player flyout menu","description":"Hides player flyout menu items.","version":"0.0.0","excluded":false,"options":[],"dependencies":["LithoFilterPatch","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Predictive back gesture","description":"Enables the predictive back gesture introduced on Android 13.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Premium heading","description":"Shows premium branding on the home screen.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Premium icon reddit","description":"Unlocks premium Reddit app icons.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Pro unlock","description":"Unlocks pro-only functions.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.backdrops.wallpapers","versions":["4.52"]}]},{"name":"Promo code unlock","description":"Disables the validation of promo code. Any code will work to unlock all features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Spoof cert patch"],"compatiblePackages":[{"name":"de.dwd.warnapp","versions":[]}]},{"name":"Remember video quality","description":"Adds the ability to remember the video quality you chose in the video quality flyout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video information","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.19.35","18.20.39","18.23.35"]}]},{"name":"Remove ads","description":"Removes all ads from the app.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"net.binarymode.android.irplus","versions":[]}]},{"name":"Remove badge tab","description":"Removes the badge tab from the activity tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.sony.songpal.mdr","versions":[]}]},{"name":"Remove bootloader detection","description":"Removes the check for an unlocked bootloader.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.bmf.bmf2go","versions":[]}]},{"name":"Remove broadcasts restriction","description":"Enables starting/stopping NetGuard via broadcasts.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"eu.faircode.netguard","versions":[]}]},{"name":"Remove debugging detection","description":"Removes the USB and wireless debugging checks.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.scb.phone","versions":[]}]},{"name":"Remove device restrictions","description":"Removes restrictions from using the app on any device.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.recorder","versions":[]}]},{"name":"Remove notification badge","description":"Removes the red notification badge from the activity tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.sony.songpal.mdr","versions":[]}]},{"name":"Remove player controls background","description":"Removes the background from the video player controls.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Remove root detection","description":"Removes the check for root permissions.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.bmf.bmf2go","versions":[]}]},{"name":"Remove root detection","description":"Removes the check for root permissions and unlocked bootloader.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.oe.app","versions":[]}]},{"name":"Remove screen capture restriction","description":"Removes the restriction of capturing audio from apps that normally wouldn\u0027t allow it.","version":"0.0.0","excluded":true,"options":[],"dependencies":["RemoveCaptureRestrictionResourcePatch"],"compatiblePackages":[]},{"name":"Remove screenshot restriction","description":"Removes the restriction of taking screenshots in apps that normally wouldn\u0027t allow it.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Return YouTube Dislike","description":"Shows the dislike count of videos using the Return YouTube Dislike API.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video id hook","ReturnYouTubeDislikeResourcePatch","Player type hook"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Sanitize sharing links","description":"Removes (tracking) query parameters from the URLs when sharing links.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Seekbar tapping","description":"Enables tap-to-seek on the seekbar of the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","EnableSeekbarTappingResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Settings","description":"Adds settings menu to Twitch.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","SettingsResourcePatch"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":[]}]},{"name":"Settings","description":"Adds ReVanced settings to TikTok.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Show deleted messages","description":"Shows deleted chat messages behind a clickable spoiler.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Show seekbar","description":"Shows progress bar for all video.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Sim spoof","description":"Spoofs the information which is retrieved from the sim-card.","version":"0.0.0","excluded":true,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"SponsorBlock","description":"Integrates SponsorBlock which allows skipping video segments such as sponsored content.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video id hook","Video information","Player type hook","Player controls bytecode patch","SponsorBlockResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Spoof app version","description":"Tricks YouTube into thinking you are running an older version of the app. One of the side effects also includes restoring the old UI.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://baconreader.com/auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.onelouder.baconreader","versions":[]},{"name":"com.onelouder.baconreader.premium","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"dbrady://relay\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"free.reddit.news","versions":[]},{"name":"reddit.news","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://rubenmayayo.com\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.rubenmayayo.reddit","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://www.ccrama.me\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"me.ccrama.redditslide","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"redditisfun://auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.andrewshu.android.reddit","versions":[]},{"name":"com.andrewshu.android.redditdonation","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://redditsync/auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":[]},{"name":"com.laurencedawson.reddit_sync.pro","versions":[]},{"name":"com.laurencedawson.reddit_sync.dev","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"https://127.0.0.1:65023/authorize_callback\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"o.o.joey","versions":[]},{"name":"o.o.joey.pro","versions":[]},{"name":"o.o.joey.dev","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"infinity://localhost\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"ml.docilealligator.infinityforreddit","versions":[]}]},{"name":"Spoof signature","description":"Spoofs the signature of the app.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.oe.app","versions":[]}]},{"name":"Spoof wifi connection","description":"Spoofs an existing Wi-Fi connection.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Spotify theme","description":"Applies a custom theme.","version":"0.0.0","excluded":false,"options":[{"key":"backgroundColor","title":"Background color","description":"The background color. Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"accentColor","title":"Accent color","description":"The accent color (\u0027spotify green\u0027 by default). Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"accentPressedColor","title":"Pressed accent for the dark theme","description":"The color when accented buttons are pressed, by default slightly darker than accent. Can be a hex color or a resource reference.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.spotify.music","versions":[]}]},{"name":"Swipe controls","description":"Adds volume and brightness swipe controls.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Player type hook","SwipeControlsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Tablet mini player","description":"Enables the tablet mini player layout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Theme","description":"Applies a custom theme.","version":"0.0.0","excluded":false,"options":[{"key":"darkThemeBackgroundColor","title":"Background color for the dark theme","description":"The background color of the dark theme. Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"lightThemeBackgroundColor","title":"Background color for the light theme","description":"The background color of the light theme. Can be a hex color or a resource reference.","required":false,"choices":null}],"dependencies":["Litho color hook","SeekbarColorBytecodePatch","ThemeResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Unlock paid widgets","description":"Unlocks paid widgets of the app","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.dci.dev.androidtwelvewidgets","versions":[]}]},{"name":"Unlock plus","description":"Unlocks plus features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["SignatureDetectionPatch"],"compatiblePackages":[{"name":"com.microblink.photomath","versions":["8.20.0"]}]},{"name":"Unlock premium","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"io.yuka.android","versions":[]}]},{"name":"Unlock premium","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.adobe.lrmobile","versions":[]}]},{"name":"Unlock pro","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.candylink.openvpn","versions":[]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"ginlemon.iconpackstudio","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["SignatureVerificationPatch","LicenseValidationPatch"],"compatiblePackages":[{"name":"com.zombodroid.MemeGenerator","versions":["4.6364","4.6370","4.6375","4.6377"]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.wakdev.apps.nfctools.se","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ithebk.expensemanager","versions":[]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"co.windyapp.android","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"tv.trakt.trakt","versions":["1.1.1"]}]},{"name":"Unlock pro","description":"Unlocks all professional features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"org.totschnig.myexpenses","versions":["3.4.9"]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.awedea.nyx","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.vsco.cam","versions":[]}]},{"name":"Unlock themes","description":"Unlocks all themes that are inaccessible until a certain level is reached.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ticktick.task","versions":[]}]},{"name":"Unlock trial","description":"Unlocks the trial version.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"net.dinglisch.android.taskerm","versions":[]}]},{"name":"Upgrade button remover","description":"Removes the upgrade tab from the pivot bar.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Vanced MicroG support","description":"Allows YouTube ReVanced to run without root and under a different package name with Vanced MicroG.","version":"0.0.0","excluded":false,"options":[],"dependencies":["MicroGResourcePatch","Hide cast button","Client spoof"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Vanced MicroG support","description":"Allows YouTube Music ReVanced to run without root and under a different package name.","version":"0.0.0","excluded":false,"options":[],"dependencies":["MicroGResourcePatch"],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Video ads","description":"Removes ads in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Wide searchbar","description":"Replaces the search icon with a wide search bar. This will hide the YouTube logo when active.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]}] \ No newline at end of file From 506d49c82a68faee25aede8194e7884191c0f271 Mon Sep 17 00:00:00 2001 From: Matthew Date: Fri, 4 Aug 2023 06:45:59 -0700 Subject: [PATCH 14/67] feat(YouTube Music): Add `Permanent repeat` patch (#2722) Co-authored-by: oSumAtrIX --- .../fingerprints/RepeatTrackFingerprint.kt | 22 ++++++++++ .../patch/PermanentRepeatPatch.kt | 40 +++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 src/main/kotlin/app/revanced/patches/music/interaction/permanentrepeat/fingerprints/RepeatTrackFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/music/interaction/permanentrepeat/patch/PermanentRepeatPatch.kt diff --git a/src/main/kotlin/app/revanced/patches/music/interaction/permanentrepeat/fingerprints/RepeatTrackFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/interaction/permanentrepeat/fingerprints/RepeatTrackFingerprint.kt new file mode 100644 index 000000000..f27d60ea8 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/music/interaction/permanentrepeat/fingerprints/RepeatTrackFingerprint.kt @@ -0,0 +1,22 @@ +package app.revanced.patches.music.interaction.permanentrepeat.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint +import org.jf.dexlib2.AccessFlags +import org.jf.dexlib2.Opcode + +object RepeatTrackFingerprint : MethodFingerprint( + "V", + AccessFlags.PUBLIC or AccessFlags.FINAL, + listOf("L", "L"), + listOf( + Opcode.CHECK_CAST, + Opcode.INVOKE_INTERFACE, + Opcode.IGET_OBJECT, + Opcode.IGET_OBJECT, + Opcode.SGET_OBJECT, + Opcode.INVOKE_VIRTUAL, + Opcode.MOVE_RESULT, + Opcode.IF_NEZ + ) +) diff --git a/src/main/kotlin/app/revanced/patches/music/interaction/permanentrepeat/patch/PermanentRepeatPatch.kt b/src/main/kotlin/app/revanced/patches/music/interaction/permanentrepeat/patch/PermanentRepeatPatch.kt new file mode 100644 index 000000000..0beb97cec --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/music/interaction/permanentrepeat/patch/PermanentRepeatPatch.kt @@ -0,0 +1,40 @@ +package app.revanced.patches.music.interaction.permanentrepeat.patch + +import app.revanced.extensions.toErrorResult +import app.revanced.patcher.annotation.Description +import app.revanced.patcher.annotation.Name +import app.revanced.patcher.data.BytecodeContext +import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels +import app.revanced.patcher.extensions.InstructionExtensions.getInstruction +import app.revanced.patcher.patch.BytecodePatch +import app.revanced.patcher.patch.PatchResult +import app.revanced.patcher.patch.PatchResultSuccess +import app.revanced.patcher.patch.annotations.Patch +import app.revanced.patcher.util.smali.ExternalLabel +import app.revanced.patches.music.annotations.MusicCompatibility +import app.revanced.patches.music.interaction.permanentrepeat.fingerprints.RepeatTrackFingerprint + +@Patch(false) +@Name("Permanent repeat") +@Description("Permanently remember your repeating preference even if the playlist ends or another track is played.") +@MusicCompatibility +class PermanentRepeatPatch : BytecodePatch( + listOf(RepeatTrackFingerprint) +) { + override fun execute(context: BytecodeContext): PatchResult { + RepeatTrackFingerprint.result?.let { + val startIndex = it.scanResult.patternScanResult!!.endIndex + val repeatIndex = startIndex + 3 + + it.mutableMethod.apply { + addInstructionsWithLabels( + startIndex, + "goto :repeat", + ExternalLabel("repeat", getInstruction(repeatIndex)) + ) + } + } ?: return RepeatTrackFingerprint.toErrorResult() + + return PatchResultSuccess() + } +} From 243eb20f61df6b41aa6fd7e09242c119020938c1 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Fri, 4 Aug 2023 13:49:05 +0000 Subject: [PATCH 15/67] chore(release): 2.188.0-dev.5 [skip ci] # [2.188.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.4...v2.188.0-dev.5) (2023-08-04) ### Features * **YouTube Music:** Add `Permanent repeat` patch ([#2722](https://github.com/ReVanced/revanced-patches/issues/2722)) ([506d49c](https://github.com/ReVanced/revanced-patches/commit/506d49c82a68faee25aede8194e7884191c0f271)) --- CHANGELOG.md | 7 +++++++ gradle.properties | 2 +- patches.json | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 778088018..20d37278f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [2.188.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.4...v2.188.0-dev.5) (2023-08-04) + + +### Features + +* **YouTube Music:** Add `Permanent repeat` patch ([#2722](https://github.com/ReVanced/revanced-patches/issues/2722)) ([506d49c](https://github.com/ReVanced/revanced-patches/commit/506d49c82a68faee25aede8194e7884191c0f271)) + # [2.188.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.3...v2.188.0-dev.4) (2023-08-03) diff --git a/gradle.properties b/gradle.properties index a3ce77d32..4d1fba57b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ org.gradle.parallel = true org.gradle.caching = true kotlin.code.style = official -version = 2.188.0-dev.4 +version = 2.188.0-dev.5 diff --git a/patches.json b/patches.json index 9dc1ab1fe..74c3a27ef 100644 --- a/patches.json +++ b/patches.json @@ -1 +1 @@ -[{"name":"Always autorepeat","description":"Always repeats the playing video again.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Auto claim channel points","description":"Automatically claim Channel Points.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Background play","description":"Enables playing music in the background.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Block audio ads","description":"Blocks audio ads in streams and VODs.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Block embedded ads","description":"Blocks embedded stream ads using services like TTV.lol or PurpleAdBlocker.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Block video ads","Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Block video ads","description":"Blocks video ads in streams and VODs.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Bypass certificate checks","description":"Bypasses certificate checks which prevent YouTube Music from working on Android Auto.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Change package name","description":"Changes the package name.","version":"0.0.0","excluded":true,"options":[{"key":"packageName","title":"Package name","description":"The name of the package to rename of the app.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[]},{"name":"Client spoof","description":"Spoofs the client to allow playback.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Spoof signature verification"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Codecs unlock","description":"Adds more audio codec options. The new audio codecs usually result in better audio quality.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Comments","description":"Hides components related to comments.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings","LithoFilterPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Compact header","description":"Hides the music category bar at the top of the homepage.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Copy video url","description":"Adds buttons in player to copy video links.","version":"0.0.0","excluded":false,"options":[],"dependencies":["CopyVideoUrlResourcePatch","Player controls bytecode patch","Video information"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Custom branding","description":"Changes the YouTube launcher icon and name to your choice (defaults to ReVanced).","version":"0.0.0","excluded":false,"options":[{"key":"appName","title":"Application Name","description":"The name of the application it will show on your home screen.","required":true,"choices":null},{"key":"iconPath","title":"App Icon Path","description":"A path containing mipmap resource folders with icons.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Debug mode","description":"Enables Twitch\u0027s internal debugging mode.","version":"0.0.0","excluded":true,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":[]}]},{"name":"Disable Shorts on startup","description":"Disables playing YouTube Shorts when launching YouTube.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable Sync for Lemmy bottom sheet","description":"Disables the bottom sheet at the startup that asks you to signup to \"Sync for Lemmy\".","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":["v23.06.30-13:39"]},{"name":"com.laurencedawson.reddit_sync.pro","versions":[]},{"name":"com.laurencedawson.reddit_sync.dev","versions":[]}]},{"name":"Disable ads","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":[]}]},{"name":"Disable ads","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"o.o.joey","versions":[]}]},{"name":"Disable ads","description":"Disables ads in HexEditor.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.myprog.hexedit","versions":[]}]},{"name":"Disable auto captions","description":"Disable forced captions from being automatically enabled.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable fullscreen panels","description":"Disables video description and comments panel in fullscreen view.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable login requirement","description":"Do not force login.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Disable mandatory login","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.adobe.lrmobile","versions":[]}]},{"name":"Disable player popup panels","description":"Disables panels from appearing automatically when going into fullscreen (playlist or live chat).","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable screenshot popup","description":"Disables the popup that shows up when taking a screenshot.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Disable switching emoji to sticker in message input field","description":"Disables switching from emoji to sticker search mode in message input field","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Disable typing indicator","description":"Disables the indicator while typing a message","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Disable zoom haptics","description":"Disables haptics when zooming.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Downloads","description":"Removes download restrictions and changes the default path to download to.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Dynamic color","description":"Replaces the default Twitter Blue with the users Material You palette.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Enable android debugging","description":"Enables Android debugging capabilities.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Enable debugging","description":"Adds debugging options.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"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.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.spotify.lite","versions":[]}]},{"name":"Exclusive audio playback","description":"Enables the option to play music without video.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Export all activities","description":"Makes all app activities exportable.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"External downloads","description":"Adds support to download and save YouTube videos using an external app.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ExternalDownloadsResourcePatch","Player controls bytecode patch","Video information"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Feed filter","description":"Filters tiktok videos: removing ads, removing livestreams.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Fix google login","description":"Allows logging in with a Google account.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"HDR auto brightness","description":"Makes the brightness of HDR videos follow the system default.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide Shorts components","description":"Hides components from YouTube Shorts.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","LithoFilterPatch","HideShortsComponentsResourcePatch","ResourceMappingPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide ads","description":"Removes ads from the Reddit.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Hide subreddit banner","Hide comment ads"],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Hide ads","description":"Removes general ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["VerticalScrollPatch"],"compatiblePackages":[{"name":"com.vanced.android.youtube","versions":[]}]},{"name":"Hide ads","description":"Hides ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Json hook"],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Hide ads","description":"Removes ads from Inshorts.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.nis.app","versions":[]}]},{"name":"Hide ads","description":"Removes general ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Hide get premium","HideAdsResourcePatch","VerticalScrollPatch","FixBackToExitGesturePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide ads","description":"Removes ads from TikTok.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Hide ads","description":"Hides ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"jp.pxv.android","versions":[]}]},{"name":"Hide album cards","description":"Hides the album cards below the artist description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","AlbumCardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide autoplay button","description":"Hides the autoplay button in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","ResourceMappingPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide breaking news shelf","description":"Hides the breaking news shelf on the homepage tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","BreakingNewsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide captions button","description":"Hides the captions button on video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide cast button","description":"Hides the cast button in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Hide crowdfunding box","description":"Hides the crowdfunding box between the player and video description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","CrowdfundingBoxResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide email address","description":"Hides the email address in the account switcher.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideEmailAddressResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide endscreen cards","description":"Hides the suggested video cards at the end of a video in fullscreen.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideEndscreenCardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide filter bar","description":"Hides the filter bar in video feeds.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideFilterBarResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide floating microphone button","description":"Hides the floating microphone button which appears in search.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideFloatingMicrophoneButtonResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide get premium","description":"Removes all \"Get Premium\" evidences from the avatar menu.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Hide inbox ads","description":"Hides ads in inbox.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Hide info cards","description":"Hides info cards in videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideInfocardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide layout components","description":"Hides general layout components.","version":"0.0.0","excluded":false,"options":[],"dependencies":["LithoFilterPatch","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide load more button","description":"Hides the button under videos that loads similar videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideLoadMoreButtonResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide player buttons","description":"Adds the option to hide video player previous and next buttons.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide player overlay","description":"Hides the dark background overlay from the player when player controls are visible.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HidePlayerOverlayResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Hide premium navbar","description":"Removes the premium tab from the navbar.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ResourceMappingPatch"],"compatiblePackages":[{"name":"com.spotify.music","versions":[]}]},{"name":"Hide recommended users","description":"Hides recommended users.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Json hook"],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Hide seekbar","description":"Hides the seekbar.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","SeekbarColorBytecodePatch","SeekbarPreferencesPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide timeline ads","description":"Removes ads from the timeline.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.instagram.android","versions":["275.0.0.27.98"]}]},{"name":"Hide timestamp","description":"Hides timestamp in video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide video action buttons","description":"Adds the options to hide action buttons under a video.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ResourceMappingPatch","LithoFilterPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide watermark","description":"Hides creator\u0027s watermarks on videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Minimized playback","description":"Enables minimized and background playback.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Player type hook","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Minimized playback music","description":"Enables minimized playback on Kids music.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Music video ads","description":"Removes ads in the music player.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Navigation buttons","description":"Adds options to hide or change navigation buttons.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","ResolvePivotBarFingerprintsPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Old video quality menu","description":"Shows the old video quality with the advanced video quality options instead of the new one.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","OldVideoQualityMenuResourcePatch","LithoFilterPatch","BottomSheetHookPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.20.39","18.23.35"]}]},{"name":"Open links externally","description":"Open links outside of the app directly in your browser.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Permanent shuffle","description":"Permanently remember your shuffle preference even if the playlist ends or another track is played.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Playback speed","description":"Adds custom playback speeds and ability to remember the playback speed you chose in the video playback speed flyout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Custom playback speed","Remember playback speed"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.20.39","18.23.35"]}]},{"name":"Playback speed","description":"Enables the playback speed option for all videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Player flyout menu","description":"Hides player flyout menu items.","version":"0.0.0","excluded":false,"options":[],"dependencies":["LithoFilterPatch","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Predictive back gesture","description":"Enables the predictive back gesture introduced on Android 13.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Premium heading","description":"Shows premium branding on the home screen.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Premium icon reddit","description":"Unlocks premium Reddit app icons.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Pro unlock","description":"Unlocks pro-only functions.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.backdrops.wallpapers","versions":["4.52"]}]},{"name":"Promo code unlock","description":"Disables the validation of promo code. Any code will work to unlock all features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Spoof cert patch"],"compatiblePackages":[{"name":"de.dwd.warnapp","versions":[]}]},{"name":"Remember video quality","description":"Adds the ability to remember the video quality you chose in the video quality flyout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video information","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.19.35","18.20.39","18.23.35"]}]},{"name":"Remove ads","description":"Removes all ads from the app.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"net.binarymode.android.irplus","versions":[]}]},{"name":"Remove badge tab","description":"Removes the badge tab from the activity tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.sony.songpal.mdr","versions":[]}]},{"name":"Remove bootloader detection","description":"Removes the check for an unlocked bootloader.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.bmf.bmf2go","versions":[]}]},{"name":"Remove broadcasts restriction","description":"Enables starting/stopping NetGuard via broadcasts.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"eu.faircode.netguard","versions":[]}]},{"name":"Remove debugging detection","description":"Removes the USB and wireless debugging checks.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.scb.phone","versions":[]}]},{"name":"Remove device restrictions","description":"Removes restrictions from using the app on any device.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.recorder","versions":[]}]},{"name":"Remove notification badge","description":"Removes the red notification badge from the activity tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.sony.songpal.mdr","versions":[]}]},{"name":"Remove player controls background","description":"Removes the background from the video player controls.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Remove root detection","description":"Removes the check for root permissions.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.bmf.bmf2go","versions":[]}]},{"name":"Remove root detection","description":"Removes the check for root permissions and unlocked bootloader.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.oe.app","versions":[]}]},{"name":"Remove screen capture restriction","description":"Removes the restriction of capturing audio from apps that normally wouldn\u0027t allow it.","version":"0.0.0","excluded":true,"options":[],"dependencies":["RemoveCaptureRestrictionResourcePatch"],"compatiblePackages":[]},{"name":"Remove screenshot restriction","description":"Removes the restriction of taking screenshots in apps that normally wouldn\u0027t allow it.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Return YouTube Dislike","description":"Shows the dislike count of videos using the Return YouTube Dislike API.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video id hook","ReturnYouTubeDislikeResourcePatch","Player type hook"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Sanitize sharing links","description":"Removes (tracking) query parameters from the URLs when sharing links.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Seekbar tapping","description":"Enables tap-to-seek on the seekbar of the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","EnableSeekbarTappingResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Settings","description":"Adds settings menu to Twitch.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","SettingsResourcePatch"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":[]}]},{"name":"Settings","description":"Adds ReVanced settings to TikTok.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Show deleted messages","description":"Shows deleted chat messages behind a clickable spoiler.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Show seekbar","description":"Shows progress bar for all video.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Sim spoof","description":"Spoofs the information which is retrieved from the sim-card.","version":"0.0.0","excluded":true,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"SponsorBlock","description":"Integrates SponsorBlock which allows skipping video segments such as sponsored content.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video id hook","Video information","Player type hook","Player controls bytecode patch","SponsorBlockResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Spoof app version","description":"Tricks YouTube into thinking you are running an older version of the app. One of the side effects also includes restoring the old UI.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://baconreader.com/auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.onelouder.baconreader","versions":[]},{"name":"com.onelouder.baconreader.premium","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"dbrady://relay\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"free.reddit.news","versions":[]},{"name":"reddit.news","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://rubenmayayo.com\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.rubenmayayo.reddit","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://www.ccrama.me\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"me.ccrama.redditslide","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"redditisfun://auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.andrewshu.android.reddit","versions":[]},{"name":"com.andrewshu.android.redditdonation","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://redditsync/auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":[]},{"name":"com.laurencedawson.reddit_sync.pro","versions":[]},{"name":"com.laurencedawson.reddit_sync.dev","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"https://127.0.0.1:65023/authorize_callback\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"o.o.joey","versions":[]},{"name":"o.o.joey.pro","versions":[]},{"name":"o.o.joey.dev","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"infinity://localhost\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"ml.docilealligator.infinityforreddit","versions":[]}]},{"name":"Spoof signature","description":"Spoofs the signature of the app.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.oe.app","versions":[]}]},{"name":"Spoof wifi connection","description":"Spoofs an existing Wi-Fi connection.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Spotify theme","description":"Applies a custom theme.","version":"0.0.0","excluded":false,"options":[{"key":"backgroundColor","title":"Background color","description":"The background color. Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"accentColor","title":"Accent color","description":"The accent color (\u0027spotify green\u0027 by default). Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"accentPressedColor","title":"Pressed accent for the dark theme","description":"The color when accented buttons are pressed, by default slightly darker than accent. Can be a hex color or a resource reference.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.spotify.music","versions":[]}]},{"name":"Swipe controls","description":"Adds volume and brightness swipe controls.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Player type hook","SwipeControlsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Tablet mini player","description":"Enables the tablet mini player layout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Theme","description":"Applies a custom theme.","version":"0.0.0","excluded":false,"options":[{"key":"darkThemeBackgroundColor","title":"Background color for the dark theme","description":"The background color of the dark theme. Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"lightThemeBackgroundColor","title":"Background color for the light theme","description":"The background color of the light theme. Can be a hex color or a resource reference.","required":false,"choices":null}],"dependencies":["Litho color hook","SeekbarColorBytecodePatch","ThemeResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Unlock paid widgets","description":"Unlocks paid widgets of the app","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.dci.dev.androidtwelvewidgets","versions":[]}]},{"name":"Unlock plus","description":"Unlocks plus features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["SignatureDetectionPatch"],"compatiblePackages":[{"name":"com.microblink.photomath","versions":["8.20.0"]}]},{"name":"Unlock premium","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"io.yuka.android","versions":[]}]},{"name":"Unlock premium","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.adobe.lrmobile","versions":[]}]},{"name":"Unlock pro","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.candylink.openvpn","versions":[]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"ginlemon.iconpackstudio","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["SignatureVerificationPatch","LicenseValidationPatch"],"compatiblePackages":[{"name":"com.zombodroid.MemeGenerator","versions":["4.6364","4.6370","4.6375","4.6377"]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.wakdev.apps.nfctools.se","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ithebk.expensemanager","versions":[]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"co.windyapp.android","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"tv.trakt.trakt","versions":["1.1.1"]}]},{"name":"Unlock pro","description":"Unlocks all professional features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"org.totschnig.myexpenses","versions":["3.4.9"]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.awedea.nyx","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.vsco.cam","versions":[]}]},{"name":"Unlock themes","description":"Unlocks all themes that are inaccessible until a certain level is reached.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ticktick.task","versions":[]}]},{"name":"Unlock trial","description":"Unlocks the trial version.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"net.dinglisch.android.taskerm","versions":[]}]},{"name":"Upgrade button remover","description":"Removes the upgrade tab from the pivot bar.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Vanced MicroG support","description":"Allows YouTube ReVanced to run without root and under a different package name with Vanced MicroG.","version":"0.0.0","excluded":false,"options":[],"dependencies":["MicroGResourcePatch","Hide cast button","Client spoof"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Vanced MicroG support","description":"Allows YouTube Music ReVanced to run without root and under a different package name.","version":"0.0.0","excluded":false,"options":[],"dependencies":["MicroGResourcePatch"],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Video ads","description":"Removes ads in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Wide searchbar","description":"Replaces the search icon with a wide search bar. This will hide the YouTube logo when active.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]}] \ No newline at end of file +[{"name":"Always autorepeat","description":"Always repeats the playing video again.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Auto claim channel points","description":"Automatically claim Channel Points.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Background play","description":"Enables playing music in the background.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Block audio ads","description":"Blocks audio ads in streams and VODs.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Block embedded ads","description":"Blocks embedded stream ads using services like TTV.lol or PurpleAdBlocker.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Block video ads","Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Block video ads","description":"Blocks video ads in streams and VODs.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Bypass certificate checks","description":"Bypasses certificate checks which prevent YouTube Music from working on Android Auto.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Change package name","description":"Changes the package name.","version":"0.0.0","excluded":true,"options":[{"key":"packageName","title":"Package name","description":"The name of the package to rename of the app.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[]},{"name":"Client spoof","description":"Spoofs the client to allow playback.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Spoof signature verification"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Codecs unlock","description":"Adds more audio codec options. The new audio codecs usually result in better audio quality.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Comments","description":"Hides components related to comments.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings","LithoFilterPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Compact header","description":"Hides the music category bar at the top of the homepage.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Copy video url","description":"Adds buttons in player to copy video links.","version":"0.0.0","excluded":false,"options":[],"dependencies":["CopyVideoUrlResourcePatch","Player controls bytecode patch","Video information"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Custom branding","description":"Changes the YouTube launcher icon and name to your choice (defaults to ReVanced).","version":"0.0.0","excluded":false,"options":[{"key":"appName","title":"Application Name","description":"The name of the application it will show on your home screen.","required":true,"choices":null},{"key":"iconPath","title":"App Icon Path","description":"A path containing mipmap resource folders with icons.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Debug mode","description":"Enables Twitch\u0027s internal debugging mode.","version":"0.0.0","excluded":true,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":[]}]},{"name":"Disable Shorts on startup","description":"Disables playing YouTube Shorts when launching YouTube.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable Sync for Lemmy bottom sheet","description":"Disables the bottom sheet at the startup that asks you to signup to \"Sync for Lemmy\".","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":["v23.06.30-13:39"]},{"name":"com.laurencedawson.reddit_sync.pro","versions":[]},{"name":"com.laurencedawson.reddit_sync.dev","versions":[]}]},{"name":"Disable ads","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":[]}]},{"name":"Disable ads","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"o.o.joey","versions":[]}]},{"name":"Disable ads","description":"Disables ads in HexEditor.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.myprog.hexedit","versions":[]}]},{"name":"Disable auto captions","description":"Disable forced captions from being automatically enabled.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable fullscreen panels","description":"Disables video description and comments panel in fullscreen view.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable login requirement","description":"Do not force login.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Disable mandatory login","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.adobe.lrmobile","versions":[]}]},{"name":"Disable player popup panels","description":"Disables panels from appearing automatically when going into fullscreen (playlist or live chat).","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable screenshot popup","description":"Disables the popup that shows up when taking a screenshot.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Disable switching emoji to sticker in message input field","description":"Disables switching from emoji to sticker search mode in message input field","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Disable typing indicator","description":"Disables the indicator while typing a message","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Disable zoom haptics","description":"Disables haptics when zooming.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Downloads","description":"Removes download restrictions and changes the default path to download to.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Dynamic color","description":"Replaces the default Twitter Blue with the users Material You palette.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Enable android debugging","description":"Enables Android debugging capabilities.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Enable debugging","description":"Adds debugging options.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"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.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.spotify.lite","versions":[]}]},{"name":"Exclusive audio playback","description":"Enables the option to play music without video.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Export all activities","description":"Makes all app activities exportable.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"External downloads","description":"Adds support to download and save YouTube videos using an external app.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ExternalDownloadsResourcePatch","Player controls bytecode patch","Video information"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Feed filter","description":"Filters tiktok videos: removing ads, removing livestreams.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Fix google login","description":"Allows logging in with a Google account.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"HDR auto brightness","description":"Makes the brightness of HDR videos follow the system default.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide Shorts components","description":"Hides components from YouTube Shorts.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","LithoFilterPatch","HideShortsComponentsResourcePatch","ResourceMappingPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide ads","description":"Removes ads from the Reddit.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Hide subreddit banner","Hide comment ads"],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Hide ads","description":"Removes general ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["VerticalScrollPatch"],"compatiblePackages":[{"name":"com.vanced.android.youtube","versions":[]}]},{"name":"Hide ads","description":"Hides ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Json hook"],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Hide ads","description":"Removes ads from Inshorts.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.nis.app","versions":[]}]},{"name":"Hide ads","description":"Removes general ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Hide get premium","HideAdsResourcePatch","VerticalScrollPatch","FixBackToExitGesturePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide ads","description":"Removes ads from TikTok.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Hide ads","description":"Hides ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"jp.pxv.android","versions":[]}]},{"name":"Hide album cards","description":"Hides the album cards below the artist description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","AlbumCardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide autoplay button","description":"Hides the autoplay button in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","ResourceMappingPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide breaking news shelf","description":"Hides the breaking news shelf on the homepage tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","BreakingNewsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide captions button","description":"Hides the captions button on video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide cast button","description":"Hides the cast button in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Hide crowdfunding box","description":"Hides the crowdfunding box between the player and video description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","CrowdfundingBoxResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide email address","description":"Hides the email address in the account switcher.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideEmailAddressResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide endscreen cards","description":"Hides the suggested video cards at the end of a video in fullscreen.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideEndscreenCardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide filter bar","description":"Hides the filter bar in video feeds.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideFilterBarResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide floating microphone button","description":"Hides the floating microphone button which appears in search.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideFloatingMicrophoneButtonResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide get premium","description":"Removes all \"Get Premium\" evidences from the avatar menu.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Hide inbox ads","description":"Hides ads in inbox.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Hide info cards","description":"Hides info cards in videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideInfocardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide layout components","description":"Hides general layout components.","version":"0.0.0","excluded":false,"options":[],"dependencies":["LithoFilterPatch","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide load more button","description":"Hides the button under videos that loads similar videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideLoadMoreButtonResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide player buttons","description":"Adds the option to hide video player previous and next buttons.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide player overlay","description":"Hides the dark background overlay from the player when player controls are visible.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HidePlayerOverlayResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Hide premium navbar","description":"Removes the premium tab from the navbar.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ResourceMappingPatch"],"compatiblePackages":[{"name":"com.spotify.music","versions":[]}]},{"name":"Hide recommended users","description":"Hides recommended users.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Json hook"],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Hide seekbar","description":"Hides the seekbar.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","SeekbarColorBytecodePatch","SeekbarPreferencesPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide timeline ads","description":"Removes ads from the timeline.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.instagram.android","versions":["275.0.0.27.98"]}]},{"name":"Hide timestamp","description":"Hides timestamp in video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide video action buttons","description":"Adds the options to hide action buttons under a video.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ResourceMappingPatch","LithoFilterPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide watermark","description":"Hides creator\u0027s watermarks on videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Minimized playback","description":"Enables minimized and background playback.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Player type hook","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Minimized playback music","description":"Enables minimized playback on Kids music.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Music video ads","description":"Removes ads in the music player.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Navigation buttons","description":"Adds options to hide or change navigation buttons.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","ResolvePivotBarFingerprintsPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Old video quality menu","description":"Shows the old video quality with the advanced video quality options instead of the new one.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","OldVideoQualityMenuResourcePatch","LithoFilterPatch","BottomSheetHookPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.20.39","18.23.35"]}]},{"name":"Open links externally","description":"Open links outside of the app directly in your browser.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Permanent repeat","description":"Permanently remember your repeating preference even if the playlist ends or another track is played.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Permanent shuffle","description":"Permanently remember your shuffle preference even if the playlist ends or another track is played.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Playback speed","description":"Adds custom playback speeds and ability to remember the playback speed you chose in the video playback speed flyout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Custom playback speed","Remember playback speed"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.20.39","18.23.35"]}]},{"name":"Playback speed","description":"Enables the playback speed option for all videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Player flyout menu","description":"Hides player flyout menu items.","version":"0.0.0","excluded":false,"options":[],"dependencies":["LithoFilterPatch","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Predictive back gesture","description":"Enables the predictive back gesture introduced on Android 13.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Premium heading","description":"Shows premium branding on the home screen.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Premium icon reddit","description":"Unlocks premium Reddit app icons.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Pro unlock","description":"Unlocks pro-only functions.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.backdrops.wallpapers","versions":["4.52"]}]},{"name":"Promo code unlock","description":"Disables the validation of promo code. Any code will work to unlock all features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Spoof cert patch"],"compatiblePackages":[{"name":"de.dwd.warnapp","versions":[]}]},{"name":"Remember video quality","description":"Adds the ability to remember the video quality you chose in the video quality flyout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video information","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.19.35","18.20.39","18.23.35"]}]},{"name":"Remove ads","description":"Removes all ads from the app.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"net.binarymode.android.irplus","versions":[]}]},{"name":"Remove badge tab","description":"Removes the badge tab from the activity tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.sony.songpal.mdr","versions":[]}]},{"name":"Remove bootloader detection","description":"Removes the check for an unlocked bootloader.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.bmf.bmf2go","versions":[]}]},{"name":"Remove broadcasts restriction","description":"Enables starting/stopping NetGuard via broadcasts.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"eu.faircode.netguard","versions":[]}]},{"name":"Remove debugging detection","description":"Removes the USB and wireless debugging checks.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.scb.phone","versions":[]}]},{"name":"Remove device restrictions","description":"Removes restrictions from using the app on any device.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.recorder","versions":[]}]},{"name":"Remove notification badge","description":"Removes the red notification badge from the activity tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.sony.songpal.mdr","versions":[]}]},{"name":"Remove player controls background","description":"Removes the background from the video player controls.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Remove root detection","description":"Removes the check for root permissions.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.bmf.bmf2go","versions":[]}]},{"name":"Remove root detection","description":"Removes the check for root permissions and unlocked bootloader.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.oe.app","versions":[]}]},{"name":"Remove screen capture restriction","description":"Removes the restriction of capturing audio from apps that normally wouldn\u0027t allow it.","version":"0.0.0","excluded":true,"options":[],"dependencies":["RemoveCaptureRestrictionResourcePatch"],"compatiblePackages":[]},{"name":"Remove screenshot restriction","description":"Removes the restriction of taking screenshots in apps that normally wouldn\u0027t allow it.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Return YouTube Dislike","description":"Shows the dislike count of videos using the Return YouTube Dislike API.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video id hook","ReturnYouTubeDislikeResourcePatch","Player type hook"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Sanitize sharing links","description":"Removes (tracking) query parameters from the URLs when sharing links.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Seekbar tapping","description":"Enables tap-to-seek on the seekbar of the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","EnableSeekbarTappingResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Settings","description":"Adds settings menu to Twitch.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","SettingsResourcePatch"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":[]}]},{"name":"Settings","description":"Adds ReVanced settings to TikTok.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Show deleted messages","description":"Shows deleted chat messages behind a clickable spoiler.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Show seekbar","description":"Shows progress bar for all video.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Sim spoof","description":"Spoofs the information which is retrieved from the sim-card.","version":"0.0.0","excluded":true,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"SponsorBlock","description":"Integrates SponsorBlock which allows skipping video segments such as sponsored content.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video id hook","Video information","Player type hook","Player controls bytecode patch","SponsorBlockResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Spoof app version","description":"Tricks YouTube into thinking you are running an older version of the app. One of the side effects also includes restoring the old UI.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://baconreader.com/auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.onelouder.baconreader","versions":[]},{"name":"com.onelouder.baconreader.premium","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"dbrady://relay\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"free.reddit.news","versions":[]},{"name":"reddit.news","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://rubenmayayo.com\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.rubenmayayo.reddit","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://www.ccrama.me\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"me.ccrama.redditslide","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"redditisfun://auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.andrewshu.android.reddit","versions":[]},{"name":"com.andrewshu.android.redditdonation","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://redditsync/auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":[]},{"name":"com.laurencedawson.reddit_sync.pro","versions":[]},{"name":"com.laurencedawson.reddit_sync.dev","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"https://127.0.0.1:65023/authorize_callback\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"o.o.joey","versions":[]},{"name":"o.o.joey.pro","versions":[]},{"name":"o.o.joey.dev","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"infinity://localhost\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"ml.docilealligator.infinityforreddit","versions":[]}]},{"name":"Spoof signature","description":"Spoofs the signature of the app.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.oe.app","versions":[]}]},{"name":"Spoof wifi connection","description":"Spoofs an existing Wi-Fi connection.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Spotify theme","description":"Applies a custom theme.","version":"0.0.0","excluded":false,"options":[{"key":"backgroundColor","title":"Background color","description":"The background color. Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"accentColor","title":"Accent color","description":"The accent color (\u0027spotify green\u0027 by default). Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"accentPressedColor","title":"Pressed accent for the dark theme","description":"The color when accented buttons are pressed, by default slightly darker than accent. Can be a hex color or a resource reference.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.spotify.music","versions":[]}]},{"name":"Swipe controls","description":"Adds volume and brightness swipe controls.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Player type hook","SwipeControlsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Tablet mini player","description":"Enables the tablet mini player layout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Theme","description":"Applies a custom theme.","version":"0.0.0","excluded":false,"options":[{"key":"darkThemeBackgroundColor","title":"Background color for the dark theme","description":"The background color of the dark theme. Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"lightThemeBackgroundColor","title":"Background color for the light theme","description":"The background color of the light theme. Can be a hex color or a resource reference.","required":false,"choices":null}],"dependencies":["Litho color hook","SeekbarColorBytecodePatch","ThemeResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Unlock paid widgets","description":"Unlocks paid widgets of the app","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.dci.dev.androidtwelvewidgets","versions":[]}]},{"name":"Unlock plus","description":"Unlocks plus features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["SignatureDetectionPatch"],"compatiblePackages":[{"name":"com.microblink.photomath","versions":["8.20.0"]}]},{"name":"Unlock premium","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"io.yuka.android","versions":[]}]},{"name":"Unlock premium","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.adobe.lrmobile","versions":[]}]},{"name":"Unlock pro","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.candylink.openvpn","versions":[]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"ginlemon.iconpackstudio","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["SignatureVerificationPatch","LicenseValidationPatch"],"compatiblePackages":[{"name":"com.zombodroid.MemeGenerator","versions":["4.6364","4.6370","4.6375","4.6377"]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.wakdev.apps.nfctools.se","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ithebk.expensemanager","versions":[]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"co.windyapp.android","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"tv.trakt.trakt","versions":["1.1.1"]}]},{"name":"Unlock pro","description":"Unlocks all professional features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"org.totschnig.myexpenses","versions":["3.4.9"]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.awedea.nyx","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.vsco.cam","versions":[]}]},{"name":"Unlock themes","description":"Unlocks all themes that are inaccessible until a certain level is reached.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ticktick.task","versions":[]}]},{"name":"Unlock trial","description":"Unlocks the trial version.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"net.dinglisch.android.taskerm","versions":[]}]},{"name":"Upgrade button remover","description":"Removes the upgrade tab from the pivot bar.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Vanced MicroG support","description":"Allows YouTube ReVanced to run without root and under a different package name with Vanced MicroG.","version":"0.0.0","excluded":false,"options":[],"dependencies":["MicroGResourcePatch","Hide cast button","Client spoof"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Vanced MicroG support","description":"Allows YouTube Music ReVanced to run without root and under a different package name.","version":"0.0.0","excluded":false,"options":[],"dependencies":["MicroGResourcePatch"],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Video ads","description":"Removes ads in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Wide searchbar","description":"Replaces the search icon with a wide search bar. This will hide the YouTube logo when active.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]}] \ No newline at end of file From f71d8937663fdbfc93d8e3ce1cdb47e1667554f0 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Sun, 6 Aug 2023 19:42:13 +0400 Subject: [PATCH 16/67] fix(YouTube - Client spoof): Adjust spoof signature settings description (#2760) --- .../patch/SpoofSignatureVerificationResourcePatch.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/patch/SpoofSignatureVerificationResourcePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/patch/SpoofSignatureVerificationResourcePatch.kt index b82dcfd95..42c5a3abb 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/patch/SpoofSignatureVerificationResourcePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/patch/SpoofSignatureVerificationResourcePatch.kt @@ -23,11 +23,11 @@ class SpoofSignatureVerificationResourcePatch : ResourcePatch { "App signature spoofed\\n\\n" + "Side effects include:\\n" + "• Ambient mode may not work\\n" - + "• Seekbar thumbnails are hidden\\n" - + "• Downloading videos may not work"), - StringResource("revanced_spoof_signature_verification_summary_off", "App signature not spoofed"), + + "• Downloading videos may not work\\n" + + "• Seekbar thumbnails are always hidden"), + StringResource("revanced_spoof_signature_verification_summary_off", "App signature not spoofed\\n\\nVideo playback may not work"), StringResource("revanced_spoof_signature_verification_user_dialog_message", - "Turning off this setting may cause playback issues.") + "If you do not have a YouTube Premium subscription,\\n\\nthen turning off this setting will cause video playback issues.") ) ) From 872ce78ff0f99afaa8edd5962a2f0ec52d717dcf Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sun, 6 Aug 2023 15:44:55 +0000 Subject: [PATCH 17/67] chore(release): 2.188.0-dev.6 [skip ci] # [2.188.0-dev.6](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.5...v2.188.0-dev.6) (2023-08-06) ### Bug Fixes * **YouTube - Client spoof:** Adjust spoof signature settings description ([#2760](https://github.com/ReVanced/revanced-patches/issues/2760)) ([f71d893](https://github.com/ReVanced/revanced-patches/commit/f71d8937663fdbfc93d8e3ce1cdb47e1667554f0)) --- CHANGELOG.md | 7 +++++++ gradle.properties | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 20d37278f..6597f34a0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [2.188.0-dev.6](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.5...v2.188.0-dev.6) (2023-08-06) + + +### Bug Fixes + +* **YouTube - Client spoof:** Adjust spoof signature settings description ([#2760](https://github.com/ReVanced/revanced-patches/issues/2760)) ([f71d893](https://github.com/ReVanced/revanced-patches/commit/f71d8937663fdbfc93d8e3ce1cdb47e1667554f0)) + # [2.188.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.4...v2.188.0-dev.5) (2023-08-04) diff --git a/gradle.properties b/gradle.properties index 4d1fba57b..44a61a8a1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ org.gradle.parallel = true org.gradle.caching = true kotlin.code.style = official -version = 2.188.0-dev.5 +version = 2.188.0-dev.6 From 189f719720551f36c6e006c45558fe5ae46ca4f8 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Mon, 7 Aug 2023 11:50:42 +0400 Subject: [PATCH 18/67] feat(YouTube - Debug): Logging of layout proto buffer strings (#2759) --- .../youtube/misc/debugging/patch/DebuggingPatch.kt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/debugging/patch/DebuggingPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/debugging/patch/DebuggingPatch.kt index 8993ae107..c3f1b7edd 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/debugging/patch/DebuggingPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/debugging/patch/DebuggingPatch.kt @@ -32,6 +32,15 @@ class DebuggingPatch : ResourcePatch { StringResource("revanced_debug_summary_on", "Debug logs are enabled"), StringResource("revanced_debug_summary_off", "Debug logs are disabled") ), + SwitchPreference( + "revanced_debug_protobuffer", + StringResource( + "revanced_debug_protobuffer_title", + "Log protocol buffer" + ), + StringResource("revanced_debug_protobuffer_summary_on", "Debug logs include proto buffer"), + StringResource("revanced_debug_protobuffer_summary_off", "Debug logs do not include proto buffer") + ), SwitchPreference( "revanced_debug_stacktrace", StringResource( From 51a2bf2f02ec6ccacc03a0852a4fd338d8d613f1 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 7 Aug 2023 07:53:51 +0000 Subject: [PATCH 19/67] chore(release): 2.188.0-dev.7 [skip ci] # [2.188.0-dev.7](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.6...v2.188.0-dev.7) (2023-08-07) ### Features * **YouTube - Debug:** Logging of layout proto buffer strings ([#2759](https://github.com/ReVanced/revanced-patches/issues/2759)) ([189f719](https://github.com/ReVanced/revanced-patches/commit/189f719720551f36c6e006c45558fe5ae46ca4f8)) --- CHANGELOG.md | 7 +++++++ gradle.properties | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6597f34a0..9e73cd58e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [2.188.0-dev.7](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.6...v2.188.0-dev.7) (2023-08-07) + + +### Features + +* **YouTube - Debug:** Logging of layout proto buffer strings ([#2759](https://github.com/ReVanced/revanced-patches/issues/2759)) ([189f719](https://github.com/ReVanced/revanced-patches/commit/189f719720551f36c6e006c45558fe5ae46ca4f8)) + # [2.188.0-dev.6](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.5...v2.188.0-dev.6) (2023-08-06) diff --git a/gradle.properties b/gradle.properties index 44a61a8a1..6d733e432 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ org.gradle.parallel = true org.gradle.caching = true kotlin.code.style = official -version = 2.188.0-dev.6 +version = 2.188.0-dev.7 From e83e62fc2400caf1c5179d25e0ac4fbd51ddba00 Mon Sep 17 00:00:00 2001 From: Pro-Tweaker <67857759+Pro-Tweaker@users.noreply.github.com> Date: Mon, 7 Aug 2023 16:07:22 +0200 Subject: [PATCH 20/67] feat(Change package name): Append `.revanced` to package name by default (#2750) Co-authored-by: oSumAtrIX --- .../patch/ChangePackageNamePatch.kt | 40 ++++++++++--------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/src/main/kotlin/app/revanced/patches/all/misc/packagename/patch/ChangePackageNamePatch.kt b/src/main/kotlin/app/revanced/patches/all/misc/packagename/patch/ChangePackageNamePatch.kt index 0709e75c4..ab618dae2 100644 --- a/src/main/kotlin/app/revanced/patches/all/misc/packagename/patch/ChangePackageNamePatch.kt +++ b/src/main/kotlin/app/revanced/patches/all/misc/packagename/patch/ChangePackageNamePatch.kt @@ -9,39 +9,43 @@ import org.w3c.dom.Element @Patch(false) @Name("Change package name") -@Description("Changes the package name.") +@Description("Changes the package name. Appends \".revanced\" to the package name by default.") class ChangePackageNamePatch : ResourcePatch { override fun execute(context: ResourceContext): PatchResult { - packageName?.let { packageName -> - val packageNameRegex = Regex("^[a-z]\\w*(\\.[a-z]\\w*)+\$") - if (!packageName.matches(packageNameRegex)) - return PatchResultError("Invalid package name") + val packageNameToUse = packageName ?: getDefaultPackageName(context) - var originalPackageName: String - context.xmlEditor["AndroidManifest.xml"].use { editor -> - val manifest = editor.file.getElementsByTagName("manifest").item(0) as Element - originalPackageName = manifest.getAttribute("package") - } + val packageNameRegex = Regex("^[a-z]\\w*(\\.[a-z]\\w*)+\$") + if (!packageNameToUse.matches(packageNameRegex)) + return PatchResultError("Invalid package name") - if (!originalPackageName.matches(packageNameRegex)) - return PatchResultError("Failed to get the original package name") + val originalPackageName = getOriginalPackageName(context) - context["AndroidManifest.xml"].apply { - readText().replace(originalPackageName, packageName).let(::writeText) - } - - } ?: return PatchResultError("No package name provided") + context["AndroidManifest.xml"].apply { + readText().replace(originalPackageName, packageNameToUse).let(::writeText) + } return PatchResultSuccess() } + private fun getDefaultPackageName(context: ResourceContext): String { + val originalPackageName = getOriginalPackageName(context) + return "$originalPackageName.revanced" + } + + private fun getOriginalPackageName(context: ResourceContext): String { + context.xmlEditor["AndroidManifest.xml"].use { editor -> + val manifest = editor.file.getElementsByTagName("manifest").item(0) as Element + return manifest.getAttribute("package") + } + } + companion object : OptionsContainer() { var packageName: String? by option( PatchOption.StringOption( key = "packageName", default = null, title = "Package name", - description = "The name of the package to rename of the app.", + description = "The name of the package to rename the app to.", ) ) } From 5a811962c374183e19ea44694dc7dc30d62c0e8f Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 7 Aug 2023 14:10:41 +0000 Subject: [PATCH 21/67] chore(release): 2.188.0-dev.8 [skip ci] # [2.188.0-dev.8](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.7...v2.188.0-dev.8) (2023-08-07) ### Features * **Change package name:** Append `.revanced` to package name by default ([#2750](https://github.com/ReVanced/revanced-patches/issues/2750)) ([e83e62f](https://github.com/ReVanced/revanced-patches/commit/e83e62fc2400caf1c5179d25e0ac4fbd51ddba00)) --- CHANGELOG.md | 7 +++++++ gradle.properties | 2 +- patches.json | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9e73cd58e..7778cf774 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [2.188.0-dev.8](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.7...v2.188.0-dev.8) (2023-08-07) + + +### Features + +* **Change package name:** Append `.revanced` to package name by default ([#2750](https://github.com/ReVanced/revanced-patches/issues/2750)) ([e83e62f](https://github.com/ReVanced/revanced-patches/commit/e83e62fc2400caf1c5179d25e0ac4fbd51ddba00)) + # [2.188.0-dev.7](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.6...v2.188.0-dev.7) (2023-08-07) diff --git a/gradle.properties b/gradle.properties index 6d733e432..26da47584 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ org.gradle.parallel = true org.gradle.caching = true kotlin.code.style = official -version = 2.188.0-dev.7 +version = 2.188.0-dev.8 diff --git a/patches.json b/patches.json index 74c3a27ef..67542dc33 100644 --- a/patches.json +++ b/patches.json @@ -1 +1 @@ -[{"name":"Always autorepeat","description":"Always repeats the playing video again.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Auto claim channel points","description":"Automatically claim Channel Points.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Background play","description":"Enables playing music in the background.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Block audio ads","description":"Blocks audio ads in streams and VODs.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Block embedded ads","description":"Blocks embedded stream ads using services like TTV.lol or PurpleAdBlocker.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Block video ads","Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Block video ads","description":"Blocks video ads in streams and VODs.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Bypass certificate checks","description":"Bypasses certificate checks which prevent YouTube Music from working on Android Auto.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Change package name","description":"Changes the package name.","version":"0.0.0","excluded":true,"options":[{"key":"packageName","title":"Package name","description":"The name of the package to rename of the app.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[]},{"name":"Client spoof","description":"Spoofs the client to allow playback.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Spoof signature verification"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Codecs unlock","description":"Adds more audio codec options. The new audio codecs usually result in better audio quality.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Comments","description":"Hides components related to comments.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings","LithoFilterPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Compact header","description":"Hides the music category bar at the top of the homepage.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Copy video url","description":"Adds buttons in player to copy video links.","version":"0.0.0","excluded":false,"options":[],"dependencies":["CopyVideoUrlResourcePatch","Player controls bytecode patch","Video information"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Custom branding","description":"Changes the YouTube launcher icon and name to your choice (defaults to ReVanced).","version":"0.0.0","excluded":false,"options":[{"key":"appName","title":"Application Name","description":"The name of the application it will show on your home screen.","required":true,"choices":null},{"key":"iconPath","title":"App Icon Path","description":"A path containing mipmap resource folders with icons.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Debug mode","description":"Enables Twitch\u0027s internal debugging mode.","version":"0.0.0","excluded":true,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":[]}]},{"name":"Disable Shorts on startup","description":"Disables playing YouTube Shorts when launching YouTube.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable Sync for Lemmy bottom sheet","description":"Disables the bottom sheet at the startup that asks you to signup to \"Sync for Lemmy\".","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":["v23.06.30-13:39"]},{"name":"com.laurencedawson.reddit_sync.pro","versions":[]},{"name":"com.laurencedawson.reddit_sync.dev","versions":[]}]},{"name":"Disable ads","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":[]}]},{"name":"Disable ads","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"o.o.joey","versions":[]}]},{"name":"Disable ads","description":"Disables ads in HexEditor.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.myprog.hexedit","versions":[]}]},{"name":"Disable auto captions","description":"Disable forced captions from being automatically enabled.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable fullscreen panels","description":"Disables video description and comments panel in fullscreen view.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable login requirement","description":"Do not force login.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Disable mandatory login","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.adobe.lrmobile","versions":[]}]},{"name":"Disable player popup panels","description":"Disables panels from appearing automatically when going into fullscreen (playlist or live chat).","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable screenshot popup","description":"Disables the popup that shows up when taking a screenshot.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Disable switching emoji to sticker in message input field","description":"Disables switching from emoji to sticker search mode in message input field","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Disable typing indicator","description":"Disables the indicator while typing a message","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Disable zoom haptics","description":"Disables haptics when zooming.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Downloads","description":"Removes download restrictions and changes the default path to download to.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Dynamic color","description":"Replaces the default Twitter Blue with the users Material You palette.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Enable android debugging","description":"Enables Android debugging capabilities.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Enable debugging","description":"Adds debugging options.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"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.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.spotify.lite","versions":[]}]},{"name":"Exclusive audio playback","description":"Enables the option to play music without video.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Export all activities","description":"Makes all app activities exportable.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"External downloads","description":"Adds support to download and save YouTube videos using an external app.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ExternalDownloadsResourcePatch","Player controls bytecode patch","Video information"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Feed filter","description":"Filters tiktok videos: removing ads, removing livestreams.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Fix google login","description":"Allows logging in with a Google account.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"HDR auto brightness","description":"Makes the brightness of HDR videos follow the system default.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide Shorts components","description":"Hides components from YouTube Shorts.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","LithoFilterPatch","HideShortsComponentsResourcePatch","ResourceMappingPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide ads","description":"Removes ads from the Reddit.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Hide subreddit banner","Hide comment ads"],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Hide ads","description":"Removes general ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["VerticalScrollPatch"],"compatiblePackages":[{"name":"com.vanced.android.youtube","versions":[]}]},{"name":"Hide ads","description":"Hides ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Json hook"],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Hide ads","description":"Removes ads from Inshorts.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.nis.app","versions":[]}]},{"name":"Hide ads","description":"Removes general ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Hide get premium","HideAdsResourcePatch","VerticalScrollPatch","FixBackToExitGesturePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide ads","description":"Removes ads from TikTok.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Hide ads","description":"Hides ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"jp.pxv.android","versions":[]}]},{"name":"Hide album cards","description":"Hides the album cards below the artist description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","AlbumCardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide autoplay button","description":"Hides the autoplay button in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","ResourceMappingPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide breaking news shelf","description":"Hides the breaking news shelf on the homepage tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","BreakingNewsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide captions button","description":"Hides the captions button on video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide cast button","description":"Hides the cast button in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Hide crowdfunding box","description":"Hides the crowdfunding box between the player and video description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","CrowdfundingBoxResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide email address","description":"Hides the email address in the account switcher.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideEmailAddressResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide endscreen cards","description":"Hides the suggested video cards at the end of a video in fullscreen.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideEndscreenCardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide filter bar","description":"Hides the filter bar in video feeds.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideFilterBarResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide floating microphone button","description":"Hides the floating microphone button which appears in search.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideFloatingMicrophoneButtonResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide get premium","description":"Removes all \"Get Premium\" evidences from the avatar menu.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Hide inbox ads","description":"Hides ads in inbox.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Hide info cards","description":"Hides info cards in videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideInfocardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide layout components","description":"Hides general layout components.","version":"0.0.0","excluded":false,"options":[],"dependencies":["LithoFilterPatch","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide load more button","description":"Hides the button under videos that loads similar videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideLoadMoreButtonResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide player buttons","description":"Adds the option to hide video player previous and next buttons.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide player overlay","description":"Hides the dark background overlay from the player when player controls are visible.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HidePlayerOverlayResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Hide premium navbar","description":"Removes the premium tab from the navbar.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ResourceMappingPatch"],"compatiblePackages":[{"name":"com.spotify.music","versions":[]}]},{"name":"Hide recommended users","description":"Hides recommended users.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Json hook"],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Hide seekbar","description":"Hides the seekbar.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","SeekbarColorBytecodePatch","SeekbarPreferencesPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide timeline ads","description":"Removes ads from the timeline.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.instagram.android","versions":["275.0.0.27.98"]}]},{"name":"Hide timestamp","description":"Hides timestamp in video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide video action buttons","description":"Adds the options to hide action buttons under a video.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ResourceMappingPatch","LithoFilterPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide watermark","description":"Hides creator\u0027s watermarks on videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Minimized playback","description":"Enables minimized and background playback.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Player type hook","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Minimized playback music","description":"Enables minimized playback on Kids music.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Music video ads","description":"Removes ads in the music player.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Navigation buttons","description":"Adds options to hide or change navigation buttons.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","ResolvePivotBarFingerprintsPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Old video quality menu","description":"Shows the old video quality with the advanced video quality options instead of the new one.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","OldVideoQualityMenuResourcePatch","LithoFilterPatch","BottomSheetHookPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.20.39","18.23.35"]}]},{"name":"Open links externally","description":"Open links outside of the app directly in your browser.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Permanent repeat","description":"Permanently remember your repeating preference even if the playlist ends or another track is played.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Permanent shuffle","description":"Permanently remember your shuffle preference even if the playlist ends or another track is played.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Playback speed","description":"Adds custom playback speeds and ability to remember the playback speed you chose in the video playback speed flyout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Custom playback speed","Remember playback speed"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.20.39","18.23.35"]}]},{"name":"Playback speed","description":"Enables the playback speed option for all videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Player flyout menu","description":"Hides player flyout menu items.","version":"0.0.0","excluded":false,"options":[],"dependencies":["LithoFilterPatch","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Predictive back gesture","description":"Enables the predictive back gesture introduced on Android 13.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Premium heading","description":"Shows premium branding on the home screen.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Premium icon reddit","description":"Unlocks premium Reddit app icons.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Pro unlock","description":"Unlocks pro-only functions.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.backdrops.wallpapers","versions":["4.52"]}]},{"name":"Promo code unlock","description":"Disables the validation of promo code. Any code will work to unlock all features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Spoof cert patch"],"compatiblePackages":[{"name":"de.dwd.warnapp","versions":[]}]},{"name":"Remember video quality","description":"Adds the ability to remember the video quality you chose in the video quality flyout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video information","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.19.35","18.20.39","18.23.35"]}]},{"name":"Remove ads","description":"Removes all ads from the app.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"net.binarymode.android.irplus","versions":[]}]},{"name":"Remove badge tab","description":"Removes the badge tab from the activity tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.sony.songpal.mdr","versions":[]}]},{"name":"Remove bootloader detection","description":"Removes the check for an unlocked bootloader.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.bmf.bmf2go","versions":[]}]},{"name":"Remove broadcasts restriction","description":"Enables starting/stopping NetGuard via broadcasts.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"eu.faircode.netguard","versions":[]}]},{"name":"Remove debugging detection","description":"Removes the USB and wireless debugging checks.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.scb.phone","versions":[]}]},{"name":"Remove device restrictions","description":"Removes restrictions from using the app on any device.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.recorder","versions":[]}]},{"name":"Remove notification badge","description":"Removes the red notification badge from the activity tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.sony.songpal.mdr","versions":[]}]},{"name":"Remove player controls background","description":"Removes the background from the video player controls.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Remove root detection","description":"Removes the check for root permissions.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.bmf.bmf2go","versions":[]}]},{"name":"Remove root detection","description":"Removes the check for root permissions and unlocked bootloader.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.oe.app","versions":[]}]},{"name":"Remove screen capture restriction","description":"Removes the restriction of capturing audio from apps that normally wouldn\u0027t allow it.","version":"0.0.0","excluded":true,"options":[],"dependencies":["RemoveCaptureRestrictionResourcePatch"],"compatiblePackages":[]},{"name":"Remove screenshot restriction","description":"Removes the restriction of taking screenshots in apps that normally wouldn\u0027t allow it.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Return YouTube Dislike","description":"Shows the dislike count of videos using the Return YouTube Dislike API.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video id hook","ReturnYouTubeDislikeResourcePatch","Player type hook"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Sanitize sharing links","description":"Removes (tracking) query parameters from the URLs when sharing links.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Seekbar tapping","description":"Enables tap-to-seek on the seekbar of the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","EnableSeekbarTappingResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Settings","description":"Adds settings menu to Twitch.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","SettingsResourcePatch"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":[]}]},{"name":"Settings","description":"Adds ReVanced settings to TikTok.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Show deleted messages","description":"Shows deleted chat messages behind a clickable spoiler.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Show seekbar","description":"Shows progress bar for all video.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Sim spoof","description":"Spoofs the information which is retrieved from the sim-card.","version":"0.0.0","excluded":true,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"SponsorBlock","description":"Integrates SponsorBlock which allows skipping video segments such as sponsored content.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video id hook","Video information","Player type hook","Player controls bytecode patch","SponsorBlockResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Spoof app version","description":"Tricks YouTube into thinking you are running an older version of the app. One of the side effects also includes restoring the old UI.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://baconreader.com/auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.onelouder.baconreader","versions":[]},{"name":"com.onelouder.baconreader.premium","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"dbrady://relay\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"free.reddit.news","versions":[]},{"name":"reddit.news","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://rubenmayayo.com\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.rubenmayayo.reddit","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://www.ccrama.me\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"me.ccrama.redditslide","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"redditisfun://auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.andrewshu.android.reddit","versions":[]},{"name":"com.andrewshu.android.redditdonation","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://redditsync/auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":[]},{"name":"com.laurencedawson.reddit_sync.pro","versions":[]},{"name":"com.laurencedawson.reddit_sync.dev","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"https://127.0.0.1:65023/authorize_callback\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"o.o.joey","versions":[]},{"name":"o.o.joey.pro","versions":[]},{"name":"o.o.joey.dev","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"infinity://localhost\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"ml.docilealligator.infinityforreddit","versions":[]}]},{"name":"Spoof signature","description":"Spoofs the signature of the app.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.oe.app","versions":[]}]},{"name":"Spoof wifi connection","description":"Spoofs an existing Wi-Fi connection.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Spotify theme","description":"Applies a custom theme.","version":"0.0.0","excluded":false,"options":[{"key":"backgroundColor","title":"Background color","description":"The background color. Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"accentColor","title":"Accent color","description":"The accent color (\u0027spotify green\u0027 by default). Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"accentPressedColor","title":"Pressed accent for the dark theme","description":"The color when accented buttons are pressed, by default slightly darker than accent. Can be a hex color or a resource reference.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.spotify.music","versions":[]}]},{"name":"Swipe controls","description":"Adds volume and brightness swipe controls.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Player type hook","SwipeControlsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Tablet mini player","description":"Enables the tablet mini player layout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Theme","description":"Applies a custom theme.","version":"0.0.0","excluded":false,"options":[{"key":"darkThemeBackgroundColor","title":"Background color for the dark theme","description":"The background color of the dark theme. Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"lightThemeBackgroundColor","title":"Background color for the light theme","description":"The background color of the light theme. Can be a hex color or a resource reference.","required":false,"choices":null}],"dependencies":["Litho color hook","SeekbarColorBytecodePatch","ThemeResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Unlock paid widgets","description":"Unlocks paid widgets of the app","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.dci.dev.androidtwelvewidgets","versions":[]}]},{"name":"Unlock plus","description":"Unlocks plus features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["SignatureDetectionPatch"],"compatiblePackages":[{"name":"com.microblink.photomath","versions":["8.20.0"]}]},{"name":"Unlock premium","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"io.yuka.android","versions":[]}]},{"name":"Unlock premium","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.adobe.lrmobile","versions":[]}]},{"name":"Unlock pro","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.candylink.openvpn","versions":[]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"ginlemon.iconpackstudio","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["SignatureVerificationPatch","LicenseValidationPatch"],"compatiblePackages":[{"name":"com.zombodroid.MemeGenerator","versions":["4.6364","4.6370","4.6375","4.6377"]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.wakdev.apps.nfctools.se","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ithebk.expensemanager","versions":[]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"co.windyapp.android","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"tv.trakt.trakt","versions":["1.1.1"]}]},{"name":"Unlock pro","description":"Unlocks all professional features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"org.totschnig.myexpenses","versions":["3.4.9"]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.awedea.nyx","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.vsco.cam","versions":[]}]},{"name":"Unlock themes","description":"Unlocks all themes that are inaccessible until a certain level is reached.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ticktick.task","versions":[]}]},{"name":"Unlock trial","description":"Unlocks the trial version.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"net.dinglisch.android.taskerm","versions":[]}]},{"name":"Upgrade button remover","description":"Removes the upgrade tab from the pivot bar.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Vanced MicroG support","description":"Allows YouTube ReVanced to run without root and under a different package name with Vanced MicroG.","version":"0.0.0","excluded":false,"options":[],"dependencies":["MicroGResourcePatch","Hide cast button","Client spoof"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Vanced MicroG support","description":"Allows YouTube Music ReVanced to run without root and under a different package name.","version":"0.0.0","excluded":false,"options":[],"dependencies":["MicroGResourcePatch"],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Video ads","description":"Removes ads in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Wide searchbar","description":"Replaces the search icon with a wide search bar. This will hide the YouTube logo when active.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]}] \ No newline at end of file +[{"name":"Always autorepeat","description":"Always repeats the playing video again.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Auto claim channel points","description":"Automatically claim Channel Points.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Background play","description":"Enables playing music in the background.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Block audio ads","description":"Blocks audio ads in streams and VODs.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Block embedded ads","description":"Blocks embedded stream ads using services like TTV.lol or PurpleAdBlocker.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Block video ads","Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Block video ads","description":"Blocks video ads in streams and VODs.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Bypass certificate checks","description":"Bypasses certificate checks which prevent YouTube Music from working on Android Auto.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Change package name","description":"Changes the package name. Appends \".revanced\" to the package name by default.","version":"0.0.0","excluded":true,"options":[{"key":"packageName","title":"Package name","description":"The name of the package to rename the app to.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[]},{"name":"Client spoof","description":"Spoofs the client to allow playback.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Spoof signature verification"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Codecs unlock","description":"Adds more audio codec options. The new audio codecs usually result in better audio quality.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Comments","description":"Hides components related to comments.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings","LithoFilterPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Compact header","description":"Hides the music category bar at the top of the homepage.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Copy video url","description":"Adds buttons in player to copy video links.","version":"0.0.0","excluded":false,"options":[],"dependencies":["CopyVideoUrlResourcePatch","Player controls bytecode patch","Video information"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Custom branding","description":"Changes the YouTube launcher icon and name to your choice (defaults to ReVanced).","version":"0.0.0","excluded":false,"options":[{"key":"appName","title":"Application Name","description":"The name of the application it will show on your home screen.","required":true,"choices":null},{"key":"iconPath","title":"App Icon Path","description":"A path containing mipmap resource folders with icons.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Debug mode","description":"Enables Twitch\u0027s internal debugging mode.","version":"0.0.0","excluded":true,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":[]}]},{"name":"Disable Shorts on startup","description":"Disables playing YouTube Shorts when launching YouTube.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable Sync for Lemmy bottom sheet","description":"Disables the bottom sheet at the startup that asks you to signup to \"Sync for Lemmy\".","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":["v23.06.30-13:39"]},{"name":"com.laurencedawson.reddit_sync.pro","versions":[]},{"name":"com.laurencedawson.reddit_sync.dev","versions":[]}]},{"name":"Disable ads","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":[]}]},{"name":"Disable ads","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"o.o.joey","versions":[]}]},{"name":"Disable ads","description":"Disables ads in HexEditor.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.myprog.hexedit","versions":[]}]},{"name":"Disable auto captions","description":"Disable forced captions from being automatically enabled.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable fullscreen panels","description":"Disables video description and comments panel in fullscreen view.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable login requirement","description":"Do not force login.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Disable mandatory login","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.adobe.lrmobile","versions":[]}]},{"name":"Disable player popup panels","description":"Disables panels from appearing automatically when going into fullscreen (playlist or live chat).","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable screenshot popup","description":"Disables the popup that shows up when taking a screenshot.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Disable switching emoji to sticker in message input field","description":"Disables switching from emoji to sticker search mode in message input field","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Disable typing indicator","description":"Disables the indicator while typing a message","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Disable zoom haptics","description":"Disables haptics when zooming.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Downloads","description":"Removes download restrictions and changes the default path to download to.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Dynamic color","description":"Replaces the default Twitter Blue with the users Material You palette.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Enable android debugging","description":"Enables Android debugging capabilities.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Enable debugging","description":"Adds debugging options.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"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.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.spotify.lite","versions":[]}]},{"name":"Exclusive audio playback","description":"Enables the option to play music without video.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Export all activities","description":"Makes all app activities exportable.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"External downloads","description":"Adds support to download and save YouTube videos using an external app.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ExternalDownloadsResourcePatch","Player controls bytecode patch","Video information"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Feed filter","description":"Filters tiktok videos: removing ads, removing livestreams.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Fix google login","description":"Allows logging in with a Google account.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"HDR auto brightness","description":"Makes the brightness of HDR videos follow the system default.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide Shorts components","description":"Hides components from YouTube Shorts.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","LithoFilterPatch","HideShortsComponentsResourcePatch","ResourceMappingPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide ads","description":"Removes ads from the Reddit.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Hide subreddit banner","Hide comment ads"],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Hide ads","description":"Removes general ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["VerticalScrollPatch"],"compatiblePackages":[{"name":"com.vanced.android.youtube","versions":[]}]},{"name":"Hide ads","description":"Hides ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Json hook"],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Hide ads","description":"Removes ads from Inshorts.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.nis.app","versions":[]}]},{"name":"Hide ads","description":"Removes general ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Hide get premium","HideAdsResourcePatch","VerticalScrollPatch","FixBackToExitGesturePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide ads","description":"Removes ads from TikTok.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Hide ads","description":"Hides ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"jp.pxv.android","versions":[]}]},{"name":"Hide album cards","description":"Hides the album cards below the artist description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","AlbumCardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide autoplay button","description":"Hides the autoplay button in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","ResourceMappingPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide breaking news shelf","description":"Hides the breaking news shelf on the homepage tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","BreakingNewsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide captions button","description":"Hides the captions button on video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide cast button","description":"Hides the cast button in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Hide crowdfunding box","description":"Hides the crowdfunding box between the player and video description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","CrowdfundingBoxResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide email address","description":"Hides the email address in the account switcher.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideEmailAddressResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide endscreen cards","description":"Hides the suggested video cards at the end of a video in fullscreen.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideEndscreenCardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide filter bar","description":"Hides the filter bar in video feeds.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideFilterBarResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide floating microphone button","description":"Hides the floating microphone button which appears in search.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideFloatingMicrophoneButtonResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide get premium","description":"Removes all \"Get Premium\" evidences from the avatar menu.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Hide inbox ads","description":"Hides ads in inbox.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Hide info cards","description":"Hides info cards in videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideInfocardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide layout components","description":"Hides general layout components.","version":"0.0.0","excluded":false,"options":[],"dependencies":["LithoFilterPatch","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide load more button","description":"Hides the button under videos that loads similar videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideLoadMoreButtonResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide player buttons","description":"Adds the option to hide video player previous and next buttons.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide player overlay","description":"Hides the dark background overlay from the player when player controls are visible.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HidePlayerOverlayResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Hide premium navbar","description":"Removes the premium tab from the navbar.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ResourceMappingPatch"],"compatiblePackages":[{"name":"com.spotify.music","versions":[]}]},{"name":"Hide recommended users","description":"Hides recommended users.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Json hook"],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Hide seekbar","description":"Hides the seekbar.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","SeekbarColorBytecodePatch","SeekbarPreferencesPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide timeline ads","description":"Removes ads from the timeline.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.instagram.android","versions":["275.0.0.27.98"]}]},{"name":"Hide timestamp","description":"Hides timestamp in video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide video action buttons","description":"Adds the options to hide action buttons under a video.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ResourceMappingPatch","LithoFilterPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide watermark","description":"Hides creator\u0027s watermarks on videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Minimized playback","description":"Enables minimized and background playback.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Player type hook","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Minimized playback music","description":"Enables minimized playback on Kids music.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Music video ads","description":"Removes ads in the music player.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Navigation buttons","description":"Adds options to hide or change navigation buttons.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","ResolvePivotBarFingerprintsPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Old video quality menu","description":"Shows the old video quality with the advanced video quality options instead of the new one.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","OldVideoQualityMenuResourcePatch","LithoFilterPatch","BottomSheetHookPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.20.39","18.23.35"]}]},{"name":"Open links externally","description":"Open links outside of the app directly in your browser.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Permanent repeat","description":"Permanently remember your repeating preference even if the playlist ends or another track is played.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Permanent shuffle","description":"Permanently remember your shuffle preference even if the playlist ends or another track is played.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Playback speed","description":"Adds custom playback speeds and ability to remember the playback speed you chose in the video playback speed flyout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Custom playback speed","Remember playback speed"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.20.39","18.23.35"]}]},{"name":"Playback speed","description":"Enables the playback speed option for all videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Player flyout menu","description":"Hides player flyout menu items.","version":"0.0.0","excluded":false,"options":[],"dependencies":["LithoFilterPatch","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Predictive back gesture","description":"Enables the predictive back gesture introduced on Android 13.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Premium heading","description":"Shows premium branding on the home screen.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Premium icon reddit","description":"Unlocks premium Reddit app icons.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Pro unlock","description":"Unlocks pro-only functions.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.backdrops.wallpapers","versions":["4.52"]}]},{"name":"Promo code unlock","description":"Disables the validation of promo code. Any code will work to unlock all features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Spoof cert patch"],"compatiblePackages":[{"name":"de.dwd.warnapp","versions":[]}]},{"name":"Remember video quality","description":"Adds the ability to remember the video quality you chose in the video quality flyout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video information","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.19.35","18.20.39","18.23.35"]}]},{"name":"Remove ads","description":"Removes all ads from the app.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"net.binarymode.android.irplus","versions":[]}]},{"name":"Remove badge tab","description":"Removes the badge tab from the activity tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.sony.songpal.mdr","versions":[]}]},{"name":"Remove bootloader detection","description":"Removes the check for an unlocked bootloader.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.bmf.bmf2go","versions":[]}]},{"name":"Remove broadcasts restriction","description":"Enables starting/stopping NetGuard via broadcasts.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"eu.faircode.netguard","versions":[]}]},{"name":"Remove debugging detection","description":"Removes the USB and wireless debugging checks.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.scb.phone","versions":[]}]},{"name":"Remove device restrictions","description":"Removes restrictions from using the app on any device.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.recorder","versions":[]}]},{"name":"Remove notification badge","description":"Removes the red notification badge from the activity tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.sony.songpal.mdr","versions":[]}]},{"name":"Remove player controls background","description":"Removes the background from the video player controls.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Remove root detection","description":"Removes the check for root permissions.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.bmf.bmf2go","versions":[]}]},{"name":"Remove root detection","description":"Removes the check for root permissions and unlocked bootloader.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.oe.app","versions":[]}]},{"name":"Remove screen capture restriction","description":"Removes the restriction of capturing audio from apps that normally wouldn\u0027t allow it.","version":"0.0.0","excluded":true,"options":[],"dependencies":["RemoveCaptureRestrictionResourcePatch"],"compatiblePackages":[]},{"name":"Remove screenshot restriction","description":"Removes the restriction of taking screenshots in apps that normally wouldn\u0027t allow it.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Return YouTube Dislike","description":"Shows the dislike count of videos using the Return YouTube Dislike API.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video id hook","ReturnYouTubeDislikeResourcePatch","Player type hook"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Sanitize sharing links","description":"Removes (tracking) query parameters from the URLs when sharing links.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Seekbar tapping","description":"Enables tap-to-seek on the seekbar of the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","EnableSeekbarTappingResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Settings","description":"Adds settings menu to Twitch.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","SettingsResourcePatch"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":[]}]},{"name":"Settings","description":"Adds ReVanced settings to TikTok.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Show deleted messages","description":"Shows deleted chat messages behind a clickable spoiler.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Show seekbar","description":"Shows progress bar for all video.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Sim spoof","description":"Spoofs the information which is retrieved from the sim-card.","version":"0.0.0","excluded":true,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"SponsorBlock","description":"Integrates SponsorBlock which allows skipping video segments such as sponsored content.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video id hook","Video information","Player type hook","Player controls bytecode patch","SponsorBlockResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Spoof app version","description":"Tricks YouTube into thinking you are running an older version of the app. One of the side effects also includes restoring the old UI.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://baconreader.com/auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.onelouder.baconreader","versions":[]},{"name":"com.onelouder.baconreader.premium","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"dbrady://relay\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"free.reddit.news","versions":[]},{"name":"reddit.news","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://rubenmayayo.com\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.rubenmayayo.reddit","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://www.ccrama.me\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"me.ccrama.redditslide","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"redditisfun://auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.andrewshu.android.reddit","versions":[]},{"name":"com.andrewshu.android.redditdonation","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://redditsync/auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":[]},{"name":"com.laurencedawson.reddit_sync.pro","versions":[]},{"name":"com.laurencedawson.reddit_sync.dev","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"https://127.0.0.1:65023/authorize_callback\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"o.o.joey","versions":[]},{"name":"o.o.joey.pro","versions":[]},{"name":"o.o.joey.dev","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"infinity://localhost\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"ml.docilealligator.infinityforreddit","versions":[]}]},{"name":"Spoof signature","description":"Spoofs the signature of the app.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.oe.app","versions":[]}]},{"name":"Spoof wifi connection","description":"Spoofs an existing Wi-Fi connection.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Spotify theme","description":"Applies a custom theme.","version":"0.0.0","excluded":false,"options":[{"key":"backgroundColor","title":"Background color","description":"The background color. Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"accentColor","title":"Accent color","description":"The accent color (\u0027spotify green\u0027 by default). Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"accentPressedColor","title":"Pressed accent for the dark theme","description":"The color when accented buttons are pressed, by default slightly darker than accent. Can be a hex color or a resource reference.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.spotify.music","versions":[]}]},{"name":"Swipe controls","description":"Adds volume and brightness swipe controls.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Player type hook","SwipeControlsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Tablet mini player","description":"Enables the tablet mini player layout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Theme","description":"Applies a custom theme.","version":"0.0.0","excluded":false,"options":[{"key":"darkThemeBackgroundColor","title":"Background color for the dark theme","description":"The background color of the dark theme. Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"lightThemeBackgroundColor","title":"Background color for the light theme","description":"The background color of the light theme. Can be a hex color or a resource reference.","required":false,"choices":null}],"dependencies":["Litho color hook","SeekbarColorBytecodePatch","ThemeResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Unlock paid widgets","description":"Unlocks paid widgets of the app","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.dci.dev.androidtwelvewidgets","versions":[]}]},{"name":"Unlock plus","description":"Unlocks plus features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["SignatureDetectionPatch"],"compatiblePackages":[{"name":"com.microblink.photomath","versions":["8.20.0"]}]},{"name":"Unlock premium","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"io.yuka.android","versions":[]}]},{"name":"Unlock premium","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.adobe.lrmobile","versions":[]}]},{"name":"Unlock pro","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.candylink.openvpn","versions":[]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"ginlemon.iconpackstudio","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["SignatureVerificationPatch","LicenseValidationPatch"],"compatiblePackages":[{"name":"com.zombodroid.MemeGenerator","versions":["4.6364","4.6370","4.6375","4.6377"]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.wakdev.apps.nfctools.se","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ithebk.expensemanager","versions":[]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"co.windyapp.android","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"tv.trakt.trakt","versions":["1.1.1"]}]},{"name":"Unlock pro","description":"Unlocks all professional features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"org.totschnig.myexpenses","versions":["3.4.9"]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.awedea.nyx","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.vsco.cam","versions":[]}]},{"name":"Unlock themes","description":"Unlocks all themes that are inaccessible until a certain level is reached.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ticktick.task","versions":[]}]},{"name":"Unlock trial","description":"Unlocks the trial version.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"net.dinglisch.android.taskerm","versions":[]}]},{"name":"Upgrade button remover","description":"Removes the upgrade tab from the pivot bar.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Vanced MicroG support","description":"Allows YouTube ReVanced to run without root and under a different package name with Vanced MicroG.","version":"0.0.0","excluded":false,"options":[],"dependencies":["MicroGResourcePatch","Hide cast button","Client spoof"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Vanced MicroG support","description":"Allows YouTube Music ReVanced to run without root and under a different package name.","version":"0.0.0","excluded":false,"options":[],"dependencies":["MicroGResourcePatch"],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Video ads","description":"Removes ads in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Wide searchbar","description":"Replaces the search icon with a wide search bar. This will hide the YouTube logo when active.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]}] \ No newline at end of file From 220f694b12e7ed013753c8215d181936ab2205c3 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Mon, 7 Aug 2023 18:34:53 +0400 Subject: [PATCH 22/67] feat(YouTube - Hide video action buttons): Hide individual action buttons (#2723) --- .../buttons/action/patch/HideButtonsPatch.kt | 48 +++++++++++--- .../litho/filter/patch/LithoFilterPatch.kt | 62 ++++++------------- 2 files changed, 58 insertions(+), 52 deletions(-) diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/action/patch/HideButtonsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/action/patch/HideButtonsPatch.kt index 855d4ecc8..507fff125 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/action/patch/HideButtonsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/action/patch/HideButtonsPatch.kt @@ -34,6 +34,30 @@ class HideButtonsPatch : ResourcePatch { StringResource("revanced_hide_like_dislike_button_summary_on", "Like and dislike buttons are hidden"), StringResource("revanced_hide_like_dislike_button_summary_off", "Like and dislike buttons are shown") ), + SwitchPreference( + "revanced_hide_live_chat_button", + StringResource("revanced_hide_live_chat_button_title", "Hide live chat button"), + StringResource("revanced_hide_live_chat_button_summary_on", "Live chat button is hidden"), + StringResource("revanced_hide_live_chat_button_summary_off", "Live chat button is shown") + ), + SwitchPreference( + "revanced_hide_share_button", + StringResource("revanced_hide_share_button_title", "Hide share button"), + StringResource("revanced_hide_share_button_summary_on", "Share button is hidden"), + StringResource("revanced_hide_share_button_summary_off", "Share button is shown") + ), + SwitchPreference( + "revanced_hide_report_button", + StringResource("revanced_hide_report_button_title", "Hide report button"), + StringResource("revanced_hide_report_button_summary_on", "Report button is hidden"), + StringResource("revanced_hide_report_button_summary_off", "Report button is shown") + ), + SwitchPreference( + "revanced_hide_remix_button", + StringResource("revanced_hide_remix_button_title", "Hide remix button"), + StringResource("revanced_hide_remix_button_summary_on", "Remix button is hidden"), + StringResource("revanced_hide_remix_button_summary_off", "Remix button is shown") + ), SwitchPreference( "revanced_hide_download_button", StringResource("revanced_hide_download_button_title", "Hide download button"), @@ -41,24 +65,28 @@ class HideButtonsPatch : ResourcePatch { StringResource("revanced_hide_download_button_summary_off", "Download button is shown") ), SwitchPreference( - "revanced_hide_playlist_button", - StringResource("revanced_hide_playlist_button_title", "Hide playlist button"), - StringResource("revanced_hide_playlist_button_summary_on", "Playlist button is hidden"), - StringResource("revanced_hide_playlist_button_summary_off", "Playlist button is shown") + "revanced_hide_thanks_button", + StringResource("revanced_hide_thanks_button_title", "Hide thanks button"), + StringResource("revanced_hide_thanks_button_summary_on", "Thanks button is hidden"), + StringResource("revanced_hide_thanks_button_summary_off", "Thanks button is shown") ), SwitchPreference( "revanced_hide_clip_button", StringResource("revanced_hide_clip_button_title", "Hide clip button"), StringResource("revanced_hide_clip_button_summary_on", "Clip button is hidden"), StringResource("revanced_hide_clip_button_summary_off", "Clip button is shown"), - StringResource("revanced_hide_clip_button_user_dialog_message", - "Hiding the clip button might not work reliably. In the case it does not work, it can only be hidden by enabling \\'Hide all other action buttons\\'") ), SwitchPreference( - "revanced_hide_action_buttons", - StringResource("revanced_hide_action_buttons_title", "Hide all other action buttons"), - StringResource("revanced_hide_action_buttons_summary_on", "Share, remix, thanks, shop, live chat buttons are hidden"), - StringResource("revanced_hide_action_buttons_summary_off", "Share, remix, thanks, shop, live chat buttons are shown") + "revanced_hide_playlist_button", + StringResource("revanced_hide_playlist_button_title", "Hide save to playlist button"), + StringResource("revanced_hide_playlist_button_summary_on", "Save button is hidden"), + StringResource("revanced_hide_playlist_button_summary_off", "Save button is shown") + ), + SwitchPreference( + "revanced_hide_shop_button", + StringResource("revanced_hide_shop_button_title", "Hide shop button"), + StringResource("revanced_hide_shop_button_summary_on", "Shop button is hidden"), + StringResource("revanced_hide_shop_button_summary_off", "Shop button is shown") ) ), StringResource("revanced_hide_buttons_preference_screen_summary", "Hide or show buttons under videos") diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/litho/filter/patch/LithoFilterPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/litho/filter/patch/LithoFilterPatch.kt index 6ad8cfffb..7b45c8950 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/litho/filter/patch/LithoFilterPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/litho/filter/patch/LithoFilterPatch.kt @@ -9,23 +9,19 @@ import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWith import app.revanced.patcher.extensions.InstructionExtensions.getInstruction import app.revanced.patcher.extensions.InstructionExtensions.removeInstructions import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction -import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint.Companion.resolve import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.PatchResult import app.revanced.patcher.patch.PatchResultSuccess import app.revanced.patcher.patch.annotations.DependsOn -import app.revanced.patcher.util.proxy.mutableTypes.MutableField.Companion.toMutable import app.revanced.patcher.util.smali.ExternalLabel import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch import app.revanced.patches.youtube.misc.litho.filter.fingerprints.* -import org.jf.dexlib2.AccessFlags import org.jf.dexlib2.iface.instruction.FiveRegisterInstruction import org.jf.dexlib2.iface.instruction.Instruction import org.jf.dexlib2.iface.instruction.OneRegisterInstruction import org.jf.dexlib2.iface.instruction.ReferenceInstruction -import org.jf.dexlib2.immutable.ImmutableField import java.io.Closeable @DependsOn([IntegrationsPatch::class]) @@ -41,32 +37,29 @@ class LithoFilterPatch : BytecodePatch( * Additionally, the method contains a reference to the components identifier. * The identifier is used to filter components by their identifier. * - * In addition to that, a static field is added to the class of this method. (See protobufBufferField). - * This field holds a reference to the protobuf buffer object. - * The field is being set in another method that holds a reference to the protobuf buffer object. - * The object contains a large byte array that represents the component tree. + * The protobuf buffer is passed along from a different injection point before the filtering occurs. + * The buffer is a large byte array that represents the component tree. * This byte array is searched for strings that indicate the current component. * * The following pseudo code shows how the patch works: * - * class ComponentContextParser { - * public static ByteBuffer buffer; // Inserted by this patch. - * - * public ComponentContext parseBytesToComponentContext(...) { - * ... - * if (filter(identifier, pathBuilder, buffer)); // Inserted by this patch. - * return emptyComponent; - * ... - * } - * } - * * class SomeOtherClass { * // Called before ComponentContextParser.parseBytesToComponentContext method. * public void someOtherMethod(ByteBuffer byteBuffer) { - * ComponentContextParser.buffer = byteBuffer; // Inserted by this patch. + * IntegrationsClass.setProtoBuffer(byteBuffer); // Inserted by this patch. * ... * } * } + * + * class ComponentContextParser { + * + * public ComponentContext parseBytesToComponentContext(...) { + * ... + * if (IntegrationsClass.filter(identifier, pathBuilder)); // Inserted by this patch. + * return emptyComponent; + * ... + * } + * } */ override fun execute(context: BytecodeContext): PatchResult { ComponentContextParserFingerprint.result?.also { @@ -78,21 +71,12 @@ class LithoFilterPatch : BytecodePatch( return fingerprint.toErrorResult() } }?.let { bytesToComponentContextMethod -> - // region Add a static field that holds a reference to the protobuf buffer object. - val protobufBufferField = ImmutableField( - bytesToComponentContextMethod.mutableClass.type, - "buffer", - "Ljava/nio/ByteBuffer;", - AccessFlags.PUBLIC or AccessFlags.STATIC, - null, - null, - null - ).toMutable() - bytesToComponentContextMethod.mutableClass.staticFields.add(protobufBufferField) - // Set the field with the reference to the protobuf buffer object. + // region Pass the buffer into Integrations. + ProtobufBufferReferenceFingerprint.result - ?.mutableMethod?.addInstruction(0, "sput-object p2, $protobufBufferField") + ?.mutableMethod?.addInstruction(0, + " invoke-static { p2 }, $INTEGRATIONS_CLASS_DESCRIPTOR->setProtoBuffer(Ljava/nio/ByteBuffer;)V") ?: return ProtobufBufferReferenceFingerprint.toErrorResult() // endregion @@ -135,17 +119,13 @@ class LithoFilterPatch : BytecodePatch( // region Patch the method. // Insert the instructions that are responsible - // to return an EmptyComponent instead of the original component if the filter method returns false. + // to return an EmptyComponent instead of the original component if the filter method returns true. addInstructionsWithLabels( insertHookIndex, """ - # Register "free1" holds the protobuf buffer object - - sget-object v$free1, $protobufBufferField - # Invoke the filter method. - invoke-static { v$stringBuilderRegister, v$identifierRegister, v$free1 }, $FILTER_METHOD_DESCRIPTOR + invoke-static { v$identifierRegister, v$stringBuilderRegister }, $INTEGRATIONS_CLASS_DESCRIPTOR->filter(Ljava/lang/String;Ljava/lang/StringBuilder;)Z move-result v$free1 if-eqz v$free1, :unfiltered @@ -197,9 +177,7 @@ class LithoFilterPatch : BytecodePatch( private val Instruction.descriptor get() = (this as ReferenceInstruction).reference.toString() - private const val FILTER_METHOD_DESCRIPTOR = - "Lapp/revanced/integrations/patches/components/LithoFilterPatch;" + - "->filter(Ljava/lang/StringBuilder;Ljava/lang/String;Ljava/nio/ByteBuffer;)Z" + const val INTEGRATIONS_CLASS_DESCRIPTOR = "Lapp/revanced/integrations/patches/components/LithoFilterPatch;" internal lateinit var addFilter: (String) -> Unit private set From 45cc71f4d5aa386ab100da021069f27dbec63bd0 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 7 Aug 2023 14:37:51 +0000 Subject: [PATCH 23/67] chore(release): 2.188.0-dev.9 [skip ci] # [2.188.0-dev.9](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.8...v2.188.0-dev.9) (2023-08-07) ### Features * **YouTube - Hide video action buttons:** Hide individual action buttons ([#2723](https://github.com/ReVanced/revanced-patches/issues/2723)) ([220f694](https://github.com/ReVanced/revanced-patches/commit/220f694b12e7ed013753c8215d181936ab2205c3)) --- CHANGELOG.md | 7 +++++++ gradle.properties | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7778cf774..a0a78ac0f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [2.188.0-dev.9](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.8...v2.188.0-dev.9) (2023-08-07) + + +### Features + +* **YouTube - Hide video action buttons:** Hide individual action buttons ([#2723](https://github.com/ReVanced/revanced-patches/issues/2723)) ([220f694](https://github.com/ReVanced/revanced-patches/commit/220f694b12e7ed013753c8215d181936ab2205c3)) + # [2.188.0-dev.8](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.7...v2.188.0-dev.8) (2023-08-07) diff --git a/gradle.properties b/gradle.properties index 26da47584..a7e3999b4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ org.gradle.parallel = true org.gradle.caching = true kotlin.code.style = official -version = 2.188.0-dev.8 +version = 2.188.0-dev.9 From 8354a879cfc6028820e2bb0e01d6f607e145c0f6 Mon Sep 17 00:00:00 2001 From: oSumAtrIX Date: Wed, 9 Aug 2023 12:23:56 +0200 Subject: [PATCH 24/67] feat(Tasker): Remove `Unlock trial` patch --- .../annotations/UnlockTrialCompatibility.kt | 8 ----- .../fingerprints/CheckLicenseFingerprint.kt | 7 ----- .../trial/unlock/patch/UnlockLicensePatch.kt | 30 ------------------- 3 files changed, 45 deletions(-) delete mode 100644 src/main/kotlin/app/revanced/patches/tasker/trial/unlock/annotations/UnlockTrialCompatibility.kt delete mode 100644 src/main/kotlin/app/revanced/patches/tasker/trial/unlock/fingerprints/CheckLicenseFingerprint.kt delete mode 100644 src/main/kotlin/app/revanced/patches/tasker/trial/unlock/patch/UnlockLicensePatch.kt diff --git a/src/main/kotlin/app/revanced/patches/tasker/trial/unlock/annotations/UnlockTrialCompatibility.kt b/src/main/kotlin/app/revanced/patches/tasker/trial/unlock/annotations/UnlockTrialCompatibility.kt deleted file mode 100644 index 3f1c42eae..000000000 --- a/src/main/kotlin/app/revanced/patches/tasker/trial/unlock/annotations/UnlockTrialCompatibility.kt +++ /dev/null @@ -1,8 +0,0 @@ -package app.revanced.patches.tasker.trial.unlock.annotations - -import app.revanced.patcher.annotation.Compatibility -import app.revanced.patcher.annotation.Package - -@Compatibility([Package("net.dinglisch.android.taskerm")]) -@Target(AnnotationTarget.CLASS) -internal annotation class UnlockTrialCompatibility diff --git a/src/main/kotlin/app/revanced/patches/tasker/trial/unlock/fingerprints/CheckLicenseFingerprint.kt b/src/main/kotlin/app/revanced/patches/tasker/trial/unlock/fingerprints/CheckLicenseFingerprint.kt deleted file mode 100644 index d02ce9261..000000000 --- a/src/main/kotlin/app/revanced/patches/tasker/trial/unlock/fingerprints/CheckLicenseFingerprint.kt +++ /dev/null @@ -1,7 +0,0 @@ -package app.revanced.patches.tasker.trial.unlock.fingerprints - -import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint - -object CheckLicenseFingerprint : MethodFingerprint( - strings = listOf("Can't check license") -) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/tasker/trial/unlock/patch/UnlockLicensePatch.kt b/src/main/kotlin/app/revanced/patches/tasker/trial/unlock/patch/UnlockLicensePatch.kt deleted file mode 100644 index b96823f02..000000000 --- a/src/main/kotlin/app/revanced/patches/tasker/trial/unlock/patch/UnlockLicensePatch.kt +++ /dev/null @@ -1,30 +0,0 @@ -package app.revanced.patches.tasker.trial.unlock.patch - -import app.revanced.extensions.toErrorResult -import app.revanced.patcher.annotation.Description -import app.revanced.patcher.annotation.Name -import app.revanced.patcher.data.BytecodeContext -import app.revanced.patcher.extensions.InstructionExtensions.addInstruction -import app.revanced.patcher.patch.BytecodePatch -import app.revanced.patcher.patch.PatchResultSuccess -import app.revanced.patcher.patch.annotations.Patch -import app.revanced.patches.tasker.trial.unlock.annotations.UnlockTrialCompatibility -import app.revanced.patches.tasker.trial.unlock.fingerprints.CheckLicenseFingerprint - -@Patch -@Name("Unlock trial") -@Description("Unlocks the trial version.") -@UnlockTrialCompatibility -class UnlockLicensePatch : BytecodePatch( - listOf( - CheckLicenseFingerprint - ) -) { - override fun execute(context: BytecodeContext) = CheckLicenseFingerprint - .result - ?.mutableMethod - // Return the method early, which prompts the user with a non dismissible dialog, when the trial period is over. - ?.addInstruction(0, "return-void") - ?.let { PatchResultSuccess() } - ?: CheckLicenseFingerprint.toErrorResult() -} \ No newline at end of file From 2f78c387db60937fa9678edda20479fb219b75fa Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 9 Aug 2023 10:26:50 +0000 Subject: [PATCH 25/67] chore(release): 2.188.0-dev.10 [skip ci] # [2.188.0-dev.10](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.9...v2.188.0-dev.10) (2023-08-09) ### Features * **Tasker:** Remove `Unlock trial` patch ([8354a87](https://github.com/ReVanced/revanced-patches/commit/8354a879cfc6028820e2bb0e01d6f607e145c0f6)) --- CHANGELOG.md | 7 +++++++ gradle.properties | 2 +- patches.json | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a0a78ac0f..7c15f6752 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [2.188.0-dev.10](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.9...v2.188.0-dev.10) (2023-08-09) + + +### Features + +* **Tasker:** Remove `Unlock trial` patch ([8354a87](https://github.com/ReVanced/revanced-patches/commit/8354a879cfc6028820e2bb0e01d6f607e145c0f6)) + # [2.188.0-dev.9](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.8...v2.188.0-dev.9) (2023-08-07) diff --git a/gradle.properties b/gradle.properties index a7e3999b4..10430de3a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ org.gradle.parallel = true org.gradle.caching = true kotlin.code.style = official -version = 2.188.0-dev.9 +version = 2.188.0-dev.10 diff --git a/patches.json b/patches.json index 67542dc33..e5c5d587d 100644 --- a/patches.json +++ b/patches.json @@ -1 +1 @@ -[{"name":"Always autorepeat","description":"Always repeats the playing video again.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Auto claim channel points","description":"Automatically claim Channel Points.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Background play","description":"Enables playing music in the background.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Block audio ads","description":"Blocks audio ads in streams and VODs.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Block embedded ads","description":"Blocks embedded stream ads using services like TTV.lol or PurpleAdBlocker.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Block video ads","Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Block video ads","description":"Blocks video ads in streams and VODs.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Bypass certificate checks","description":"Bypasses certificate checks which prevent YouTube Music from working on Android Auto.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Change package name","description":"Changes the package name. Appends \".revanced\" to the package name by default.","version":"0.0.0","excluded":true,"options":[{"key":"packageName","title":"Package name","description":"The name of the package to rename the app to.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[]},{"name":"Client spoof","description":"Spoofs the client to allow playback.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Spoof signature verification"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Codecs unlock","description":"Adds more audio codec options. The new audio codecs usually result in better audio quality.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Comments","description":"Hides components related to comments.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings","LithoFilterPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Compact header","description":"Hides the music category bar at the top of the homepage.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Copy video url","description":"Adds buttons in player to copy video links.","version":"0.0.0","excluded":false,"options":[],"dependencies":["CopyVideoUrlResourcePatch","Player controls bytecode patch","Video information"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Custom branding","description":"Changes the YouTube launcher icon and name to your choice (defaults to ReVanced).","version":"0.0.0","excluded":false,"options":[{"key":"appName","title":"Application Name","description":"The name of the application it will show on your home screen.","required":true,"choices":null},{"key":"iconPath","title":"App Icon Path","description":"A path containing mipmap resource folders with icons.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Debug mode","description":"Enables Twitch\u0027s internal debugging mode.","version":"0.0.0","excluded":true,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":[]}]},{"name":"Disable Shorts on startup","description":"Disables playing YouTube Shorts when launching YouTube.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable Sync for Lemmy bottom sheet","description":"Disables the bottom sheet at the startup that asks you to signup to \"Sync for Lemmy\".","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":["v23.06.30-13:39"]},{"name":"com.laurencedawson.reddit_sync.pro","versions":[]},{"name":"com.laurencedawson.reddit_sync.dev","versions":[]}]},{"name":"Disable ads","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":[]}]},{"name":"Disable ads","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"o.o.joey","versions":[]}]},{"name":"Disable ads","description":"Disables ads in HexEditor.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.myprog.hexedit","versions":[]}]},{"name":"Disable auto captions","description":"Disable forced captions from being automatically enabled.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable fullscreen panels","description":"Disables video description and comments panel in fullscreen view.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable login requirement","description":"Do not force login.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Disable mandatory login","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.adobe.lrmobile","versions":[]}]},{"name":"Disable player popup panels","description":"Disables panels from appearing automatically when going into fullscreen (playlist or live chat).","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable screenshot popup","description":"Disables the popup that shows up when taking a screenshot.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Disable switching emoji to sticker in message input field","description":"Disables switching from emoji to sticker search mode in message input field","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Disable typing indicator","description":"Disables the indicator while typing a message","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Disable zoom haptics","description":"Disables haptics when zooming.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Downloads","description":"Removes download restrictions and changes the default path to download to.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Dynamic color","description":"Replaces the default Twitter Blue with the users Material You palette.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Enable android debugging","description":"Enables Android debugging capabilities.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Enable debugging","description":"Adds debugging options.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"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.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.spotify.lite","versions":[]}]},{"name":"Exclusive audio playback","description":"Enables the option to play music without video.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Export all activities","description":"Makes all app activities exportable.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"External downloads","description":"Adds support to download and save YouTube videos using an external app.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ExternalDownloadsResourcePatch","Player controls bytecode patch","Video information"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Feed filter","description":"Filters tiktok videos: removing ads, removing livestreams.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Fix google login","description":"Allows logging in with a Google account.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"HDR auto brightness","description":"Makes the brightness of HDR videos follow the system default.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide Shorts components","description":"Hides components from YouTube Shorts.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","LithoFilterPatch","HideShortsComponentsResourcePatch","ResourceMappingPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide ads","description":"Removes ads from the Reddit.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Hide subreddit banner","Hide comment ads"],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Hide ads","description":"Removes general ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["VerticalScrollPatch"],"compatiblePackages":[{"name":"com.vanced.android.youtube","versions":[]}]},{"name":"Hide ads","description":"Hides ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Json hook"],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Hide ads","description":"Removes ads from Inshorts.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.nis.app","versions":[]}]},{"name":"Hide ads","description":"Removes general ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Hide get premium","HideAdsResourcePatch","VerticalScrollPatch","FixBackToExitGesturePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide ads","description":"Removes ads from TikTok.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Hide ads","description":"Hides ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"jp.pxv.android","versions":[]}]},{"name":"Hide album cards","description":"Hides the album cards below the artist description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","AlbumCardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide autoplay button","description":"Hides the autoplay button in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","ResourceMappingPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide breaking news shelf","description":"Hides the breaking news shelf on the homepage tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","BreakingNewsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide captions button","description":"Hides the captions button on video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide cast button","description":"Hides the cast button in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Hide crowdfunding box","description":"Hides the crowdfunding box between the player and video description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","CrowdfundingBoxResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide email address","description":"Hides the email address in the account switcher.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideEmailAddressResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide endscreen cards","description":"Hides the suggested video cards at the end of a video in fullscreen.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideEndscreenCardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide filter bar","description":"Hides the filter bar in video feeds.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideFilterBarResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide floating microphone button","description":"Hides the floating microphone button which appears in search.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideFloatingMicrophoneButtonResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide get premium","description":"Removes all \"Get Premium\" evidences from the avatar menu.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Hide inbox ads","description":"Hides ads in inbox.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Hide info cards","description":"Hides info cards in videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideInfocardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide layout components","description":"Hides general layout components.","version":"0.0.0","excluded":false,"options":[],"dependencies":["LithoFilterPatch","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide load more button","description":"Hides the button under videos that loads similar videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideLoadMoreButtonResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide player buttons","description":"Adds the option to hide video player previous and next buttons.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide player overlay","description":"Hides the dark background overlay from the player when player controls are visible.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HidePlayerOverlayResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Hide premium navbar","description":"Removes the premium tab from the navbar.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ResourceMappingPatch"],"compatiblePackages":[{"name":"com.spotify.music","versions":[]}]},{"name":"Hide recommended users","description":"Hides recommended users.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Json hook"],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Hide seekbar","description":"Hides the seekbar.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","SeekbarColorBytecodePatch","SeekbarPreferencesPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide timeline ads","description":"Removes ads from the timeline.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.instagram.android","versions":["275.0.0.27.98"]}]},{"name":"Hide timestamp","description":"Hides timestamp in video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide video action buttons","description":"Adds the options to hide action buttons under a video.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ResourceMappingPatch","LithoFilterPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide watermark","description":"Hides creator\u0027s watermarks on videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Minimized playback","description":"Enables minimized and background playback.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Player type hook","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Minimized playback music","description":"Enables minimized playback on Kids music.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Music video ads","description":"Removes ads in the music player.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Navigation buttons","description":"Adds options to hide or change navigation buttons.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","ResolvePivotBarFingerprintsPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Old video quality menu","description":"Shows the old video quality with the advanced video quality options instead of the new one.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","OldVideoQualityMenuResourcePatch","LithoFilterPatch","BottomSheetHookPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.20.39","18.23.35"]}]},{"name":"Open links externally","description":"Open links outside of the app directly in your browser.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Permanent repeat","description":"Permanently remember your repeating preference even if the playlist ends or another track is played.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Permanent shuffle","description":"Permanently remember your shuffle preference even if the playlist ends or another track is played.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Playback speed","description":"Adds custom playback speeds and ability to remember the playback speed you chose in the video playback speed flyout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Custom playback speed","Remember playback speed"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.20.39","18.23.35"]}]},{"name":"Playback speed","description":"Enables the playback speed option for all videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Player flyout menu","description":"Hides player flyout menu items.","version":"0.0.0","excluded":false,"options":[],"dependencies":["LithoFilterPatch","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Predictive back gesture","description":"Enables the predictive back gesture introduced on Android 13.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Premium heading","description":"Shows premium branding on the home screen.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Premium icon reddit","description":"Unlocks premium Reddit app icons.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Pro unlock","description":"Unlocks pro-only functions.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.backdrops.wallpapers","versions":["4.52"]}]},{"name":"Promo code unlock","description":"Disables the validation of promo code. Any code will work to unlock all features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Spoof cert patch"],"compatiblePackages":[{"name":"de.dwd.warnapp","versions":[]}]},{"name":"Remember video quality","description":"Adds the ability to remember the video quality you chose in the video quality flyout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video information","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.19.35","18.20.39","18.23.35"]}]},{"name":"Remove ads","description":"Removes all ads from the app.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"net.binarymode.android.irplus","versions":[]}]},{"name":"Remove badge tab","description":"Removes the badge tab from the activity tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.sony.songpal.mdr","versions":[]}]},{"name":"Remove bootloader detection","description":"Removes the check for an unlocked bootloader.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.bmf.bmf2go","versions":[]}]},{"name":"Remove broadcasts restriction","description":"Enables starting/stopping NetGuard via broadcasts.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"eu.faircode.netguard","versions":[]}]},{"name":"Remove debugging detection","description":"Removes the USB and wireless debugging checks.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.scb.phone","versions":[]}]},{"name":"Remove device restrictions","description":"Removes restrictions from using the app on any device.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.recorder","versions":[]}]},{"name":"Remove notification badge","description":"Removes the red notification badge from the activity tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.sony.songpal.mdr","versions":[]}]},{"name":"Remove player controls background","description":"Removes the background from the video player controls.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Remove root detection","description":"Removes the check for root permissions.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.bmf.bmf2go","versions":[]}]},{"name":"Remove root detection","description":"Removes the check for root permissions and unlocked bootloader.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.oe.app","versions":[]}]},{"name":"Remove screen capture restriction","description":"Removes the restriction of capturing audio from apps that normally wouldn\u0027t allow it.","version":"0.0.0","excluded":true,"options":[],"dependencies":["RemoveCaptureRestrictionResourcePatch"],"compatiblePackages":[]},{"name":"Remove screenshot restriction","description":"Removes the restriction of taking screenshots in apps that normally wouldn\u0027t allow it.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Return YouTube Dislike","description":"Shows the dislike count of videos using the Return YouTube Dislike API.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video id hook","ReturnYouTubeDislikeResourcePatch","Player type hook"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Sanitize sharing links","description":"Removes (tracking) query parameters from the URLs when sharing links.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Seekbar tapping","description":"Enables tap-to-seek on the seekbar of the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","EnableSeekbarTappingResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Settings","description":"Adds settings menu to Twitch.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","SettingsResourcePatch"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":[]}]},{"name":"Settings","description":"Adds ReVanced settings to TikTok.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Show deleted messages","description":"Shows deleted chat messages behind a clickable spoiler.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Show seekbar","description":"Shows progress bar for all video.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Sim spoof","description":"Spoofs the information which is retrieved from the sim-card.","version":"0.0.0","excluded":true,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"SponsorBlock","description":"Integrates SponsorBlock which allows skipping video segments such as sponsored content.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video id hook","Video information","Player type hook","Player controls bytecode patch","SponsorBlockResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Spoof app version","description":"Tricks YouTube into thinking you are running an older version of the app. One of the side effects also includes restoring the old UI.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://baconreader.com/auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.onelouder.baconreader","versions":[]},{"name":"com.onelouder.baconreader.premium","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"dbrady://relay\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"free.reddit.news","versions":[]},{"name":"reddit.news","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://rubenmayayo.com\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.rubenmayayo.reddit","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://www.ccrama.me\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"me.ccrama.redditslide","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"redditisfun://auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.andrewshu.android.reddit","versions":[]},{"name":"com.andrewshu.android.redditdonation","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://redditsync/auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":[]},{"name":"com.laurencedawson.reddit_sync.pro","versions":[]},{"name":"com.laurencedawson.reddit_sync.dev","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"https://127.0.0.1:65023/authorize_callback\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"o.o.joey","versions":[]},{"name":"o.o.joey.pro","versions":[]},{"name":"o.o.joey.dev","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"infinity://localhost\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"ml.docilealligator.infinityforreddit","versions":[]}]},{"name":"Spoof signature","description":"Spoofs the signature of the app.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.oe.app","versions":[]}]},{"name":"Spoof wifi connection","description":"Spoofs an existing Wi-Fi connection.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Spotify theme","description":"Applies a custom theme.","version":"0.0.0","excluded":false,"options":[{"key":"backgroundColor","title":"Background color","description":"The background color. Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"accentColor","title":"Accent color","description":"The accent color (\u0027spotify green\u0027 by default). Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"accentPressedColor","title":"Pressed accent for the dark theme","description":"The color when accented buttons are pressed, by default slightly darker than accent. Can be a hex color or a resource reference.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.spotify.music","versions":[]}]},{"name":"Swipe controls","description":"Adds volume and brightness swipe controls.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Player type hook","SwipeControlsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Tablet mini player","description":"Enables the tablet mini player layout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Theme","description":"Applies a custom theme.","version":"0.0.0","excluded":false,"options":[{"key":"darkThemeBackgroundColor","title":"Background color for the dark theme","description":"The background color of the dark theme. Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"lightThemeBackgroundColor","title":"Background color for the light theme","description":"The background color of the light theme. Can be a hex color or a resource reference.","required":false,"choices":null}],"dependencies":["Litho color hook","SeekbarColorBytecodePatch","ThemeResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Unlock paid widgets","description":"Unlocks paid widgets of the app","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.dci.dev.androidtwelvewidgets","versions":[]}]},{"name":"Unlock plus","description":"Unlocks plus features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["SignatureDetectionPatch"],"compatiblePackages":[{"name":"com.microblink.photomath","versions":["8.20.0"]}]},{"name":"Unlock premium","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"io.yuka.android","versions":[]}]},{"name":"Unlock premium","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.adobe.lrmobile","versions":[]}]},{"name":"Unlock pro","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.candylink.openvpn","versions":[]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"ginlemon.iconpackstudio","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["SignatureVerificationPatch","LicenseValidationPatch"],"compatiblePackages":[{"name":"com.zombodroid.MemeGenerator","versions":["4.6364","4.6370","4.6375","4.6377"]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.wakdev.apps.nfctools.se","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ithebk.expensemanager","versions":[]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"co.windyapp.android","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"tv.trakt.trakt","versions":["1.1.1"]}]},{"name":"Unlock pro","description":"Unlocks all professional features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"org.totschnig.myexpenses","versions":["3.4.9"]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.awedea.nyx","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.vsco.cam","versions":[]}]},{"name":"Unlock themes","description":"Unlocks all themes that are inaccessible until a certain level is reached.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ticktick.task","versions":[]}]},{"name":"Unlock trial","description":"Unlocks the trial version.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"net.dinglisch.android.taskerm","versions":[]}]},{"name":"Upgrade button remover","description":"Removes the upgrade tab from the pivot bar.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Vanced MicroG support","description":"Allows YouTube ReVanced to run without root and under a different package name with Vanced MicroG.","version":"0.0.0","excluded":false,"options":[],"dependencies":["MicroGResourcePatch","Hide cast button","Client spoof"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Vanced MicroG support","description":"Allows YouTube Music ReVanced to run without root and under a different package name.","version":"0.0.0","excluded":false,"options":[],"dependencies":["MicroGResourcePatch"],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Video ads","description":"Removes ads in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Wide searchbar","description":"Replaces the search icon with a wide search bar. This will hide the YouTube logo when active.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]}] \ No newline at end of file +[{"name":"Always autorepeat","description":"Always repeats the playing video again.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Auto claim channel points","description":"Automatically claim Channel Points.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Background play","description":"Enables playing music in the background.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Block audio ads","description":"Blocks audio ads in streams and VODs.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Block embedded ads","description":"Blocks embedded stream ads using services like TTV.lol or PurpleAdBlocker.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Block video ads","Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Block video ads","description":"Blocks video ads in streams and VODs.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Bypass certificate checks","description":"Bypasses certificate checks which prevent YouTube Music from working on Android Auto.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Change package name","description":"Changes the package name. Appends \".revanced\" to the package name by default.","version":"0.0.0","excluded":true,"options":[{"key":"packageName","title":"Package name","description":"The name of the package to rename the app to.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[]},{"name":"Client spoof","description":"Spoofs the client to allow playback.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Spoof signature verification"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Codecs unlock","description":"Adds more audio codec options. The new audio codecs usually result in better audio quality.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Comments","description":"Hides components related to comments.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings","LithoFilterPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Compact header","description":"Hides the music category bar at the top of the homepage.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Copy video url","description":"Adds buttons in player to copy video links.","version":"0.0.0","excluded":false,"options":[],"dependencies":["CopyVideoUrlResourcePatch","Player controls bytecode patch","Video information"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Custom branding","description":"Changes the YouTube launcher icon and name to your choice (defaults to ReVanced).","version":"0.0.0","excluded":false,"options":[{"key":"appName","title":"Application Name","description":"The name of the application it will show on your home screen.","required":true,"choices":null},{"key":"iconPath","title":"App Icon Path","description":"A path containing mipmap resource folders with icons.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Debug mode","description":"Enables Twitch\u0027s internal debugging mode.","version":"0.0.0","excluded":true,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":[]}]},{"name":"Disable Shorts on startup","description":"Disables playing YouTube Shorts when launching YouTube.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable Sync for Lemmy bottom sheet","description":"Disables the bottom sheet at the startup that asks you to signup to \"Sync for Lemmy\".","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":["v23.06.30-13:39"]},{"name":"com.laurencedawson.reddit_sync.pro","versions":[]},{"name":"com.laurencedawson.reddit_sync.dev","versions":[]}]},{"name":"Disable ads","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":[]}]},{"name":"Disable ads","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"o.o.joey","versions":[]}]},{"name":"Disable ads","description":"Disables ads in HexEditor.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.myprog.hexedit","versions":[]}]},{"name":"Disable auto captions","description":"Disable forced captions from being automatically enabled.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable fullscreen panels","description":"Disables video description and comments panel in fullscreen view.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable login requirement","description":"Do not force login.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Disable mandatory login","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.adobe.lrmobile","versions":[]}]},{"name":"Disable player popup panels","description":"Disables panels from appearing automatically when going into fullscreen (playlist or live chat).","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable screenshot popup","description":"Disables the popup that shows up when taking a screenshot.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Disable switching emoji to sticker in message input field","description":"Disables switching from emoji to sticker search mode in message input field","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Disable typing indicator","description":"Disables the indicator while typing a message","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Disable zoom haptics","description":"Disables haptics when zooming.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Downloads","description":"Removes download restrictions and changes the default path to download to.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Dynamic color","description":"Replaces the default Twitter Blue with the users Material You palette.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Enable android debugging","description":"Enables Android debugging capabilities.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Enable debugging","description":"Adds debugging options.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"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.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.spotify.lite","versions":[]}]},{"name":"Exclusive audio playback","description":"Enables the option to play music without video.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Export all activities","description":"Makes all app activities exportable.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"External downloads","description":"Adds support to download and save YouTube videos using an external app.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ExternalDownloadsResourcePatch","Player controls bytecode patch","Video information"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Feed filter","description":"Filters tiktok videos: removing ads, removing livestreams.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Fix google login","description":"Allows logging in with a Google account.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"HDR auto brightness","description":"Makes the brightness of HDR videos follow the system default.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide Shorts components","description":"Hides components from YouTube Shorts.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","LithoFilterPatch","HideShortsComponentsResourcePatch","ResourceMappingPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide ads","description":"Removes ads from the Reddit.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Hide subreddit banner","Hide comment ads"],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Hide ads","description":"Removes general ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["VerticalScrollPatch"],"compatiblePackages":[{"name":"com.vanced.android.youtube","versions":[]}]},{"name":"Hide ads","description":"Hides ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Json hook"],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Hide ads","description":"Removes ads from Inshorts.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.nis.app","versions":[]}]},{"name":"Hide ads","description":"Removes general ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Hide get premium","HideAdsResourcePatch","VerticalScrollPatch","FixBackToExitGesturePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide ads","description":"Removes ads from TikTok.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Hide ads","description":"Hides ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"jp.pxv.android","versions":[]}]},{"name":"Hide album cards","description":"Hides the album cards below the artist description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","AlbumCardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide autoplay button","description":"Hides the autoplay button in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","ResourceMappingPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide breaking news shelf","description":"Hides the breaking news shelf on the homepage tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","BreakingNewsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide captions button","description":"Hides the captions button on video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide cast button","description":"Hides the cast button in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Hide crowdfunding box","description":"Hides the crowdfunding box between the player and video description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","CrowdfundingBoxResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide email address","description":"Hides the email address in the account switcher.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideEmailAddressResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide endscreen cards","description":"Hides the suggested video cards at the end of a video in fullscreen.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideEndscreenCardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide filter bar","description":"Hides the filter bar in video feeds.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideFilterBarResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide floating microphone button","description":"Hides the floating microphone button which appears in search.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideFloatingMicrophoneButtonResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide get premium","description":"Removes all \"Get Premium\" evidences from the avatar menu.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Hide inbox ads","description":"Hides ads in inbox.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Hide info cards","description":"Hides info cards in videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideInfocardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide layout components","description":"Hides general layout components.","version":"0.0.0","excluded":false,"options":[],"dependencies":["LithoFilterPatch","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide load more button","description":"Hides the button under videos that loads similar videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideLoadMoreButtonResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide player buttons","description":"Adds the option to hide video player previous and next buttons.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide player overlay","description":"Hides the dark background overlay from the player when player controls are visible.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HidePlayerOverlayResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Hide premium navbar","description":"Removes the premium tab from the navbar.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ResourceMappingPatch"],"compatiblePackages":[{"name":"com.spotify.music","versions":[]}]},{"name":"Hide recommended users","description":"Hides recommended users.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Json hook"],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Hide seekbar","description":"Hides the seekbar.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","SeekbarColorBytecodePatch","SeekbarPreferencesPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide timeline ads","description":"Removes ads from the timeline.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.instagram.android","versions":["275.0.0.27.98"]}]},{"name":"Hide timestamp","description":"Hides timestamp in video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide video action buttons","description":"Adds the options to hide action buttons under a video.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ResourceMappingPatch","LithoFilterPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide watermark","description":"Hides creator\u0027s watermarks on videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Minimized playback","description":"Enables minimized and background playback.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Player type hook","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Minimized playback music","description":"Enables minimized playback on Kids music.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Music video ads","description":"Removes ads in the music player.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Navigation buttons","description":"Adds options to hide or change navigation buttons.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","ResolvePivotBarFingerprintsPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Old video quality menu","description":"Shows the old video quality with the advanced video quality options instead of the new one.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","OldVideoQualityMenuResourcePatch","LithoFilterPatch","BottomSheetHookPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.20.39","18.23.35"]}]},{"name":"Open links externally","description":"Open links outside of the app directly in your browser.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Permanent repeat","description":"Permanently remember your repeating preference even if the playlist ends or another track is played.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Permanent shuffle","description":"Permanently remember your shuffle preference even if the playlist ends or another track is played.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Playback speed","description":"Adds custom playback speeds and ability to remember the playback speed you chose in the video playback speed flyout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Custom playback speed","Remember playback speed"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.20.39","18.23.35"]}]},{"name":"Playback speed","description":"Enables the playback speed option for all videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Player flyout menu","description":"Hides player flyout menu items.","version":"0.0.0","excluded":false,"options":[],"dependencies":["LithoFilterPatch","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Predictive back gesture","description":"Enables the predictive back gesture introduced on Android 13.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Premium heading","description":"Shows premium branding on the home screen.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Premium icon reddit","description":"Unlocks premium Reddit app icons.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Pro unlock","description":"Unlocks pro-only functions.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.backdrops.wallpapers","versions":["4.52"]}]},{"name":"Promo code unlock","description":"Disables the validation of promo code. Any code will work to unlock all features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Spoof cert patch"],"compatiblePackages":[{"name":"de.dwd.warnapp","versions":[]}]},{"name":"Remember video quality","description":"Adds the ability to remember the video quality you chose in the video quality flyout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video information","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.19.35","18.20.39","18.23.35"]}]},{"name":"Remove ads","description":"Removes all ads from the app.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"net.binarymode.android.irplus","versions":[]}]},{"name":"Remove badge tab","description":"Removes the badge tab from the activity tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.sony.songpal.mdr","versions":[]}]},{"name":"Remove bootloader detection","description":"Removes the check for an unlocked bootloader.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.bmf.bmf2go","versions":[]}]},{"name":"Remove broadcasts restriction","description":"Enables starting/stopping NetGuard via broadcasts.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"eu.faircode.netguard","versions":[]}]},{"name":"Remove debugging detection","description":"Removes the USB and wireless debugging checks.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.scb.phone","versions":[]}]},{"name":"Remove device restrictions","description":"Removes restrictions from using the app on any device.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.recorder","versions":[]}]},{"name":"Remove notification badge","description":"Removes the red notification badge from the activity tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.sony.songpal.mdr","versions":[]}]},{"name":"Remove player controls background","description":"Removes the background from the video player controls.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Remove root detection","description":"Removes the check for root permissions.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.bmf.bmf2go","versions":[]}]},{"name":"Remove root detection","description":"Removes the check for root permissions and unlocked bootloader.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.oe.app","versions":[]}]},{"name":"Remove screen capture restriction","description":"Removes the restriction of capturing audio from apps that normally wouldn\u0027t allow it.","version":"0.0.0","excluded":true,"options":[],"dependencies":["RemoveCaptureRestrictionResourcePatch"],"compatiblePackages":[]},{"name":"Remove screenshot restriction","description":"Removes the restriction of taking screenshots in apps that normally wouldn\u0027t allow it.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Return YouTube Dislike","description":"Shows the dislike count of videos using the Return YouTube Dislike API.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video id hook","ReturnYouTubeDislikeResourcePatch","Player type hook"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Sanitize sharing links","description":"Removes (tracking) query parameters from the URLs when sharing links.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Seekbar tapping","description":"Enables tap-to-seek on the seekbar of the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","EnableSeekbarTappingResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Settings","description":"Adds settings menu to Twitch.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","SettingsResourcePatch"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":[]}]},{"name":"Settings","description":"Adds ReVanced settings to TikTok.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Show deleted messages","description":"Shows deleted chat messages behind a clickable spoiler.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Show seekbar","description":"Shows progress bar for all video.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Sim spoof","description":"Spoofs the information which is retrieved from the sim-card.","version":"0.0.0","excluded":true,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"SponsorBlock","description":"Integrates SponsorBlock which allows skipping video segments such as sponsored content.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video id hook","Video information","Player type hook","Player controls bytecode patch","SponsorBlockResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Spoof app version","description":"Tricks YouTube into thinking you are running an older version of the app. One of the side effects also includes restoring the old UI.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://baconreader.com/auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.onelouder.baconreader","versions":[]},{"name":"com.onelouder.baconreader.premium","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"dbrady://relay\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"free.reddit.news","versions":[]},{"name":"reddit.news","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://rubenmayayo.com\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.rubenmayayo.reddit","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://www.ccrama.me\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"me.ccrama.redditslide","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"redditisfun://auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.andrewshu.android.reddit","versions":[]},{"name":"com.andrewshu.android.redditdonation","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://redditsync/auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":[]},{"name":"com.laurencedawson.reddit_sync.pro","versions":[]},{"name":"com.laurencedawson.reddit_sync.dev","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"https://127.0.0.1:65023/authorize_callback\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"o.o.joey","versions":[]},{"name":"o.o.joey.pro","versions":[]},{"name":"o.o.joey.dev","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"infinity://localhost\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"ml.docilealligator.infinityforreddit","versions":[]}]},{"name":"Spoof signature","description":"Spoofs the signature of the app.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.oe.app","versions":[]}]},{"name":"Spoof wifi connection","description":"Spoofs an existing Wi-Fi connection.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Spotify theme","description":"Applies a custom theme.","version":"0.0.0","excluded":false,"options":[{"key":"backgroundColor","title":"Background color","description":"The background color. Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"accentColor","title":"Accent color","description":"The accent color (\u0027spotify green\u0027 by default). Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"accentPressedColor","title":"Pressed accent for the dark theme","description":"The color when accented buttons are pressed, by default slightly darker than accent. Can be a hex color or a resource reference.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.spotify.music","versions":[]}]},{"name":"Swipe controls","description":"Adds volume and brightness swipe controls.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Player type hook","SwipeControlsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Tablet mini player","description":"Enables the tablet mini player layout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Theme","description":"Applies a custom theme.","version":"0.0.0","excluded":false,"options":[{"key":"darkThemeBackgroundColor","title":"Background color for the dark theme","description":"The background color of the dark theme. Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"lightThemeBackgroundColor","title":"Background color for the light theme","description":"The background color of the light theme. Can be a hex color or a resource reference.","required":false,"choices":null}],"dependencies":["Litho color hook","SeekbarColorBytecodePatch","ThemeResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Unlock paid widgets","description":"Unlocks paid widgets of the app","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.dci.dev.androidtwelvewidgets","versions":[]}]},{"name":"Unlock plus","description":"Unlocks plus features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["SignatureDetectionPatch"],"compatiblePackages":[{"name":"com.microblink.photomath","versions":["8.20.0"]}]},{"name":"Unlock premium","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"io.yuka.android","versions":[]}]},{"name":"Unlock premium","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.adobe.lrmobile","versions":[]}]},{"name":"Unlock pro","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.candylink.openvpn","versions":[]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"ginlemon.iconpackstudio","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["SignatureVerificationPatch","LicenseValidationPatch"],"compatiblePackages":[{"name":"com.zombodroid.MemeGenerator","versions":["4.6364","4.6370","4.6375","4.6377"]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.wakdev.apps.nfctools.se","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ithebk.expensemanager","versions":[]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"co.windyapp.android","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"tv.trakt.trakt","versions":["1.1.1"]}]},{"name":"Unlock pro","description":"Unlocks all professional features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"org.totschnig.myexpenses","versions":["3.4.9"]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.awedea.nyx","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.vsco.cam","versions":[]}]},{"name":"Unlock themes","description":"Unlocks all themes that are inaccessible until a certain level is reached.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ticktick.task","versions":[]}]},{"name":"Upgrade button remover","description":"Removes the upgrade tab from the pivot bar.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Vanced MicroG support","description":"Allows YouTube ReVanced to run without root and under a different package name with Vanced MicroG.","version":"0.0.0","excluded":false,"options":[],"dependencies":["MicroGResourcePatch","Hide cast button","Client spoof"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Vanced MicroG support","description":"Allows YouTube Music ReVanced to run without root and under a different package name.","version":"0.0.0","excluded":false,"options":[],"dependencies":["MicroGResourcePatch"],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Video ads","description":"Removes ads in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Wide searchbar","description":"Replaces the search icon with a wide search bar. This will hide the YouTube logo when active.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]}] \ No newline at end of file From 9c69f876902496c101eac295e581c15e02bfaf29 Mon Sep 17 00:00:00 2001 From: oSumAtrIX Date: Wed, 9 Aug 2023 17:55:18 +0200 Subject: [PATCH 26/67] fix(Client spoof): Remove exception from option Turning off will cause playback issues even when being subscribed to YouTube Premium --- .../playback/patch/SpoofSignatureVerificationResourcePatch.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/patch/SpoofSignatureVerificationResourcePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/patch/SpoofSignatureVerificationResourcePatch.kt index 42c5a3abb..c90bddb21 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/patch/SpoofSignatureVerificationResourcePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/patch/SpoofSignatureVerificationResourcePatch.kt @@ -8,7 +8,6 @@ import app.revanced.patcher.patch.annotations.DependsOn import app.revanced.patches.shared.mapping.misc.patch.ResourceMappingPatch import app.revanced.patches.shared.settings.preference.impl.StringResource import app.revanced.patches.shared.settings.preference.impl.SwitchPreference -import app.revanced.patches.youtube.misc.fix.playback.fingerprints.* import app.revanced.patches.youtube.misc.settings.bytecode.patch.SettingsPatch @DependsOn([SettingsPatch::class, ResourceMappingPatch::class]) @@ -27,7 +26,7 @@ class SpoofSignatureVerificationResourcePatch : ResourcePatch { + "• Seekbar thumbnails are always hidden"), StringResource("revanced_spoof_signature_verification_summary_off", "App signature not spoofed\\n\\nVideo playback may not work"), StringResource("revanced_spoof_signature_verification_user_dialog_message", - "If you do not have a YouTube Premium subscription,\\n\\nthen turning off this setting will cause video playback issues.") + "Turning off this setting will cause video playback issues.") ) ) From 4e81888daf17c77eb8a7b3fa7dac9aeed6b33385 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 9 Aug 2023 15:58:17 +0000 Subject: [PATCH 27/67] chore(release): 2.188.0-dev.11 [skip ci] # [2.188.0-dev.11](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.10...v2.188.0-dev.11) (2023-08-09) ### Bug Fixes * **Client spoof:** Remove exception from option ([9c69f87](https://github.com/ReVanced/revanced-patches/commit/9c69f876902496c101eac295e581c15e02bfaf29)) --- CHANGELOG.md | 7 +++++++ gradle.properties | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7c15f6752..79bcaabf6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [2.188.0-dev.11](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.10...v2.188.0-dev.11) (2023-08-09) + + +### Bug Fixes + +* **Client spoof:** Remove exception from option ([9c69f87](https://github.com/ReVanced/revanced-patches/commit/9c69f876902496c101eac295e581c15e02bfaf29)) + # [2.188.0-dev.10](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.9...v2.188.0-dev.10) (2023-08-09) diff --git a/gradle.properties b/gradle.properties index 10430de3a..d5e6ca4e4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ org.gradle.parallel = true org.gradle.caching = true kotlin.code.style = official -version = 2.188.0-dev.10 +version = 2.188.0-dev.11 From 94ed738515aa6e1a1d346b85b54805e68e36f94c Mon Sep 17 00:00:00 2001 From: Aunali321 <48486084+Aunali321@users.noreply.github.com> Date: Fri, 11 Aug 2023 00:11:31 +0530 Subject: [PATCH 28/67] feat: Add `Override certificate pinning` patch (#2781) Co-authored-by: oSumAtrIX --- .../patch/OverrideCertificatePinningPatch.kt | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 src/main/kotlin/app/revanced/patches/all/misc/network/patch/OverrideCertificatePinningPatch.kt diff --git a/src/main/kotlin/app/revanced/patches/all/misc/network/patch/OverrideCertificatePinningPatch.kt b/src/main/kotlin/app/revanced/patches/all/misc/network/patch/OverrideCertificatePinningPatch.kt new file mode 100644 index 000000000..0a3da723f --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/all/misc/network/patch/OverrideCertificatePinningPatch.kt @@ -0,0 +1,79 @@ +package app.revanced.patches.all.misc.network.patch + +import app.revanced.patcher.annotation.Description +import app.revanced.patcher.annotation.Name +import app.revanced.patcher.annotation.Version +import app.revanced.patcher.data.ResourceContext +import app.revanced.patcher.patch.* +import app.revanced.patcher.patch.annotations.DependsOn +import app.revanced.patcher.patch.annotations.Patch +import app.revanced.patches.all.misc.debugging.patch.EnableAndroidDebuggingPatch +import org.w3c.dom.Element +import java.io.File + +@Patch(false) +@Name("Override certificate pinning") +@Description("Overrides certificate pinning, allowing to inspect traffic via a proxy.") +@DependsOn([EnableAndroidDebuggingPatch::class]) +class OverrideCertificatePinningPatch : ResourcePatch { + + override fun execute(context: ResourceContext): PatchResult { + val resXmlDirectory = context["res/xml"] + + // Add android:networkSecurityConfig="@xml/network_security_config" and the "networkSecurityConfig" attribute if it does not exist. + context.xmlEditor["AndroidManifest.xml"].use { editor -> + val document = editor.file + val applicationNode = document.getElementsByTagName("application").item(0) as Element + + if (!applicationNode.hasAttribute("networkSecurityConfig")) { + document.createAttribute("android:networkSecurityConfig") + .apply { value = "@xml/network_security_config" }.let(applicationNode.attributes::setNamedItem) + } + } + + // In case the file does not exist create the "network_security_config.xml" file. + File(resXmlDirectory, "network_security_config.xml").apply { + if (!exists()) { + createNewFile() + writeText( + """ + + + + + + + + + + + + + + + + """ + ) + } else { + // If the file already exists. + readText().let { text -> + if (!text.contains("")) { + writeText( + text.replace( + "", + "\n\n" + ) + ) + } + } + + } + } + + return PatchResultSuccess() + } +} From 91833ac57c77c3d411e5f89525c66b23c002ab5a Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 10 Aug 2023 18:44:34 +0000 Subject: [PATCH 29/67] chore(release): 2.188.0-dev.12 [skip ci] # [2.188.0-dev.12](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.11...v2.188.0-dev.12) (2023-08-10) ### Features * Add `Override certificate pinning` patch ([#2781](https://github.com/ReVanced/revanced-patches/issues/2781)) ([94ed738](https://github.com/ReVanced/revanced-patches/commit/94ed738515aa6e1a1d346b85b54805e68e36f94c)) --- CHANGELOG.md | 7 +++++++ gradle.properties | 2 +- patches.json | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 79bcaabf6..7953c9fae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [2.188.0-dev.12](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.11...v2.188.0-dev.12) (2023-08-10) + + +### Features + +* Add `Override certificate pinning` patch ([#2781](https://github.com/ReVanced/revanced-patches/issues/2781)) ([94ed738](https://github.com/ReVanced/revanced-patches/commit/94ed738515aa6e1a1d346b85b54805e68e36f94c)) + # [2.188.0-dev.11](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.10...v2.188.0-dev.11) (2023-08-09) diff --git a/gradle.properties b/gradle.properties index d5e6ca4e4..8a2547280 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ org.gradle.parallel = true org.gradle.caching = true kotlin.code.style = official -version = 2.188.0-dev.11 +version = 2.188.0-dev.12 diff --git a/patches.json b/patches.json index e5c5d587d..a658ed217 100644 --- a/patches.json +++ b/patches.json @@ -1 +1 @@ -[{"name":"Always autorepeat","description":"Always repeats the playing video again.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Auto claim channel points","description":"Automatically claim Channel Points.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Background play","description":"Enables playing music in the background.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Block audio ads","description":"Blocks audio ads in streams and VODs.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Block embedded ads","description":"Blocks embedded stream ads using services like TTV.lol or PurpleAdBlocker.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Block video ads","Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Block video ads","description":"Blocks video ads in streams and VODs.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Bypass certificate checks","description":"Bypasses certificate checks which prevent YouTube Music from working on Android Auto.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Change package name","description":"Changes the package name. Appends \".revanced\" to the package name by default.","version":"0.0.0","excluded":true,"options":[{"key":"packageName","title":"Package name","description":"The name of the package to rename the app to.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[]},{"name":"Client spoof","description":"Spoofs the client to allow playback.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Spoof signature verification"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Codecs unlock","description":"Adds more audio codec options. The new audio codecs usually result in better audio quality.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Comments","description":"Hides components related to comments.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings","LithoFilterPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Compact header","description":"Hides the music category bar at the top of the homepage.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Copy video url","description":"Adds buttons in player to copy video links.","version":"0.0.0","excluded":false,"options":[],"dependencies":["CopyVideoUrlResourcePatch","Player controls bytecode patch","Video information"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Custom branding","description":"Changes the YouTube launcher icon and name to your choice (defaults to ReVanced).","version":"0.0.0","excluded":false,"options":[{"key":"appName","title":"Application Name","description":"The name of the application it will show on your home screen.","required":true,"choices":null},{"key":"iconPath","title":"App Icon Path","description":"A path containing mipmap resource folders with icons.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Debug mode","description":"Enables Twitch\u0027s internal debugging mode.","version":"0.0.0","excluded":true,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":[]}]},{"name":"Disable Shorts on startup","description":"Disables playing YouTube Shorts when launching YouTube.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable Sync for Lemmy bottom sheet","description":"Disables the bottom sheet at the startup that asks you to signup to \"Sync for Lemmy\".","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":["v23.06.30-13:39"]},{"name":"com.laurencedawson.reddit_sync.pro","versions":[]},{"name":"com.laurencedawson.reddit_sync.dev","versions":[]}]},{"name":"Disable ads","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":[]}]},{"name":"Disable ads","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"o.o.joey","versions":[]}]},{"name":"Disable ads","description":"Disables ads in HexEditor.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.myprog.hexedit","versions":[]}]},{"name":"Disable auto captions","description":"Disable forced captions from being automatically enabled.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable fullscreen panels","description":"Disables video description and comments panel in fullscreen view.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable login requirement","description":"Do not force login.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Disable mandatory login","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.adobe.lrmobile","versions":[]}]},{"name":"Disable player popup panels","description":"Disables panels from appearing automatically when going into fullscreen (playlist or live chat).","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable screenshot popup","description":"Disables the popup that shows up when taking a screenshot.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Disable switching emoji to sticker in message input field","description":"Disables switching from emoji to sticker search mode in message input field","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Disable typing indicator","description":"Disables the indicator while typing a message","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Disable zoom haptics","description":"Disables haptics when zooming.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Downloads","description":"Removes download restrictions and changes the default path to download to.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Dynamic color","description":"Replaces the default Twitter Blue with the users Material You palette.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Enable android debugging","description":"Enables Android debugging capabilities.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Enable debugging","description":"Adds debugging options.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"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.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.spotify.lite","versions":[]}]},{"name":"Exclusive audio playback","description":"Enables the option to play music without video.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Export all activities","description":"Makes all app activities exportable.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"External downloads","description":"Adds support to download and save YouTube videos using an external app.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ExternalDownloadsResourcePatch","Player controls bytecode patch","Video information"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Feed filter","description":"Filters tiktok videos: removing ads, removing livestreams.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Fix google login","description":"Allows logging in with a Google account.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"HDR auto brightness","description":"Makes the brightness of HDR videos follow the system default.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide Shorts components","description":"Hides components from YouTube Shorts.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","LithoFilterPatch","HideShortsComponentsResourcePatch","ResourceMappingPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide ads","description":"Removes ads from the Reddit.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Hide subreddit banner","Hide comment ads"],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Hide ads","description":"Removes general ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["VerticalScrollPatch"],"compatiblePackages":[{"name":"com.vanced.android.youtube","versions":[]}]},{"name":"Hide ads","description":"Hides ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Json hook"],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Hide ads","description":"Removes ads from Inshorts.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.nis.app","versions":[]}]},{"name":"Hide ads","description":"Removes general ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Hide get premium","HideAdsResourcePatch","VerticalScrollPatch","FixBackToExitGesturePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide ads","description":"Removes ads from TikTok.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Hide ads","description":"Hides ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"jp.pxv.android","versions":[]}]},{"name":"Hide album cards","description":"Hides the album cards below the artist description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","AlbumCardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide autoplay button","description":"Hides the autoplay button in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","ResourceMappingPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide breaking news shelf","description":"Hides the breaking news shelf on the homepage tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","BreakingNewsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide captions button","description":"Hides the captions button on video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide cast button","description":"Hides the cast button in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Hide crowdfunding box","description":"Hides the crowdfunding box between the player and video description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","CrowdfundingBoxResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide email address","description":"Hides the email address in the account switcher.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideEmailAddressResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide endscreen cards","description":"Hides the suggested video cards at the end of a video in fullscreen.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideEndscreenCardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide filter bar","description":"Hides the filter bar in video feeds.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideFilterBarResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide floating microphone button","description":"Hides the floating microphone button which appears in search.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideFloatingMicrophoneButtonResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide get premium","description":"Removes all \"Get Premium\" evidences from the avatar menu.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Hide inbox ads","description":"Hides ads in inbox.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Hide info cards","description":"Hides info cards in videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideInfocardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide layout components","description":"Hides general layout components.","version":"0.0.0","excluded":false,"options":[],"dependencies":["LithoFilterPatch","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide load more button","description":"Hides the button under videos that loads similar videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideLoadMoreButtonResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide player buttons","description":"Adds the option to hide video player previous and next buttons.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide player overlay","description":"Hides the dark background overlay from the player when player controls are visible.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HidePlayerOverlayResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Hide premium navbar","description":"Removes the premium tab from the navbar.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ResourceMappingPatch"],"compatiblePackages":[{"name":"com.spotify.music","versions":[]}]},{"name":"Hide recommended users","description":"Hides recommended users.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Json hook"],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Hide seekbar","description":"Hides the seekbar.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","SeekbarColorBytecodePatch","SeekbarPreferencesPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide timeline ads","description":"Removes ads from the timeline.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.instagram.android","versions":["275.0.0.27.98"]}]},{"name":"Hide timestamp","description":"Hides timestamp in video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide video action buttons","description":"Adds the options to hide action buttons under a video.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ResourceMappingPatch","LithoFilterPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide watermark","description":"Hides creator\u0027s watermarks on videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Minimized playback","description":"Enables minimized and background playback.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Player type hook","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Minimized playback music","description":"Enables minimized playback on Kids music.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Music video ads","description":"Removes ads in the music player.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Navigation buttons","description":"Adds options to hide or change navigation buttons.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","ResolvePivotBarFingerprintsPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Old video quality menu","description":"Shows the old video quality with the advanced video quality options instead of the new one.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","OldVideoQualityMenuResourcePatch","LithoFilterPatch","BottomSheetHookPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.20.39","18.23.35"]}]},{"name":"Open links externally","description":"Open links outside of the app directly in your browser.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Permanent repeat","description":"Permanently remember your repeating preference even if the playlist ends or another track is played.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Permanent shuffle","description":"Permanently remember your shuffle preference even if the playlist ends or another track is played.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Playback speed","description":"Adds custom playback speeds and ability to remember the playback speed you chose in the video playback speed flyout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Custom playback speed","Remember playback speed"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.20.39","18.23.35"]}]},{"name":"Playback speed","description":"Enables the playback speed option for all videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Player flyout menu","description":"Hides player flyout menu items.","version":"0.0.0","excluded":false,"options":[],"dependencies":["LithoFilterPatch","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Predictive back gesture","description":"Enables the predictive back gesture introduced on Android 13.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Premium heading","description":"Shows premium branding on the home screen.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Premium icon reddit","description":"Unlocks premium Reddit app icons.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Pro unlock","description":"Unlocks pro-only functions.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.backdrops.wallpapers","versions":["4.52"]}]},{"name":"Promo code unlock","description":"Disables the validation of promo code. Any code will work to unlock all features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Spoof cert patch"],"compatiblePackages":[{"name":"de.dwd.warnapp","versions":[]}]},{"name":"Remember video quality","description":"Adds the ability to remember the video quality you chose in the video quality flyout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video information","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.19.35","18.20.39","18.23.35"]}]},{"name":"Remove ads","description":"Removes all ads from the app.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"net.binarymode.android.irplus","versions":[]}]},{"name":"Remove badge tab","description":"Removes the badge tab from the activity tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.sony.songpal.mdr","versions":[]}]},{"name":"Remove bootloader detection","description":"Removes the check for an unlocked bootloader.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.bmf.bmf2go","versions":[]}]},{"name":"Remove broadcasts restriction","description":"Enables starting/stopping NetGuard via broadcasts.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"eu.faircode.netguard","versions":[]}]},{"name":"Remove debugging detection","description":"Removes the USB and wireless debugging checks.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.scb.phone","versions":[]}]},{"name":"Remove device restrictions","description":"Removes restrictions from using the app on any device.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.recorder","versions":[]}]},{"name":"Remove notification badge","description":"Removes the red notification badge from the activity tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.sony.songpal.mdr","versions":[]}]},{"name":"Remove player controls background","description":"Removes the background from the video player controls.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Remove root detection","description":"Removes the check for root permissions.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.bmf.bmf2go","versions":[]}]},{"name":"Remove root detection","description":"Removes the check for root permissions and unlocked bootloader.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.oe.app","versions":[]}]},{"name":"Remove screen capture restriction","description":"Removes the restriction of capturing audio from apps that normally wouldn\u0027t allow it.","version":"0.0.0","excluded":true,"options":[],"dependencies":["RemoveCaptureRestrictionResourcePatch"],"compatiblePackages":[]},{"name":"Remove screenshot restriction","description":"Removes the restriction of taking screenshots in apps that normally wouldn\u0027t allow it.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Return YouTube Dislike","description":"Shows the dislike count of videos using the Return YouTube Dislike API.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video id hook","ReturnYouTubeDislikeResourcePatch","Player type hook"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Sanitize sharing links","description":"Removes (tracking) query parameters from the URLs when sharing links.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Seekbar tapping","description":"Enables tap-to-seek on the seekbar of the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","EnableSeekbarTappingResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Settings","description":"Adds settings menu to Twitch.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","SettingsResourcePatch"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":[]}]},{"name":"Settings","description":"Adds ReVanced settings to TikTok.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Show deleted messages","description":"Shows deleted chat messages behind a clickable spoiler.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Show seekbar","description":"Shows progress bar for all video.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Sim spoof","description":"Spoofs the information which is retrieved from the sim-card.","version":"0.0.0","excluded":true,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"SponsorBlock","description":"Integrates SponsorBlock which allows skipping video segments such as sponsored content.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video id hook","Video information","Player type hook","Player controls bytecode patch","SponsorBlockResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Spoof app version","description":"Tricks YouTube into thinking you are running an older version of the app. One of the side effects also includes restoring the old UI.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://baconreader.com/auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.onelouder.baconreader","versions":[]},{"name":"com.onelouder.baconreader.premium","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"dbrady://relay\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"free.reddit.news","versions":[]},{"name":"reddit.news","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://rubenmayayo.com\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.rubenmayayo.reddit","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://www.ccrama.me\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"me.ccrama.redditslide","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"redditisfun://auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.andrewshu.android.reddit","versions":[]},{"name":"com.andrewshu.android.redditdonation","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://redditsync/auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":[]},{"name":"com.laurencedawson.reddit_sync.pro","versions":[]},{"name":"com.laurencedawson.reddit_sync.dev","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"https://127.0.0.1:65023/authorize_callback\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"o.o.joey","versions":[]},{"name":"o.o.joey.pro","versions":[]},{"name":"o.o.joey.dev","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"infinity://localhost\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"ml.docilealligator.infinityforreddit","versions":[]}]},{"name":"Spoof signature","description":"Spoofs the signature of the app.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.oe.app","versions":[]}]},{"name":"Spoof wifi connection","description":"Spoofs an existing Wi-Fi connection.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Spotify theme","description":"Applies a custom theme.","version":"0.0.0","excluded":false,"options":[{"key":"backgroundColor","title":"Background color","description":"The background color. Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"accentColor","title":"Accent color","description":"The accent color (\u0027spotify green\u0027 by default). Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"accentPressedColor","title":"Pressed accent for the dark theme","description":"The color when accented buttons are pressed, by default slightly darker than accent. Can be a hex color or a resource reference.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.spotify.music","versions":[]}]},{"name":"Swipe controls","description":"Adds volume and brightness swipe controls.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Player type hook","SwipeControlsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Tablet mini player","description":"Enables the tablet mini player layout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Theme","description":"Applies a custom theme.","version":"0.0.0","excluded":false,"options":[{"key":"darkThemeBackgroundColor","title":"Background color for the dark theme","description":"The background color of the dark theme. Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"lightThemeBackgroundColor","title":"Background color for the light theme","description":"The background color of the light theme. Can be a hex color or a resource reference.","required":false,"choices":null}],"dependencies":["Litho color hook","SeekbarColorBytecodePatch","ThemeResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Unlock paid widgets","description":"Unlocks paid widgets of the app","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.dci.dev.androidtwelvewidgets","versions":[]}]},{"name":"Unlock plus","description":"Unlocks plus features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["SignatureDetectionPatch"],"compatiblePackages":[{"name":"com.microblink.photomath","versions":["8.20.0"]}]},{"name":"Unlock premium","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"io.yuka.android","versions":[]}]},{"name":"Unlock premium","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.adobe.lrmobile","versions":[]}]},{"name":"Unlock pro","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.candylink.openvpn","versions":[]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"ginlemon.iconpackstudio","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["SignatureVerificationPatch","LicenseValidationPatch"],"compatiblePackages":[{"name":"com.zombodroid.MemeGenerator","versions":["4.6364","4.6370","4.6375","4.6377"]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.wakdev.apps.nfctools.se","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ithebk.expensemanager","versions":[]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"co.windyapp.android","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"tv.trakt.trakt","versions":["1.1.1"]}]},{"name":"Unlock pro","description":"Unlocks all professional features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"org.totschnig.myexpenses","versions":["3.4.9"]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.awedea.nyx","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.vsco.cam","versions":[]}]},{"name":"Unlock themes","description":"Unlocks all themes that are inaccessible until a certain level is reached.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ticktick.task","versions":[]}]},{"name":"Upgrade button remover","description":"Removes the upgrade tab from the pivot bar.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Vanced MicroG support","description":"Allows YouTube ReVanced to run without root and under a different package name with Vanced MicroG.","version":"0.0.0","excluded":false,"options":[],"dependencies":["MicroGResourcePatch","Hide cast button","Client spoof"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Vanced MicroG support","description":"Allows YouTube Music ReVanced to run without root and under a different package name.","version":"0.0.0","excluded":false,"options":[],"dependencies":["MicroGResourcePatch"],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Video ads","description":"Removes ads in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Wide searchbar","description":"Replaces the search icon with a wide search bar. This will hide the YouTube logo when active.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]}] \ No newline at end of file +[{"name":"Always autorepeat","description":"Always repeats the playing video again.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Auto claim channel points","description":"Automatically claim Channel Points.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Background play","description":"Enables playing music in the background.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Block audio ads","description":"Blocks audio ads in streams and VODs.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Block embedded ads","description":"Blocks embedded stream ads using services like TTV.lol or PurpleAdBlocker.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Block video ads","Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Block video ads","description":"Blocks video ads in streams and VODs.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Bypass certificate checks","description":"Bypasses certificate checks which prevent YouTube Music from working on Android Auto.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Change package name","description":"Changes the package name. Appends \".revanced\" to the package name by default.","version":"0.0.0","excluded":true,"options":[{"key":"packageName","title":"Package name","description":"The name of the package to rename the app to.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[]},{"name":"Client spoof","description":"Spoofs the client to allow playback.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Spoof signature verification"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Codecs unlock","description":"Adds more audio codec options. The new audio codecs usually result in better audio quality.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Comments","description":"Hides components related to comments.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings","LithoFilterPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Compact header","description":"Hides the music category bar at the top of the homepage.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Copy video url","description":"Adds buttons in player to copy video links.","version":"0.0.0","excluded":false,"options":[],"dependencies":["CopyVideoUrlResourcePatch","Player controls bytecode patch","Video information"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Custom branding","description":"Changes the YouTube launcher icon and name to your choice (defaults to ReVanced).","version":"0.0.0","excluded":false,"options":[{"key":"appName","title":"Application Name","description":"The name of the application it will show on your home screen.","required":true,"choices":null},{"key":"iconPath","title":"App Icon Path","description":"A path containing mipmap resource folders with icons.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Debug mode","description":"Enables Twitch\u0027s internal debugging mode.","version":"0.0.0","excluded":true,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":[]}]},{"name":"Disable Shorts on startup","description":"Disables playing YouTube Shorts when launching YouTube.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable Sync for Lemmy bottom sheet","description":"Disables the bottom sheet at the startup that asks you to signup to \"Sync for Lemmy\".","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":["v23.06.30-13:39"]},{"name":"com.laurencedawson.reddit_sync.pro","versions":[]},{"name":"com.laurencedawson.reddit_sync.dev","versions":[]}]},{"name":"Disable ads","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":[]}]},{"name":"Disable ads","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"o.o.joey","versions":[]}]},{"name":"Disable ads","description":"Disables ads in HexEditor.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.myprog.hexedit","versions":[]}]},{"name":"Disable auto captions","description":"Disable forced captions from being automatically enabled.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable fullscreen panels","description":"Disables video description and comments panel in fullscreen view.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable login requirement","description":"Do not force login.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Disable mandatory login","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.adobe.lrmobile","versions":[]}]},{"name":"Disable player popup panels","description":"Disables panels from appearing automatically when going into fullscreen (playlist or live chat).","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable screenshot popup","description":"Disables the popup that shows up when taking a screenshot.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Disable switching emoji to sticker in message input field","description":"Disables switching from emoji to sticker search mode in message input field","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Disable typing indicator","description":"Disables the indicator while typing a message","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Disable zoom haptics","description":"Disables haptics when zooming.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Downloads","description":"Removes download restrictions and changes the default path to download to.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Dynamic color","description":"Replaces the default Twitter Blue with the users Material You palette.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Enable android debugging","description":"Enables Android debugging capabilities.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Enable debugging","description":"Adds debugging options.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"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.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.spotify.lite","versions":[]}]},{"name":"Exclusive audio playback","description":"Enables the option to play music without video.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Export all activities","description":"Makes all app activities exportable.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"External downloads","description":"Adds support to download and save YouTube videos using an external app.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ExternalDownloadsResourcePatch","Player controls bytecode patch","Video information"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Feed filter","description":"Filters tiktok videos: removing ads, removing livestreams.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Fix google login","description":"Allows logging in with a Google account.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"HDR auto brightness","description":"Makes the brightness of HDR videos follow the system default.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide Shorts components","description":"Hides components from YouTube Shorts.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","LithoFilterPatch","HideShortsComponentsResourcePatch","ResourceMappingPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide ads","description":"Removes ads from the Reddit.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Hide subreddit banner","Hide comment ads"],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Hide ads","description":"Removes general ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["VerticalScrollPatch"],"compatiblePackages":[{"name":"com.vanced.android.youtube","versions":[]}]},{"name":"Hide ads","description":"Hides ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Json hook"],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Hide ads","description":"Removes ads from Inshorts.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.nis.app","versions":[]}]},{"name":"Hide ads","description":"Removes general ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Hide get premium","HideAdsResourcePatch","VerticalScrollPatch","FixBackToExitGesturePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide ads","description":"Removes ads from TikTok.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Hide ads","description":"Hides ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"jp.pxv.android","versions":[]}]},{"name":"Hide album cards","description":"Hides the album cards below the artist description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","AlbumCardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide autoplay button","description":"Hides the autoplay button in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","ResourceMappingPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide breaking news shelf","description":"Hides the breaking news shelf on the homepage tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","BreakingNewsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide captions button","description":"Hides the captions button on video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide cast button","description":"Hides the cast button in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Hide crowdfunding box","description":"Hides the crowdfunding box between the player and video description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","CrowdfundingBoxResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide email address","description":"Hides the email address in the account switcher.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideEmailAddressResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide endscreen cards","description":"Hides the suggested video cards at the end of a video in fullscreen.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideEndscreenCardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide filter bar","description":"Hides the filter bar in video feeds.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideFilterBarResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide floating microphone button","description":"Hides the floating microphone button which appears in search.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideFloatingMicrophoneButtonResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide get premium","description":"Removes all \"Get Premium\" evidences from the avatar menu.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Hide inbox ads","description":"Hides ads in inbox.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Hide info cards","description":"Hides info cards in videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideInfocardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide layout components","description":"Hides general layout components.","version":"0.0.0","excluded":false,"options":[],"dependencies":["LithoFilterPatch","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide load more button","description":"Hides the button under videos that loads similar videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideLoadMoreButtonResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide player buttons","description":"Adds the option to hide video player previous and next buttons.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide player overlay","description":"Hides the dark background overlay from the player when player controls are visible.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HidePlayerOverlayResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Hide premium navbar","description":"Removes the premium tab from the navbar.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ResourceMappingPatch"],"compatiblePackages":[{"name":"com.spotify.music","versions":[]}]},{"name":"Hide recommended users","description":"Hides recommended users.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Json hook"],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Hide seekbar","description":"Hides the seekbar.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","SeekbarColorBytecodePatch","SeekbarPreferencesPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide timeline ads","description":"Removes ads from the timeline.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.instagram.android","versions":["275.0.0.27.98"]}]},{"name":"Hide timestamp","description":"Hides timestamp in video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide video action buttons","description":"Adds the options to hide action buttons under a video.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ResourceMappingPatch","LithoFilterPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide watermark","description":"Hides creator\u0027s watermarks on videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Minimized playback","description":"Enables minimized and background playback.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Player type hook","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Minimized playback music","description":"Enables minimized playback on Kids music.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Music video ads","description":"Removes ads in the music player.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Navigation buttons","description":"Adds options to hide or change navigation buttons.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","ResolvePivotBarFingerprintsPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Old video quality menu","description":"Shows the old video quality with the advanced video quality options instead of the new one.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","OldVideoQualityMenuResourcePatch","LithoFilterPatch","BottomSheetHookPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.20.39","18.23.35"]}]},{"name":"Open links externally","description":"Open links outside of the app directly in your browser.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Override certificate pinning","description":"Overrides certificate pinning, allowing to inspect traffic via a proxy.","version":"0.0.0","excluded":true,"options":[],"dependencies":["Enable android debugging"],"compatiblePackages":[]},{"name":"Permanent repeat","description":"Permanently remember your repeating preference even if the playlist ends or another track is played.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Permanent shuffle","description":"Permanently remember your shuffle preference even if the playlist ends or another track is played.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Playback speed","description":"Adds custom playback speeds and ability to remember the playback speed you chose in the video playback speed flyout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Custom playback speed","Remember playback speed"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.20.39","18.23.35"]}]},{"name":"Playback speed","description":"Enables the playback speed option for all videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Player flyout menu","description":"Hides player flyout menu items.","version":"0.0.0","excluded":false,"options":[],"dependencies":["LithoFilterPatch","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Predictive back gesture","description":"Enables the predictive back gesture introduced on Android 13.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Premium heading","description":"Shows premium branding on the home screen.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Premium icon reddit","description":"Unlocks premium Reddit app icons.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Pro unlock","description":"Unlocks pro-only functions.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.backdrops.wallpapers","versions":["4.52"]}]},{"name":"Promo code unlock","description":"Disables the validation of promo code. Any code will work to unlock all features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Spoof cert patch"],"compatiblePackages":[{"name":"de.dwd.warnapp","versions":[]}]},{"name":"Remember video quality","description":"Adds the ability to remember the video quality you chose in the video quality flyout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video information","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.19.35","18.20.39","18.23.35"]}]},{"name":"Remove ads","description":"Removes all ads from the app.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"net.binarymode.android.irplus","versions":[]}]},{"name":"Remove badge tab","description":"Removes the badge tab from the activity tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.sony.songpal.mdr","versions":[]}]},{"name":"Remove bootloader detection","description":"Removes the check for an unlocked bootloader.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.bmf.bmf2go","versions":[]}]},{"name":"Remove broadcasts restriction","description":"Enables starting/stopping NetGuard via broadcasts.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"eu.faircode.netguard","versions":[]}]},{"name":"Remove debugging detection","description":"Removes the USB and wireless debugging checks.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.scb.phone","versions":[]}]},{"name":"Remove device restrictions","description":"Removes restrictions from using the app on any device.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.recorder","versions":[]}]},{"name":"Remove notification badge","description":"Removes the red notification badge from the activity tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.sony.songpal.mdr","versions":[]}]},{"name":"Remove player controls background","description":"Removes the background from the video player controls.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Remove root detection","description":"Removes the check for root permissions.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.bmf.bmf2go","versions":[]}]},{"name":"Remove root detection","description":"Removes the check for root permissions and unlocked bootloader.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.oe.app","versions":[]}]},{"name":"Remove screen capture restriction","description":"Removes the restriction of capturing audio from apps that normally wouldn\u0027t allow it.","version":"0.0.0","excluded":true,"options":[],"dependencies":["RemoveCaptureRestrictionResourcePatch"],"compatiblePackages":[]},{"name":"Remove screenshot restriction","description":"Removes the restriction of taking screenshots in apps that normally wouldn\u0027t allow it.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Return YouTube Dislike","description":"Shows the dislike count of videos using the Return YouTube Dislike API.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video id hook","ReturnYouTubeDislikeResourcePatch","Player type hook"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Sanitize sharing links","description":"Removes (tracking) query parameters from the URLs when sharing links.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Seekbar tapping","description":"Enables tap-to-seek on the seekbar of the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","EnableSeekbarTappingResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Settings","description":"Adds settings menu to Twitch.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","SettingsResourcePatch"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":[]}]},{"name":"Settings","description":"Adds ReVanced settings to TikTok.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Show deleted messages","description":"Shows deleted chat messages behind a clickable spoiler.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Show seekbar","description":"Shows progress bar for all video.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Sim spoof","description":"Spoofs the information which is retrieved from the sim-card.","version":"0.0.0","excluded":true,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"SponsorBlock","description":"Integrates SponsorBlock which allows skipping video segments such as sponsored content.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video id hook","Video information","Player type hook","Player controls bytecode patch","SponsorBlockResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Spoof app version","description":"Tricks YouTube into thinking you are running an older version of the app. One of the side effects also includes restoring the old UI.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://baconreader.com/auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.onelouder.baconreader","versions":[]},{"name":"com.onelouder.baconreader.premium","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"dbrady://relay\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"free.reddit.news","versions":[]},{"name":"reddit.news","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://rubenmayayo.com\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.rubenmayayo.reddit","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://www.ccrama.me\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"me.ccrama.redditslide","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"redditisfun://auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.andrewshu.android.reddit","versions":[]},{"name":"com.andrewshu.android.redditdonation","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://redditsync/auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":[]},{"name":"com.laurencedawson.reddit_sync.pro","versions":[]},{"name":"com.laurencedawson.reddit_sync.dev","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"https://127.0.0.1:65023/authorize_callback\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"o.o.joey","versions":[]},{"name":"o.o.joey.pro","versions":[]},{"name":"o.o.joey.dev","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"infinity://localhost\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"ml.docilealligator.infinityforreddit","versions":[]}]},{"name":"Spoof signature","description":"Spoofs the signature of the app.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.oe.app","versions":[]}]},{"name":"Spoof wifi connection","description":"Spoofs an existing Wi-Fi connection.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Spotify theme","description":"Applies a custom theme.","version":"0.0.0","excluded":false,"options":[{"key":"backgroundColor","title":"Background color","description":"The background color. Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"accentColor","title":"Accent color","description":"The accent color (\u0027spotify green\u0027 by default). Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"accentPressedColor","title":"Pressed accent for the dark theme","description":"The color when accented buttons are pressed, by default slightly darker than accent. Can be a hex color or a resource reference.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.spotify.music","versions":[]}]},{"name":"Swipe controls","description":"Adds volume and brightness swipe controls.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Player type hook","SwipeControlsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Tablet mini player","description":"Enables the tablet mini player layout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Theme","description":"Applies a custom theme.","version":"0.0.0","excluded":false,"options":[{"key":"darkThemeBackgroundColor","title":"Background color for the dark theme","description":"The background color of the dark theme. Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"lightThemeBackgroundColor","title":"Background color for the light theme","description":"The background color of the light theme. Can be a hex color or a resource reference.","required":false,"choices":null}],"dependencies":["Litho color hook","SeekbarColorBytecodePatch","ThemeResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Unlock paid widgets","description":"Unlocks paid widgets of the app","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.dci.dev.androidtwelvewidgets","versions":[]}]},{"name":"Unlock plus","description":"Unlocks plus features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["SignatureDetectionPatch"],"compatiblePackages":[{"name":"com.microblink.photomath","versions":["8.20.0"]}]},{"name":"Unlock premium","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"io.yuka.android","versions":[]}]},{"name":"Unlock premium","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.adobe.lrmobile","versions":[]}]},{"name":"Unlock pro","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.candylink.openvpn","versions":[]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"ginlemon.iconpackstudio","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["SignatureVerificationPatch","LicenseValidationPatch"],"compatiblePackages":[{"name":"com.zombodroid.MemeGenerator","versions":["4.6364","4.6370","4.6375","4.6377"]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.wakdev.apps.nfctools.se","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ithebk.expensemanager","versions":[]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"co.windyapp.android","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"tv.trakt.trakt","versions":["1.1.1"]}]},{"name":"Unlock pro","description":"Unlocks all professional features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"org.totschnig.myexpenses","versions":["3.4.9"]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.awedea.nyx","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.vsco.cam","versions":[]}]},{"name":"Unlock themes","description":"Unlocks all themes that are inaccessible until a certain level is reached.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ticktick.task","versions":[]}]},{"name":"Upgrade button remover","description":"Removes the upgrade tab from the pivot bar.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Vanced MicroG support","description":"Allows YouTube ReVanced to run without root and under a different package name with Vanced MicroG.","version":"0.0.0","excluded":false,"options":[],"dependencies":["MicroGResourcePatch","Hide cast button","Client spoof"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Vanced MicroG support","description":"Allows YouTube Music ReVanced to run without root and under a different package name.","version":"0.0.0","excluded":false,"options":[],"dependencies":["MicroGResourcePatch"],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Video ads","description":"Removes ads in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Wide searchbar","description":"Replaces the search icon with a wide search bar. This will hide the YouTube logo when active.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]}] \ No newline at end of file From 082e067338026d05046ed5f398a1261aa20d3cb3 Mon Sep 17 00:00:00 2001 From: KAZI MMT <82371061+kazimmt@users.noreply.github.com> Date: Sun, 13 Aug 2023 17:40:01 +0600 Subject: [PATCH 30/67] feat(YouTube - External downloads): Recommend Seal instead of PowerTube (#2803) --- .../resource/patch/ExternalDownloadsResourcePatch.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/app/revanced/patches/youtube/interaction/downloads/resource/patch/ExternalDownloadsResourcePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/interaction/downloads/resource/patch/ExternalDownloadsResourcePatch.kt index e50b8cc9f..77b4763a8 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/interaction/downloads/resource/patch/ExternalDownloadsResourcePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/interaction/downloads/resource/patch/ExternalDownloadsResourcePatch.kt @@ -30,7 +30,7 @@ class ExternalDownloadsResourcePatch : ResourcePatch { TextPreference( "revanced_external_downloader_name", StringResource("revanced_external_downloader_name_title", "Downloader package name"), - StringResource("revanced_external_downloader_name_summary", "Package name of your installed external downloader app, such as NewPipe or PowerTube"), + StringResource("revanced_external_downloader_name_summary", "Package name of your installed external downloader app, such as NewPipe or Seal"), InputType.TEXT ) ), @@ -50,4 +50,4 @@ class ExternalDownloadsResourcePatch : ResourcePatch { return PatchResultSuccess() } -} \ No newline at end of file +} From d8ef855d5d699dd61957889f8c517e5931fbf837 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sun, 13 Aug 2023 11:42:46 +0000 Subject: [PATCH 31/67] chore(release): 2.188.0-dev.13 [skip ci] # [2.188.0-dev.13](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.12...v2.188.0-dev.13) (2023-08-13) ### Features * **YouTube - External downloads:** Recommend Seal instead of PowerTube ([#2803](https://github.com/ReVanced/revanced-patches/issues/2803)) ([082e067](https://github.com/ReVanced/revanced-patches/commit/082e067338026d05046ed5f398a1261aa20d3cb3)) --- CHANGELOG.md | 7 +++++++ gradle.properties | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7953c9fae..f94959d44 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [2.188.0-dev.13](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.12...v2.188.0-dev.13) (2023-08-13) + + +### Features + +* **YouTube - External downloads:** Recommend Seal instead of PowerTube ([#2803](https://github.com/ReVanced/revanced-patches/issues/2803)) ([082e067](https://github.com/ReVanced/revanced-patches/commit/082e067338026d05046ed5f398a1261aa20d3cb3)) + # [2.188.0-dev.12](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.11...v2.188.0-dev.12) (2023-08-10) diff --git a/gradle.properties b/gradle.properties index 8a2547280..09630d5f3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ org.gradle.parallel = true org.gradle.caching = true kotlin.code.style = official -version = 2.188.0-dev.12 +version = 2.188.0-dev.13 From fe94013a2235953b32fed6e0710a252698a264b3 Mon Sep 17 00:00:00 2001 From: oSumAtrIX Date: Sun, 13 Aug 2023 18:36:07 +0200 Subject: [PATCH 32/67] fix: allow using `PreferenceScreen` outside of current module --- .../patches/shared/settings/preference/BasePreference.kt | 2 +- .../patches/shared/settings/preference/BaseResource.kt | 2 +- .../shared/settings/preference/DefaultBasePreference.kt | 2 +- .../patches/shared/settings/preference/impl/ArrayResource.kt | 2 +- .../patches/shared/settings/preference/impl/ListPreference.kt | 2 +- .../settings/preference/impl/NonInteractivePreference.kt | 2 +- .../patches/shared/settings/preference/impl/Preference.kt | 4 ++-- .../shared/settings/preference/impl/PreferenceCategory.kt | 2 +- .../shared/settings/preference/impl/PreferenceScreen.kt | 2 +- .../patches/shared/settings/preference/impl/StringResource.kt | 2 +- .../shared/settings/preference/impl/SwitchPreference.kt | 2 +- .../patches/shared/settings/preference/impl/TextPreference.kt | 2 +- .../patches/shared/settings/util/AbstractPreferenceScreen.kt | 2 +- .../youtube/misc/settings/bytecode/patch/SettingsPatch.kt | 2 +- 14 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/main/kotlin/app/revanced/patches/shared/settings/preference/BasePreference.kt b/src/main/kotlin/app/revanced/patches/shared/settings/preference/BasePreference.kt index 09fe4bc61..4fc84105d 100644 --- a/src/main/kotlin/app/revanced/patches/shared/settings/preference/BasePreference.kt +++ b/src/main/kotlin/app/revanced/patches/shared/settings/preference/BasePreference.kt @@ -12,7 +12,7 @@ import org.w3c.dom.Element * @param tag The tag of the preference. * @param summary The summary of the preference. */ -internal abstract class BasePreference( +abstract class BasePreference( val key: String?, val title: StringResource, val summary: StringResource? = null, diff --git a/src/main/kotlin/app/revanced/patches/shared/settings/preference/BaseResource.kt b/src/main/kotlin/app/revanced/patches/shared/settings/preference/BaseResource.kt index 61a9b35a2..682ccb33a 100644 --- a/src/main/kotlin/app/revanced/patches/shared/settings/preference/BaseResource.kt +++ b/src/main/kotlin/app/revanced/patches/shared/settings/preference/BaseResource.kt @@ -9,7 +9,7 @@ import org.w3c.dom.Element * @param name The name of the resource. * @param tag The tag of the resource. */ -internal abstract class BaseResource( +abstract class BaseResource( val name: String, val tag: String ) { diff --git a/src/main/kotlin/app/revanced/patches/shared/settings/preference/DefaultBasePreference.kt b/src/main/kotlin/app/revanced/patches/shared/settings/preference/DefaultBasePreference.kt index 64d35878c..9371d48f8 100644 --- a/src/main/kotlin/app/revanced/patches/shared/settings/preference/DefaultBasePreference.kt +++ b/src/main/kotlin/app/revanced/patches/shared/settings/preference/DefaultBasePreference.kt @@ -12,7 +12,7 @@ import org.w3c.dom.Document * @param summary The summary of the preference. * @param default The default value of the preference. */ -internal abstract class DefaultBasePreference( +abstract class DefaultBasePreference( key: String?, title: StringResource, summary: StringResource? = null, diff --git a/src/main/kotlin/app/revanced/patches/shared/settings/preference/impl/ArrayResource.kt b/src/main/kotlin/app/revanced/patches/shared/settings/preference/impl/ArrayResource.kt index 9db57cff0..fa5e12f3c 100644 --- a/src/main/kotlin/app/revanced/patches/shared/settings/preference/impl/ArrayResource.kt +++ b/src/main/kotlin/app/revanced/patches/shared/settings/preference/impl/ArrayResource.kt @@ -10,7 +10,7 @@ import org.w3c.dom.Document * @param name The name of the array resource. * @param items The items of the array resource. */ -internal class ArrayResource( +class ArrayResource( name: String, val items: List ) : BaseResource(name, "string-array") { diff --git a/src/main/kotlin/app/revanced/patches/shared/settings/preference/impl/ListPreference.kt b/src/main/kotlin/app/revanced/patches/shared/settings/preference/impl/ListPreference.kt index 3df3c87e9..37181267f 100644 --- a/src/main/kotlin/app/revanced/patches/shared/settings/preference/impl/ListPreference.kt +++ b/src/main/kotlin/app/revanced/patches/shared/settings/preference/impl/ListPreference.kt @@ -15,7 +15,7 @@ import org.w3c.dom.Document * @param summary The summary of the list preference. * @param default The default entry value of the list preference. */ -internal class ListPreference( +class ListPreference( key: String, title: StringResource, val entries: ArrayResource, diff --git a/src/main/kotlin/app/revanced/patches/shared/settings/preference/impl/NonInteractivePreference.kt b/src/main/kotlin/app/revanced/patches/shared/settings/preference/impl/NonInteractivePreference.kt index c97913c2a..eb16067c2 100644 --- a/src/main/kotlin/app/revanced/patches/shared/settings/preference/impl/NonInteractivePreference.kt +++ b/src/main/kotlin/app/revanced/patches/shared/settings/preference/impl/NonInteractivePreference.kt @@ -15,7 +15,7 @@ import org.w3c.dom.Element * @param title The title of the preference. * @param summary The summary of the text preference. */ -internal class NonInteractivePreference( +class NonInteractivePreference( title: StringResource, summary: StringResource, ) : BasePreference(null, title, summary, "Preference") { diff --git a/src/main/kotlin/app/revanced/patches/shared/settings/preference/impl/Preference.kt b/src/main/kotlin/app/revanced/patches/shared/settings/preference/impl/Preference.kt index 2ada5625d..463a1fce2 100644 --- a/src/main/kotlin/app/revanced/patches/shared/settings/preference/impl/Preference.kt +++ b/src/main/kotlin/app/revanced/patches/shared/settings/preference/impl/Preference.kt @@ -12,7 +12,7 @@ import org.w3c.dom.Document * @param summary The summary of the text preference. * @param intent The intent of the preference. */ -internal class Preference( +class Preference( key: String, title: StringResource, summary: StringResource, @@ -33,7 +33,7 @@ internal class Preference( }) } - internal class Intent( + class Intent( internal val targetPackage: String, internal val data: String, internal val targetClass: String diff --git a/src/main/kotlin/app/revanced/patches/shared/settings/preference/impl/PreferenceCategory.kt b/src/main/kotlin/app/revanced/patches/shared/settings/preference/impl/PreferenceCategory.kt index 56e02f45d..633e8d784 100644 --- a/src/main/kotlin/app/revanced/patches/shared/settings/preference/impl/PreferenceCategory.kt +++ b/src/main/kotlin/app/revanced/patches/shared/settings/preference/impl/PreferenceCategory.kt @@ -11,7 +11,7 @@ import org.w3c.dom.Document * @param title The title of the preference. * @param preferences Child preferences of this category. */ -internal open class PreferenceCategory( +open class PreferenceCategory( key: String, title: StringResource, var preferences: List, diff --git a/src/main/kotlin/app/revanced/patches/shared/settings/preference/impl/PreferenceScreen.kt b/src/main/kotlin/app/revanced/patches/shared/settings/preference/impl/PreferenceScreen.kt index e6bf32d43..e0e435b23 100644 --- a/src/main/kotlin/app/revanced/patches/shared/settings/preference/impl/PreferenceScreen.kt +++ b/src/main/kotlin/app/revanced/patches/shared/settings/preference/impl/PreferenceScreen.kt @@ -13,7 +13,7 @@ import org.w3c.dom.Document * @param preferences Child preferences of this screen. * @param summary The summary of the text preference. */ -internal open class PreferenceScreen( +open class PreferenceScreen( key: String, title: StringResource, var preferences: List, diff --git a/src/main/kotlin/app/revanced/patches/shared/settings/preference/impl/StringResource.kt b/src/main/kotlin/app/revanced/patches/shared/settings/preference/impl/StringResource.kt index 7934b1270..b3cd83972 100644 --- a/src/main/kotlin/app/revanced/patches/shared/settings/preference/impl/StringResource.kt +++ b/src/main/kotlin/app/revanced/patches/shared/settings/preference/impl/StringResource.kt @@ -11,7 +11,7 @@ import org.w3c.dom.Document * @param value The value of the string. * @param formatted If the string is formatted. If false, the attribute will be set. */ -internal class StringResource( +class StringResource( name: String, val value: String, val formatted: Boolean = true diff --git a/src/main/kotlin/app/revanced/patches/shared/settings/preference/impl/SwitchPreference.kt b/src/main/kotlin/app/revanced/patches/shared/settings/preference/impl/SwitchPreference.kt index 5a9e6778e..a24b6dfa9 100644 --- a/src/main/kotlin/app/revanced/patches/shared/settings/preference/impl/SwitchPreference.kt +++ b/src/main/kotlin/app/revanced/patches/shared/settings/preference/impl/SwitchPreference.kt @@ -18,7 +18,7 @@ import org.w3c.dom.Element * @param userDialogMessage The message to show in a dialog when the user toggles the preference. * @param default The default value of the switch. */ -internal class SwitchPreference( +class SwitchPreference( key: String, title: StringResource, val summaryOn: StringResource, val summaryOff: StringResource, diff --git a/src/main/kotlin/app/revanced/patches/shared/settings/preference/impl/TextPreference.kt b/src/main/kotlin/app/revanced/patches/shared/settings/preference/impl/TextPreference.kt index 5895a5e6e..aaac8c5c0 100644 --- a/src/main/kotlin/app/revanced/patches/shared/settings/preference/impl/TextPreference.kt +++ b/src/main/kotlin/app/revanced/patches/shared/settings/preference/impl/TextPreference.kt @@ -13,7 +13,7 @@ import org.w3c.dom.Document * @param summary The summary of the text preference. * @param default The default value of the text preference. */ -internal class TextPreference( +class TextPreference( key: String?, title: StringResource, summary: StringResource?, diff --git a/src/main/kotlin/app/revanced/patches/shared/settings/util/AbstractPreferenceScreen.kt b/src/main/kotlin/app/revanced/patches/shared/settings/util/AbstractPreferenceScreen.kt index a17b9c381..30402f5a7 100644 --- a/src/main/kotlin/app/revanced/patches/shared/settings/util/AbstractPreferenceScreen.kt +++ b/src/main/kotlin/app/revanced/patches/shared/settings/util/AbstractPreferenceScreen.kt @@ -6,7 +6,7 @@ import app.revanced.patches.shared.settings.preference.impl.PreferenceScreen import app.revanced.patches.shared.settings.preference.impl.StringResource import java.io.Closeable -internal abstract class AbstractPreferenceScreen( +abstract class AbstractPreferenceScreen( private val root: MutableList = mutableListOf() ) : Closeable { diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/settings/bytecode/patch/SettingsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/settings/bytecode/patch/SettingsPatch.kt index 9bc4f4648..9436d1616 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/settings/bytecode/patch/SettingsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/settings/bytecode/patch/SettingsPatch.kt @@ -123,7 +123,7 @@ class SettingsPatch : BytecodePatch( /** * Preference screens patches should add their settings to. */ - internal object PreferenceScreen : AbstractPreferenceScreen() { + object PreferenceScreen : AbstractPreferenceScreen() { val ADS = Screen("ads", "Ads", "Ad related settings") val INTERACTIONS = Screen("interactions", "Interaction", "Settings related to interactions") val LAYOUT = Screen("layout", "Layout", "Settings related to the layout") From 9140aa25b84172b13eb2b8d67cc8d8b4edc48b07 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sun, 13 Aug 2023 16:39:06 +0000 Subject: [PATCH 33/67] chore(release): 2.188.0-dev.14 [skip ci] # [2.188.0-dev.14](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.13...v2.188.0-dev.14) (2023-08-13) ### Bug Fixes * allow using `PreferenceScreen` outside of current module ([fe94013](https://github.com/ReVanced/revanced-patches/commit/fe94013a2235953b32fed6e0710a252698a264b3)) --- CHANGELOG.md | 7 +++++++ gradle.properties | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f94959d44..5d2c02431 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [2.188.0-dev.14](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.13...v2.188.0-dev.14) (2023-08-13) + + +### Bug Fixes + +* allow using `PreferenceScreen` outside of current module ([fe94013](https://github.com/ReVanced/revanced-patches/commit/fe94013a2235953b32fed6e0710a252698a264b3)) + # [2.188.0-dev.13](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.12...v2.188.0-dev.13) (2023-08-13) diff --git a/gradle.properties b/gradle.properties index 09630d5f3..618bfd280 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ org.gradle.parallel = true org.gradle.caching = true kotlin.code.style = official -version = 2.188.0-dev.13 +version = 2.188.0-dev.14 From ca504e54218f562a243ba80b3eaa27d7108ec8f7 Mon Sep 17 00:00:00 2001 From: oSumAtrIX Date: Mon, 14 Aug 2023 04:12:09 +0200 Subject: [PATCH 34/67] build(Needs bump): Bump dependencies --- build.gradle.kts | 22 +++++++++---------- .../app/revanced/extensions/Extensions.kt | 8 +++---- .../wifi/spoof/patch/SpoofWifiPatch.kt | 6 ++--- .../patch/RemoveCaptureRestrictionPatch.kt | 6 ++--- .../patch/RemoveScreenshotRestrictionPatch.kt | 6 ++--- .../pro/fingerprints/ProUnlockFingerprint.kt | 2 +- .../misc/pro/patch/ProUnlockPatch.kt | 2 +- .../fingerprints/BootStateFingerprint.kt | 4 ++-- .../fingerprints/CreateKeyFingerprint.kt | 2 +- .../fingerprints/RootDetectionFingerprint.kt | 4 ++-- .../patch/RemoveDeviceRestrictions.kt | 2 +- .../fingerprints/RootDetectionFingerprint.kt | 2 +- .../fingerprints/SpoofSignatureFingerprint.kt | 2 +- .../fingerprints/ShowAdFingerprint.kt | 4 ++-- .../ads/GenericMediaAdFingerprint.kt | 2 +- .../fingerprints/ads/MediaAdFingerprint.kt | 8 +++---- .../ads/PaidPartnershipAdFingerprint.kt | 6 ++--- .../fingerprints/ads/ShoppingAdFingerprint.kt | 2 +- .../timeline/patch/HideTimelineAdsPatch.kt | 4 ++-- .../ad/fingerprints/IrplusAdsFingerprint.kt | 2 +- .../fingerprint/IsLoggedInFingerprint.kt | 4 ++-- .../fingerprint/HasPurchasedFingerprint.kt | 4 ++-- .../LicenseValidationFingerprint.kt | 4 ++-- .../fingerprint/VerifySignatureFingerprint.kt | 4 ++-- .../fingerprint/IsFreeVersionFingerprint.kt | 4 ++-- .../fingerprints/LoadInboxAdsFingerprint.kt | 2 +- .../SendTypingIndicatorFingerprint.kt | 2 +- ...itchMessangeInputEmojiButtonFingerprint.kt | 2 +- ...tchingEmojiToStickerInMessageInputField.kt | 2 +- .../fingerprints/UnlockProFingerprint.kt | 4 ++-- ...ShowMusicVideoAdsConstructorFingerprint.kt | 4 ++-- .../ShowMusicVideoAdsFingerprint.kt | 4 ++-- .../AllCodecsReferenceFingerprint.kt | 4 ++-- .../fingerprints/CodecsLockFingerprint.kt | 4 ++-- .../audio/codecs/patch/CodecsUnlockPatch.kt | 2 +- .../AudioOnlyEnablerFingerprint.kt | 4 ++-- .../fingerprints/ExclusiveAudioFingerprint.kt | 4 ++-- .../fingerprints/RepeatTrackFingerprint.kt | 4 ++-- .../fingerprints/DisableShuffleFingerprint.kt | 4 ++-- .../CompactHeaderConstructorFingerprint.kt | 4 ++-- .../compactheader/patch/CompactHeaderPatch.kt | 2 +- .../MinimizedPlaybackManagerFingerprint.kt | 4 ++-- .../fingerprints/HideGetPremiumFingerprint.kt | 4 ++-- .../HideGetPremiumParentFingerprint.kt | 4 ++-- .../PivotBarConstructorFingerprint.kt | 4 ++-- .../patch/RemoveUpgradeButtonPatch.kt | 8 +++---- .../CheckCertificateFingerprint.kt | 2 +- .../GooglePlayUtilityFingerprint.kt | 2 +- .../fingerprints/ServiceCheckFingerprint.kt | 2 +- .../BackgroundPlaybackDisableFingerprint.kt | 4 ++-- .../IsLicenseRegisteredFingerprint.kt | 2 +- .../fingerprints/CheckSignatureFingerprint.kt | 4 ++-- .../patch/SignatureDetectionPatch.kt | 2 +- .../fingerprints/IsPlusUnlockedFingerprint.kt | 2 +- .../fingerprints/IsNotPremiumFingerprint.kt | 2 +- .../fingerprints/NewAdPostFingerprint.kt | 2 +- .../reddit/ad/general/patch/HideAdsPatch.kt | 10 ++++----- .../baconreader/api/patch/SpoofClientPatch.kt | 2 +- .../api/patch/SpoofClientPatch.kt | 2 +- .../fingerprints/IsAdFreeUserFingerprint.kt | 2 +- .../fingerprints/GetClientIdFingerprint.kt | 4 ++-- .../PiracyDetectionFingerprint.kt | 4 ++-- .../fingerprints/GetUserAgentFingerprint.kt | 4 ++-- .../redditisfun/api/patch/SpoofClientPatch.kt | 2 +- .../api/patch/SpoofClientPatch.kt | 2 +- .../fingerprints/IsAdsEnabledFingerprint.kt | 2 +- .../api/patch/SpoofClientPatch.kt | 6 ++--- .../PiracyDetectionFingerprint.kt | 6 ++--- .../WatchWhileActivityFingerprint.kt | 2 +- .../patch/AbstractIntegrationsPatch.kt | 6 ++--- .../CanScrollVerticallyFingerprint.kt | 4 ++-- .../patch/VerticalScrollPatch.kt | 2 +- .../fingerprints/CreateTabsFingerprint.kt | 8 +++---- .../ShowNotificationFingerprint.kt | 10 ++++----- .../fingerprints/OnDemandFingerprint.kt | 2 +- .../patch/PremiumNavbarTabPatch.kt | 4 ++-- .../patches/tiktok/ad/patch/HideAdsPatch.kt | 8 +++---- .../FeedApiServiceLIZFingerprint.kt | 2 +- .../feedfilter/patch/FeedFilterPatch.kt | 4 ++-- .../fingerprints/ACLCommonShareFingerprint.kt | 2 +- .../ACLCommonShareFingerprint2.kt | 2 +- .../ACLCommonShareFingerprint3.kt | 2 +- .../DownloadPathParentFingerprint.kt | 2 +- .../downloads/patch/DownloadsPatch.kt | 8 +++---- .../SpeedControlParentFingerprint.kt | 2 +- .../speed/patch/PlaybackSpeedPatch.kt | 2 +- .../GoogleAuthAvailableFingerprint.kt | 2 +- .../GoogleOneTapAuthAvailableFingerprint.kt | 2 +- .../AddSettingsEntryFingerprint.kt | 2 +- .../misc/settings/patch/SettingsPatch.kt | 6 ++--- .../misc/spoof/sim/patch/SpoofSimPatch.kt | 8 +++---- ...etedMessageClickableSpanCtorFingerprint.kt | 2 +- .../settings/bytecode/patch/SettingsPatch.kt | 4 ++-- .../MenuGroupsOnClickFingerprint.kt | 2 +- .../fingerprints/JsonHookPatchFingerprint.kt | 2 +- .../ad/general/bytecode/patch/HideAdsPatch.kt | 9 ++++---- .../fingerprints/GetPremiumViewFingerprint.kt | 4 ++-- .../HideGetPremiumVideoAdvertisementPatch.kt | 2 +- ...essibilityPlayerProgressTimeFingerprint.kt | 2 +- .../fingerprints/SeekbarTappingFingerprint.kt | 6 ++--- .../patch/EnableSeekbarTappingPatch.kt | 8 +++---- .../SwipeControlsHostActivityFingerprint.kt | 2 +- .../bytecode/SwipeControlsBytecodePatch.kt | 4 ++-- .../StartVideoInformerFingerprint.kt | 4 ++-- .../SubtitleButtonControllerFingerprint.kt | 4 ++-- .../fingerprints/SubtitleTrackFingerprint.kt | 4 ++-- .../autoplay/patch/HideAutoplayButtonPatch.kt | 8 +++---- .../captions/patch/HideCaptionsButtonPatch.kt | 2 +- .../InitializeButtonsFingerprint.kt | 2 +- .../PivotBarButtonsViewFingerprint.kt | 2 +- .../PivotBarConstructorFingerprint.kt | 2 +- .../PivotBarCreateButtonViewFingerprint.kt | 2 +- .../fingerprints/PivotBarEnumFingerprint.kt | 2 +- .../patch/NavigationButtonsPatch.kt | 4 ++-- .../navigation/utils/InjectionUtils.kt | 4 ++-- ...layerControlsVisibilityModelFingerprint.kt | 2 +- .../hide/patch/HidePlayerButtonsPatch.kt | 2 +- .../fingerprints/AlbumCardsFingerprint.kt | 4 ++-- .../bytecode/patch/AlbumCardsPatch.kt | 2 +- .../fingerprints/BreakingNewsFingerprint.kt | 4 ++-- .../bytecode/patch/BreakingNewsPatch.kt | 2 +- .../CrowdfundingBoxFingerprint.kt | 4 ++-- .../bytecode/patch/CrowdfundingBoxPatch.kt | 2 +- .../fingerprints/LayoutCircleFingerprint.kt | 2 +- .../fingerprints/LayoutIconFingerprint.kt | 2 +- .../fingerprints/LayoutVideoFingerprint.kt | 2 +- .../bytecode/patch/HideEndscreenCardsPatch.kt | 2 +- .../FilterBarHeightFingerprint.kt | 4 ++-- .../RelatedChipCloudFingerprint.kt | 4 ++-- .../SearchResultsChipBarFingerprint.kt | 4 ++-- .../filterbar/patch/HideFilterBarPatch.kt | 4 ++-- ...ShowFloatingMicrophoneButtonFingerprint.kt | 4 ++-- .../HideFloatingMicrophoneButtonPatch.kt | 2 +- .../ConvertElementToFlatBufferFingerprint.kt | 2 +- .../InfocardsIncognitoFingerprint.kt | 2 +- .../InfocardsIncognitoParentFingerprint.kt | 2 +- .../InfocardsMethodCallFingerprint.kt | 2 +- .../infocards/patch/HideInfoCardsPatch.kt | 6 ++--- .../HideLoadMoreButtonFingerprint.kt | 4 ++-- .../bytecode/patch/HideLoadMoreButtonPatch.kt | 2 +- ...ntSwitcherAccessibilityLabelFingerprint.kt | 2 +- .../bytecode/patch/HideEmailAddressPatch.kt | 2 +- .../CreatePlayerOverviewFingerprint.kt | 4 ++-- .../bytecode/patch/HidePlayerOverlayPatch.kt | 2 +- .../BottomNavigationBarFingerprint.kt | 2 +- .../CreateShortsButtonsFingerprint.kt | 2 +- .../ReelConstructorFingerprint.kt | 4 ++-- .../RenderBottomNavigationBarFingerprint.kt | 2 +- .../SetPivotBarVisibilityFingerprint.kt | 2 +- .../patch/HideShortsComponentsPatch.kt | 6 ++--- .../fingerprints/TimeCounterFingerprint.kt | 4 ++-- .../fingerprints/HideWatermarkFingerprint.kt | 2 +- .../HideWatermarkParentFingerprint.kt | 2 +- .../FullscreenViewAdderFingerprint.kt | 2 +- .../FullscreenViewAdderParentFingerprint.kt | 2 +- .../EngagementPanelControllerFingerprint.kt | 2 +- .../DislikesOldLayoutTextViewFingerprint.kt | 4 ++-- .../fingerprints/ShortsTextViewFingerprint.kt | 4 ++-- ...TextComponentAtomicReferenceFingerprint.kt | 4 ++-- .../TextComponentConstructorFingerprint.kt | 2 +- .../TextComponentContextFingerprint.kt | 4 ++-- .../patch/ReturnYouTubeDislikePatch.kt | 8 +++---- .../CreateSearchSuggestionsFingerprint.kt | 2 +- .../SetWordmarkHeaderFingerprint.kt | 4 ++-- .../PlayerSeekbarColorFingerprint.kt | 2 +- .../SetSeekbarClickedColorFingerprint.kt | 2 +- .../ShortsSeekbarColorFingerprint.kt | 2 +- .../patch/SeekbarColorBytecodePatch.kt | 4 ++-- .../fingerprints/AppendTimeFingerprint.kt | 4 ++-- .../ControlsOverlayFingerprint.kt | 4 ++-- .../RectangleFieldInvalidatorFingerprint.kt | 4 ++-- .../patch/SponsorBlockBytecodePatch.kt | 12 +++++----- .../SpoofAppVersionFingerprint.kt | 4 ++-- .../bytecode/patch/SpoofAppVersionPatch.kt | 2 +- .../UserWasInShortsFingerprint.kt | 4 ++-- ...erDimensionsCalculatorParentFingerprint.kt | 4 ++-- .../MiniPlayerOverrideFingerprint.kt | 4 ++-- .../MiniPlayerOverrideNoContextFingerprint.kt | 4 ++-- ...PlayerResponseModelSizeCheckFingerprint.kt | 4 ++-- .../patch/TabletMiniPlayerPatch.kt | 4 ++-- .../fingerprints/LithoThemeFingerprint.kt | 4 ++-- .../fingerprints/AutoRepeatFingerprint.kt | 2 +- .../AutoRepeatParentFingerprint.kt | 2 +- .../CreateBottomSheetFingerprint.kt | 2 +- .../hook/patch/BottomSheetHookPatch.kt | 2 +- .../fingerprints/OnBackPressedFingerprint.kt | 4 ++-- .../RecyclerViewScrollingFingerprint.kt | 4 ++-- .../RecyclerViewTopScrollingFingerprint.kt | 4 ++-- ...cyclerViewTopScrollingParentFingerprint.kt | 4 ++-- .../ProtobufParameterBuilderFingerprint.kt | 2 +- .../ScrubbedPreviewLayoutFingerprint.kt | 4 ++-- .../StoryboardThumbnailFingerprint.kt | 4 ++-- .../StoryboardThumbnailParentFingerprint.kt | 2 +- .../UserAgentHeaderBuilderFingerprint.kt | 2 +- .../fix/playback/patch/ClientSpoofPatch.kt | 2 +- .../patch/SpoofSignatureVerificationPatch.kt | 2 +- .../APIPlayerServiceFingerprint.kt | 2 +- ...mbeddedPlayerControlsOverlayFingerprint.kt | 2 +- .../fingerprints/EmbeddedPlayerFingerprint.kt | 2 +- .../RemoteEmbedFragmentFingerprint.kt | 2 +- .../RemoteEmbeddedPlayerFingerprint.kt | 2 +- .../StandalonePlayerActivityFingerprint.kt | 2 +- .../BindSessionServiceFingerprint.kt | 4 ++-- .../GetCustomTabPackageNameFingerprint.kt | 4 ++-- .../InitializeCustomTabSupportFingerprint.kt | 4 ++-- .../open/patch/OpenLinksExternallyPatch.kt | 2 +- .../ComponentContextParserFingerprint.kt | 2 +- .../EmptyComponentBuilderFingerprint.kt | 2 +- .../fingerprints/LithoFilterFingerprint.kt | 2 +- .../ProtobufBufferReferenceFingerprint.kt | 4 ++-- .../ReadComponentIdentifierFingerprint.kt | 2 +- .../litho/filter/patch/LithoFilterPatch.kt | 8 +++---- .../GooglePlayUtilityFingerprint.kt | 2 +- .../fingerprints/ServiceCheckFingerprint.kt | 2 +- ...izedPlaybackPolicyControllerFingerprint.kt | 4 ++-- .../MinimizedPlaybackManagerFingerprint.kt | 4 ++-- .../MinimizedPlaybackSettingsFingerprint.kt | 4 ++-- ...imizedPlaybackSettingsParentFingerprint.kt | 2 +- .../patch/MinimizedPlaybackPatch.kt | 4 ++-- .../patch/PlayerControlsBytecodePatch.kt | 2 +- .../BottomControlsInflateFingerprint.kt | 4 ++-- .../PlayerControlsVisibilityFingerprint.kt | 2 +- .../fingerprint/PlayerTypeFingerprint.kt | 4 ++-- .../fingerprint/VideoStateFingerprint.kt | 4 ++-- .../playertype/patch/PlayerTypeHookPatch.kt | 2 +- .../LicenseActivityFingerprint.kt | 2 +- .../fingerprints/SetThemeFingerprint.kt | 4 ++-- .../settings/bytecode/patch/SettingsPatch.kt | 6 ++--- .../fingerprints/HDRBrightnessFingerprint.kt | 2 +- .../hdrbrightness/patch/HDRBrightnessPatch.kt | 6 ++--- .../OnPlaybackSpeedItemClickFingerprint.kt | 4 ++-- ...erControllerSetTimeReferenceFingerprint.kt | 2 +- .../fingerprints/VideoLengthFingerprint.kt | 2 +- .../patch/VideoInformationPatch.kt | 20 ++++++++--------- .../NewVideoQualityChangedFingerprint.kt | 4 ++-- ...dexMethodClassFieldReferenceFingerprint.kt | 2 +- .../VideoQualitySetterFingerprint.kt | 4 ++-- .../patch/RememberVideoQualityPatch.kt | 6 ++--- .../SpeedArrayGeneratorFingerprint.kt | 4 ++-- .../fingerprints/SpeedLimiterFingerprint.kt | 4 ++-- .../custom/patch/CustomPlaybackSpeedPatch.kt | 18 ++++++++------- .../patch/RememberPlaybackSpeedPatch.kt | 2 +- .../videoid/fingerprint/VideoIdFingerprint.kt | 4 ++-- .../VideoIdFingerprintBackgroundPlay.kt | 4 ++-- .../video/videoid/patch/VideoIdPatch.kt | 2 +- .../VideoQualityMenuViewInflateFingerprint.kt | 4 ++-- .../patch/OldVideoQualityMenuPatch.kt | 2 +- .../fingerprints/ContainsAdFingerprint.kt | 4 ++-- .../ad/general/patch/HideAdsPatch.kt | 2 +- .../fingerprints/IsPremiumFingerprint.kt | 4 ++-- .../YukaUserConstructorFingerprint.kt | 2 +- .../util/microg/MicroGBytecodeHelper.kt | 10 ++++----- .../AbstractTransformInstructionsPatch.kt | 6 ++--- .../util/patch/LiteralValueFingerprint.kt | 2 +- .../app/revanced/util/patch/MethodCall.kt | 10 ++++----- 255 files changed, 466 insertions(+), 465 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 107444c24..7b7933524 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,17 +4,15 @@ plugins { group = "app.revanced" -val githubUsername: String = project.findProperty("gpr.user") as? String ?: System.getenv("GITHUB_ACTOR") -val githubPassword: String = project.findProperty("gpr.key") as? String ?: System.getenv("GITHUB_TOKEN") - repositories { mavenCentral() mavenLocal() + google() maven { url = uri("https://maven.pkg.github.com/revanced/revanced-patcher") credentials { - username = githubUsername - password = githubPassword + username = project.findProperty("gpr.user") as? String ?: System.getenv("GITHUB_ACTOR") + password = project.findProperty("gpr.key") as? String ?: System.getenv("GITHUB_TOKEN") } } // Required for FlexVer-Java @@ -27,15 +25,15 @@ repositories { } dependencies { - implementation("app.revanced:revanced-patcher:12.1.1") - implementation("app.revanced:multidexlib2:2.5.3-a3836654") - // Required for meta + implementation("app.revanced:revanced-patcher:13.0.0") + implementation("com.android.tools.smali:smali:3.0.3") + // Required because build fails without it. + // TODO: Find a way to remove this dependency. + implementation("com.google.guava:guava:32.1.2-jre") + // Used in JsonGenerator. implementation("com.google.code.gson:gson:2.10.1") - // Required for FlexVer-Java - implementation("com.unascribed:flexver-java:1.0.2") - // A dependency to the Android library unfortunately fails the build, - // which is why this is required for the patch change-oauth-client-id + // which is why this is required for the patch change-oauth-client-id. compileOnly(project("dummy")) } diff --git a/src/main/kotlin/app/revanced/extensions/Extensions.kt b/src/main/kotlin/app/revanced/extensions/Extensions.kt index e90fbdcfe..1998cf1d0 100644 --- a/src/main/kotlin/app/revanced/extensions/Extensions.kt +++ b/src/main/kotlin/app/revanced/extensions/Extensions.kt @@ -7,10 +7,10 @@ import app.revanced.patcher.patch.PatchResultError import app.revanced.patcher.util.proxy.mutableTypes.MutableClass import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod import app.revanced.patches.shared.mapping.misc.patch.ResourceMappingPatch -import org.jf.dexlib2.Opcode -import org.jf.dexlib2.iface.Method -import org.jf.dexlib2.iface.instruction.WideLiteralInstruction -import org.jf.dexlib2.util.MethodUtil +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.Method +import com.android.tools.smali.dexlib2.iface.instruction.WideLiteralInstruction +import com.android.tools.smali.dexlib2.util.MethodUtil import org.w3c.dom.Node // TODO: populate this to all patches diff --git a/src/main/kotlin/app/revanced/patches/all/connectivity/wifi/spoof/patch/SpoofWifiPatch.kt b/src/main/kotlin/app/revanced/patches/all/connectivity/wifi/spoof/patch/SpoofWifiPatch.kt index 7bf265286..00b05c1ff 100644 --- a/src/main/kotlin/app/revanced/patches/all/connectivity/wifi/spoof/patch/SpoofWifiPatch.kt +++ b/src/main/kotlin/app/revanced/patches/all/connectivity/wifi/spoof/patch/SpoofWifiPatch.kt @@ -6,9 +6,9 @@ import app.revanced.patcher.patch.annotations.Patch import app.revanced.patcher.patch.annotations.RequiresIntegrations import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod import app.revanced.util.patch.* -import org.jf.dexlib2.iface.ClassDef -import org.jf.dexlib2.iface.Method -import org.jf.dexlib2.iface.instruction.Instruction +import com.android.tools.smali.dexlib2.iface.ClassDef +import com.android.tools.smali.dexlib2.iface.Method +import com.android.tools.smali.dexlib2.iface.instruction.Instruction import java.util.* @Patch(false) diff --git a/src/main/kotlin/app/revanced/patches/all/screencapture/removerestriction/bytecode/patch/RemoveCaptureRestrictionPatch.kt b/src/main/kotlin/app/revanced/patches/all/screencapture/removerestriction/bytecode/patch/RemoveCaptureRestrictionPatch.kt index 499f262bc..7b49d360a 100644 --- a/src/main/kotlin/app/revanced/patches/all/screencapture/removerestriction/bytecode/patch/RemoveCaptureRestrictionPatch.kt +++ b/src/main/kotlin/app/revanced/patches/all/screencapture/removerestriction/bytecode/patch/RemoveCaptureRestrictionPatch.kt @@ -8,9 +8,9 @@ import app.revanced.patcher.patch.annotations.RequiresIntegrations import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod import app.revanced.patches.all.screencapture.removerestriction.resource.patch.RemoveCaptureRestrictionResourcePatch import app.revanced.util.patch.* -import org.jf.dexlib2.iface.ClassDef -import org.jf.dexlib2.iface.Method -import org.jf.dexlib2.iface.instruction.Instruction +import com.android.tools.smali.dexlib2.iface.ClassDef +import com.android.tools.smali.dexlib2.iface.Method +import com.android.tools.smali.dexlib2.iface.instruction.Instruction @Patch(false) @Name("Remove screen capture restriction") diff --git a/src/main/kotlin/app/revanced/patches/all/screenshot/removerestriction/patch/RemoveScreenshotRestrictionPatch.kt b/src/main/kotlin/app/revanced/patches/all/screenshot/removerestriction/patch/RemoveScreenshotRestrictionPatch.kt index 9f096e799..97bbb445a 100644 --- a/src/main/kotlin/app/revanced/patches/all/screenshot/removerestriction/patch/RemoveScreenshotRestrictionPatch.kt +++ b/src/main/kotlin/app/revanced/patches/all/screenshot/removerestriction/patch/RemoveScreenshotRestrictionPatch.kt @@ -6,9 +6,9 @@ import app.revanced.patcher.patch.annotations.Patch import app.revanced.patcher.patch.annotations.RequiresIntegrations import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod import app.revanced.util.patch.* -import org.jf.dexlib2.iface.ClassDef -import org.jf.dexlib2.iface.Method -import org.jf.dexlib2.iface.instruction.Instruction +import com.android.tools.smali.dexlib2.iface.ClassDef +import com.android.tools.smali.dexlib2.iface.Method +import com.android.tools.smali.dexlib2.iface.instruction.Instruction import java.util.* @Patch(false) diff --git a/src/main/kotlin/app/revanced/patches/backdrops/misc/pro/fingerprints/ProUnlockFingerprint.kt b/src/main/kotlin/app/revanced/patches/backdrops/misc/pro/fingerprints/ProUnlockFingerprint.kt index 2835fc0b2..252e03081 100644 --- a/src/main/kotlin/app/revanced/patches/backdrops/misc/pro/fingerprints/ProUnlockFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/backdrops/misc/pro/fingerprints/ProUnlockFingerprint.kt @@ -1,7 +1,7 @@ package app.revanced.patches.backdrops.misc.pro.fingerprints import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.Opcode object ProUnlockFingerprint : MethodFingerprint( opcodes = listOf( diff --git a/src/main/kotlin/app/revanced/patches/backdrops/misc/pro/patch/ProUnlockPatch.kt b/src/main/kotlin/app/revanced/patches/backdrops/misc/pro/patch/ProUnlockPatch.kt index ed9af5872..fa626f4d4 100644 --- a/src/main/kotlin/app/revanced/patches/backdrops/misc/pro/patch/ProUnlockPatch.kt +++ b/src/main/kotlin/app/revanced/patches/backdrops/misc/pro/patch/ProUnlockPatch.kt @@ -12,7 +12,7 @@ import app.revanced.patcher.patch.PatchResultSuccess import app.revanced.patcher.patch.annotations.Patch import app.revanced.patches.backdrops.misc.pro.annotations.ProUnlockCompatibility import app.revanced.patches.backdrops.misc.pro.fingerprints.ProUnlockFingerprint -import org.jf.dexlib2.iface.instruction.OneRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction @Patch @Name("Pro unlock") diff --git a/src/main/kotlin/app/revanced/patches/finanzonline/detection/bootloader/fingerprints/BootStateFingerprint.kt b/src/main/kotlin/app/revanced/patches/finanzonline/detection/bootloader/fingerprints/BootStateFingerprint.kt index 082ca3121..b1956358a 100644 --- a/src/main/kotlin/app/revanced/patches/finanzonline/detection/bootloader/fingerprints/BootStateFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/finanzonline/detection/bootloader/fingerprints/BootStateFingerprint.kt @@ -1,8 +1,8 @@ package app.revanced.patches.finanzonline.detection.bootloader.fingerprints import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode // Located @ at.gv.bmf.bmf2go.taxequalization.tools.utils.AttestationHelper#isBootStateOk (3.0.1) object BootStateFingerprint : MethodFingerprint( diff --git a/src/main/kotlin/app/revanced/patches/finanzonline/detection/bootloader/fingerprints/CreateKeyFingerprint.kt b/src/main/kotlin/app/revanced/patches/finanzonline/detection/bootloader/fingerprints/CreateKeyFingerprint.kt index dcfcb0b8e..62df65327 100644 --- a/src/main/kotlin/app/revanced/patches/finanzonline/detection/bootloader/fingerprints/CreateKeyFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/finanzonline/detection/bootloader/fingerprints/CreateKeyFingerprint.kt @@ -1,7 +1,7 @@ package app.revanced.patches.finanzonline.detection.bootloader.fingerprints import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags // Located @ at.gv.bmf.bmf2go.taxequalization.tools.utils.AttestationHelper#createKey (3.0.1) object CreateKeyFingerprint : MethodFingerprint( diff --git a/src/main/kotlin/app/revanced/patches/finanzonline/detection/root/fingerprints/RootDetectionFingerprint.kt b/src/main/kotlin/app/revanced/patches/finanzonline/detection/root/fingerprints/RootDetectionFingerprint.kt index 8c0bb011d..73af27868 100644 --- a/src/main/kotlin/app/revanced/patches/finanzonline/detection/root/fingerprints/RootDetectionFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/finanzonline/detection/root/fingerprints/RootDetectionFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.finanzonline.detection.root.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode // Located @ at.gv.bmf.bmf2go.taxequalization.tools.utils.RootDetection#isRooted (3.0.1) object RootDetectionFingerprint : MethodFingerprint( diff --git a/src/main/kotlin/app/revanced/patches/googlerecorder/restrictions/patch/RemoveDeviceRestrictions.kt b/src/main/kotlin/app/revanced/patches/googlerecorder/restrictions/patch/RemoveDeviceRestrictions.kt index 6e408c06c..0e08ea9d0 100644 --- a/src/main/kotlin/app/revanced/patches/googlerecorder/restrictions/patch/RemoveDeviceRestrictions.kt +++ b/src/main/kotlin/app/revanced/patches/googlerecorder/restrictions/patch/RemoveDeviceRestrictions.kt @@ -14,7 +14,7 @@ import app.revanced.patcher.patch.PatchResult import app.revanced.patcher.patch.PatchResultSuccess import app.revanced.patcher.patch.annotations.Patch import app.revanced.patches.googlerecorder.restrictions.fingerprints.OnApplicationCreateFingerprint -import org.jf.dexlib2.iface.instruction.OneRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction @Patch @Name("Remove device restrictions") diff --git a/src/main/kotlin/app/revanced/patches/idaustria/detection/root/fingerprints/RootDetectionFingerprint.kt b/src/main/kotlin/app/revanced/patches/idaustria/detection/root/fingerprints/RootDetectionFingerprint.kt index 185a9e5ad..359d90db0 100644 --- a/src/main/kotlin/app/revanced/patches/idaustria/detection/root/fingerprints/RootDetectionFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/idaustria/detection/root/fingerprints/RootDetectionFingerprint.kt @@ -1,7 +1,7 @@ package app.revanced.patches.idaustria.detection.root.fingerprints import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags object RootDetectionFingerprint : MethodFingerprint( "V", diff --git a/src/main/kotlin/app/revanced/patches/idaustria/detection/signature/fingerprints/SpoofSignatureFingerprint.kt b/src/main/kotlin/app/revanced/patches/idaustria/detection/signature/fingerprints/SpoofSignatureFingerprint.kt index c11b2e0b6..461f818b9 100644 --- a/src/main/kotlin/app/revanced/patches/idaustria/detection/signature/fingerprints/SpoofSignatureFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/idaustria/detection/signature/fingerprints/SpoofSignatureFingerprint.kt @@ -1,7 +1,7 @@ package app.revanced.patches.idaustria.detection.signature.fingerprints import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags object SpoofSignatureFingerprint : MethodFingerprint( "L", diff --git a/src/main/kotlin/app/revanced/patches/instagram/patches/ads/timeline/fingerprints/ShowAdFingerprint.kt b/src/main/kotlin/app/revanced/patches/instagram/patches/ads/timeline/fingerprints/ShowAdFingerprint.kt index 55d2dafe5..5e936ce16 100644 --- a/src/main/kotlin/app/revanced/patches/instagram/patches/ads/timeline/fingerprints/ShowAdFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/instagram/patches/ads/timeline/fingerprints/ShowAdFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.instagram.patches.ads.timeline.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object ShowAdFingerprint : MethodFingerprint( "Z", diff --git a/src/main/kotlin/app/revanced/patches/instagram/patches/ads/timeline/fingerprints/ads/GenericMediaAdFingerprint.kt b/src/main/kotlin/app/revanced/patches/instagram/patches/ads/timeline/fingerprints/ads/GenericMediaAdFingerprint.kt index f4988a135..ebfc11bde 100644 --- a/src/main/kotlin/app/revanced/patches/instagram/patches/ads/timeline/fingerprints/ads/GenericMediaAdFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/instagram/patches/ads/timeline/fingerprints/ads/GenericMediaAdFingerprint.kt @@ -1,6 +1,6 @@ package app.revanced.patches.instagram.patches.ads.timeline.fingerprints.ads -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.Opcode object GenericMediaAdFingerprint : MediaAdFingerprint( opcodes = listOf( diff --git a/src/main/kotlin/app/revanced/patches/instagram/patches/ads/timeline/fingerprints/ads/MediaAdFingerprint.kt b/src/main/kotlin/app/revanced/patches/instagram/patches/ads/timeline/fingerprints/ads/MediaAdFingerprint.kt index b31290f70..ef0d12a11 100644 --- a/src/main/kotlin/app/revanced/patches/instagram/patches/ads/timeline/fingerprints/ads/MediaAdFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/instagram/patches/ads/timeline/fingerprints/ads/MediaAdFingerprint.kt @@ -2,10 +2,10 @@ package app.revanced.patches.instagram.patches.ads.timeline.fingerprints.ads import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode -import org.jf.dexlib2.iface.ClassDef -import org.jf.dexlib2.iface.Method +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.ClassDef +import com.android.tools.smali.dexlib2.iface.Method abstract class MediaAdFingerprint( returnType: String? = "Z", diff --git a/src/main/kotlin/app/revanced/patches/instagram/patches/ads/timeline/fingerprints/ads/PaidPartnershipAdFingerprint.kt b/src/main/kotlin/app/revanced/patches/instagram/patches/ads/timeline/fingerprints/ads/PaidPartnershipAdFingerprint.kt index 0f10168c6..db31e5e45 100644 --- a/src/main/kotlin/app/revanced/patches/instagram/patches/ads/timeline/fingerprints/ads/PaidPartnershipAdFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/instagram/patches/ads/timeline/fingerprints/ads/PaidPartnershipAdFingerprint.kt @@ -1,8 +1,8 @@ package app.revanced.patches.instagram.patches.ads.timeline.fingerprints.ads -import org.jf.dexlib2.Opcode -import org.jf.dexlib2.iface.instruction.ReferenceInstruction -import org.jf.dexlib2.iface.reference.MethodReference +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction +import com.android.tools.smali.dexlib2.iface.reference.MethodReference object PaidPartnershipAdFingerprint : MediaAdFingerprint( "V", diff --git a/src/main/kotlin/app/revanced/patches/instagram/patches/ads/timeline/fingerprints/ads/ShoppingAdFingerprint.kt b/src/main/kotlin/app/revanced/patches/instagram/patches/ads/timeline/fingerprints/ads/ShoppingAdFingerprint.kt index 28bd08a2e..643ffad9a 100644 --- a/src/main/kotlin/app/revanced/patches/instagram/patches/ads/timeline/fingerprints/ads/ShoppingAdFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/instagram/patches/ads/timeline/fingerprints/ads/ShoppingAdFingerprint.kt @@ -1,6 +1,6 @@ package app.revanced.patches.instagram.patches.ads.timeline.fingerprints.ads -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.Opcode object ShoppingAdFingerprint : MediaAdFingerprint( opcodes = listOf( diff --git a/src/main/kotlin/app/revanced/patches/instagram/patches/ads/timeline/patch/HideTimelineAdsPatch.kt b/src/main/kotlin/app/revanced/patches/instagram/patches/ads/timeline/patch/HideTimelineAdsPatch.kt index 3090f5be0..82c5f6b6e 100644 --- a/src/main/kotlin/app/revanced/patches/instagram/patches/ads/timeline/patch/HideTimelineAdsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/instagram/patches/ads/timeline/patch/HideTimelineAdsPatch.kt @@ -18,8 +18,8 @@ import app.revanced.patches.instagram.patches.ads.timeline.fingerprints.ads.Gene import app.revanced.patches.instagram.patches.ads.timeline.fingerprints.ads.MediaAdFingerprint import app.revanced.patches.instagram.patches.ads.timeline.fingerprints.ads.PaidPartnershipAdFingerprint import app.revanced.patches.instagram.patches.ads.timeline.fingerprints.ads.ShoppingAdFingerprint -import org.jf.dexlib2.iface.instruction.FiveRegisterInstruction -import org.jf.dexlib2.iface.instruction.OneRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction @Patch @Name("Hide timeline ads") diff --git a/src/main/kotlin/app/revanced/patches/irplus/ad/fingerprints/IrplusAdsFingerprint.kt b/src/main/kotlin/app/revanced/patches/irplus/ad/fingerprints/IrplusAdsFingerprint.kt index 061606b1c..063b0ae70 100644 --- a/src/main/kotlin/app/revanced/patches/irplus/ad/fingerprints/IrplusAdsFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/irplus/ad/fingerprints/IrplusAdsFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.irplus.ad.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags object IrplusAdsFingerprint : MethodFingerprint( "V", diff --git a/src/main/kotlin/app/revanced/patches/lightroom/misc/login/fingerprint/IsLoggedInFingerprint.kt b/src/main/kotlin/app/revanced/patches/lightroom/misc/login/fingerprint/IsLoggedInFingerprint.kt index 2a57095a8..7e56d8d02 100644 --- a/src/main/kotlin/app/revanced/patches/lightroom/misc/login/fingerprint/IsLoggedInFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/lightroom/misc/login/fingerprint/IsLoggedInFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.lightroom.misc.login.fingerprint import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object IsLoggedInFingerprint : MethodFingerprint( returnType = "Z", diff --git a/src/main/kotlin/app/revanced/patches/lightroom/misc/premium/fingerprint/HasPurchasedFingerprint.kt b/src/main/kotlin/app/revanced/patches/lightroom/misc/premium/fingerprint/HasPurchasedFingerprint.kt index a56881fd0..31bef2284 100644 --- a/src/main/kotlin/app/revanced/patches/lightroom/misc/premium/fingerprint/HasPurchasedFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/lightroom/misc/premium/fingerprint/HasPurchasedFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.lightroom.misc.premium.fingerprint import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object HasPurchasedFingerprint : MethodFingerprint( returnType = "Z", diff --git a/src/main/kotlin/app/revanced/patches/memegenerator/detection/license/fingerprint/LicenseValidationFingerprint.kt b/src/main/kotlin/app/revanced/patches/memegenerator/detection/license/fingerprint/LicenseValidationFingerprint.kt index 9de66ac2a..d6454e705 100644 --- a/src/main/kotlin/app/revanced/patches/memegenerator/detection/license/fingerprint/LicenseValidationFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/memegenerator/detection/license/fingerprint/LicenseValidationFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.memegenerator.detection.license.fingerprint import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object LicenseValidationFingerprint : MethodFingerprint( returnType = "Z", diff --git a/src/main/kotlin/app/revanced/patches/memegenerator/detection/signature/fingerprint/VerifySignatureFingerprint.kt b/src/main/kotlin/app/revanced/patches/memegenerator/detection/signature/fingerprint/VerifySignatureFingerprint.kt index bc8cdc9fb..10ea37f9b 100644 --- a/src/main/kotlin/app/revanced/patches/memegenerator/detection/signature/fingerprint/VerifySignatureFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/memegenerator/detection/signature/fingerprint/VerifySignatureFingerprint.kt @@ -3,8 +3,8 @@ package app.revanced.patches.memegenerator.detection.signature.fingerprint import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.annotation.FuzzyPatternScanMethod import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode @FuzzyPatternScanMethod(2) object VerifySignatureFingerprint : MethodFingerprint( diff --git a/src/main/kotlin/app/revanced/patches/memegenerator/misc/pro/fingerprint/IsFreeVersionFingerprint.kt b/src/main/kotlin/app/revanced/patches/memegenerator/misc/pro/fingerprint/IsFreeVersionFingerprint.kt index 19f08da0e..d601f5b3c 100644 --- a/src/main/kotlin/app/revanced/patches/memegenerator/misc/pro/fingerprint/IsFreeVersionFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/memegenerator/misc/pro/fingerprint/IsFreeVersionFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.memegenerator.misc.pro.fingerprint import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object IsFreeVersionFingerprint : MethodFingerprint( returnType = "Ljava/lang/Boolean;", diff --git a/src/main/kotlin/app/revanced/patches/messenger/ads/inbox/fingerprints/LoadInboxAdsFingerprint.kt b/src/main/kotlin/app/revanced/patches/messenger/ads/inbox/fingerprints/LoadInboxAdsFingerprint.kt index 3bb5c3a38..7352f1f9d 100644 --- a/src/main/kotlin/app/revanced/patches/messenger/ads/inbox/fingerprints/LoadInboxAdsFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/messenger/ads/inbox/fingerprints/LoadInboxAdsFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.messenger.ads.inbox.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags object LoadInboxAdsFingerprint : MethodFingerprint( returnType = "V", diff --git a/src/main/kotlin/app/revanced/patches/messenger/inputfield/fingerprints/SendTypingIndicatorFingerprint.kt b/src/main/kotlin/app/revanced/patches/messenger/inputfield/fingerprints/SendTypingIndicatorFingerprint.kt index cff25ae29..dbaccb39d 100644 --- a/src/main/kotlin/app/revanced/patches/messenger/inputfield/fingerprints/SendTypingIndicatorFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/messenger/inputfield/fingerprints/SendTypingIndicatorFingerprint.kt @@ -1,7 +1,7 @@ package app.revanced.patches.messenger.inputfield.fingerprints import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.dexbacked.value.DexBackedStringEncodedValue +import com.android.tools.smali.dexlib2.dexbacked.value.DexBackedStringEncodedValue object SendTypingIndicatorFingerprint : MethodFingerprint( returnType = "V", diff --git a/src/main/kotlin/app/revanced/patches/messenger/inputfield/fingerprints/SwitchMessangeInputEmojiButtonFingerprint.kt b/src/main/kotlin/app/revanced/patches/messenger/inputfield/fingerprints/SwitchMessangeInputEmojiButtonFingerprint.kt index ef01e1a5a..67b6713b2 100644 --- a/src/main/kotlin/app/revanced/patches/messenger/inputfield/fingerprints/SwitchMessangeInputEmojiButtonFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/messenger/inputfield/fingerprints/SwitchMessangeInputEmojiButtonFingerprint.kt @@ -1,7 +1,7 @@ package app.revanced.patches.messenger.inputfield.fingerprints import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.Opcode object SwitchMessangeInputEmojiButtonFingerprint : MethodFingerprint( returnType = "V", diff --git a/src/main/kotlin/app/revanced/patches/messenger/inputfield/patch/DisableSwitchingEmojiToStickerInMessageInputField.kt b/src/main/kotlin/app/revanced/patches/messenger/inputfield/patch/DisableSwitchingEmojiToStickerInMessageInputField.kt index 7aa77e12d..50aac928c 100644 --- a/src/main/kotlin/app/revanced/patches/messenger/inputfield/patch/DisableSwitchingEmojiToStickerInMessageInputField.kt +++ b/src/main/kotlin/app/revanced/patches/messenger/inputfield/patch/DisableSwitchingEmojiToStickerInMessageInputField.kt @@ -10,7 +10,7 @@ import app.revanced.patcher.patch.PatchResult import app.revanced.patcher.patch.PatchResultSuccess import app.revanced.patcher.patch.annotations.Patch import app.revanced.patches.messenger.inputfield.fingerprints.SwitchMessangeInputEmojiButtonFingerprint -import org.jf.dexlib2.iface.instruction.OneRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction @Patch @Name("Disable switching emoji to sticker in message input field") diff --git a/src/main/kotlin/app/revanced/patches/moneymanager/fingerprints/UnlockProFingerprint.kt b/src/main/kotlin/app/revanced/patches/moneymanager/fingerprints/UnlockProFingerprint.kt index c7b6824a1..b051458df 100644 --- a/src/main/kotlin/app/revanced/patches/moneymanager/fingerprints/UnlockProFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/moneymanager/fingerprints/UnlockProFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.moneymanager.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object UnlockProFingerprint : MethodFingerprint( "Z", diff --git a/src/main/kotlin/app/revanced/patches/music/ad/video/fingerprints/ShowMusicVideoAdsConstructorFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/ad/video/fingerprints/ShowMusicVideoAdsConstructorFingerprint.kt index dd60e2026..6832b875c 100644 --- a/src/main/kotlin/app/revanced/patches/music/ad/video/fingerprints/ShowMusicVideoAdsConstructorFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/ad/video/fingerprints/ShowMusicVideoAdsConstructorFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.music.ad.video.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.annotation.FuzzyPatternScanMethod import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode @FuzzyPatternScanMethod(2) // FIXME: Test this threshold and find the best value. object ShowMusicVideoAdsConstructorFingerprint : MethodFingerprint( diff --git a/src/main/kotlin/app/revanced/patches/music/ad/video/fingerprints/ShowMusicVideoAdsFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/ad/video/fingerprints/ShowMusicVideoAdsFingerprint.kt index d6d8a138d..c9230919f 100644 --- a/src/main/kotlin/app/revanced/patches/music/ad/video/fingerprints/ShowMusicVideoAdsFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/ad/video/fingerprints/ShowMusicVideoAdsFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.music.ad.video.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object ShowMusicVideoAdsFingerprint : MethodFingerprint( "V", AccessFlags.PUBLIC or AccessFlags.FINAL, listOf("Z"), listOf( diff --git a/src/main/kotlin/app/revanced/patches/music/audio/codecs/fingerprints/AllCodecsReferenceFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/audio/codecs/fingerprints/AllCodecsReferenceFingerprint.kt index 92f047d54..2d0084014 100644 --- a/src/main/kotlin/app/revanced/patches/music/audio/codecs/fingerprints/AllCodecsReferenceFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/audio/codecs/fingerprints/AllCodecsReferenceFingerprint.kt @@ -3,8 +3,8 @@ package app.revanced.patches.music.audio.codecs.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.annotation.FuzzyPatternScanMethod import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode @FuzzyPatternScanMethod(2) // FIXME: Test this threshold and find the best value. diff --git a/src/main/kotlin/app/revanced/patches/music/audio/codecs/fingerprints/CodecsLockFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/audio/codecs/fingerprints/CodecsLockFingerprint.kt index 8ab87777b..2f9930276 100644 --- a/src/main/kotlin/app/revanced/patches/music/audio/codecs/fingerprints/CodecsLockFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/audio/codecs/fingerprints/CodecsLockFingerprint.kt @@ -3,8 +3,8 @@ package app.revanced.patches.music.audio.codecs.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.annotation.FuzzyPatternScanMethod import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode @FuzzyPatternScanMethod(2) // FIXME: Test this threshold and find the best value. diff --git a/src/main/kotlin/app/revanced/patches/music/audio/codecs/patch/CodecsUnlockPatch.kt b/src/main/kotlin/app/revanced/patches/music/audio/codecs/patch/CodecsUnlockPatch.kt index 679bdd8b7..045ee932f 100644 --- a/src/main/kotlin/app/revanced/patches/music/audio/codecs/patch/CodecsUnlockPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/audio/codecs/patch/CodecsUnlockPatch.kt @@ -12,7 +12,7 @@ import app.revanced.patcher.util.smali.toInstruction import app.revanced.patches.music.annotations.MusicCompatibility import app.revanced.patches.music.audio.codecs.fingerprints.AllCodecsReferenceFingerprint import app.revanced.patches.music.audio.codecs.fingerprints.CodecsLockFingerprint -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.Opcode @Patch @Name("Codecs unlock") diff --git a/src/main/kotlin/app/revanced/patches/music/audio/exclusiveaudio/fingerprints/AudioOnlyEnablerFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/audio/exclusiveaudio/fingerprints/AudioOnlyEnablerFingerprint.kt index 29c90b666..64dc94453 100644 --- a/src/main/kotlin/app/revanced/patches/music/audio/exclusiveaudio/fingerprints/AudioOnlyEnablerFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/audio/exclusiveaudio/fingerprints/AudioOnlyEnablerFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.music.audio.exclusiveaudio.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object AudioOnlyEnablerFingerprint: MethodFingerprint( "Z", AccessFlags.PUBLIC or AccessFlags.FINAL, listOf(), listOf( diff --git a/src/main/kotlin/app/revanced/patches/music/audio/exclusiveaudio/fingerprints/ExclusiveAudioFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/audio/exclusiveaudio/fingerprints/ExclusiveAudioFingerprint.kt index 02eb60adc..cc5b47e7e 100644 --- a/src/main/kotlin/app/revanced/patches/music/audio/exclusiveaudio/fingerprints/ExclusiveAudioFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/audio/exclusiveaudio/fingerprints/ExclusiveAudioFingerprint.kt @@ -3,8 +3,8 @@ package app.revanced.patches.music.audio.exclusiveaudio.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.annotation.FuzzyPatternScanMethod import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode @FuzzyPatternScanMethod(2) // FIXME: Test this threshold and find the best value. diff --git a/src/main/kotlin/app/revanced/patches/music/interaction/permanentrepeat/fingerprints/RepeatTrackFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/interaction/permanentrepeat/fingerprints/RepeatTrackFingerprint.kt index f27d60ea8..e1dfecdba 100644 --- a/src/main/kotlin/app/revanced/patches/music/interaction/permanentrepeat/fingerprints/RepeatTrackFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/interaction/permanentrepeat/fingerprints/RepeatTrackFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.music.interaction.permanentrepeat.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object RepeatTrackFingerprint : MethodFingerprint( "V", diff --git a/src/main/kotlin/app/revanced/patches/music/interaction/permanentshuffle/fingerprints/DisableShuffleFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/interaction/permanentshuffle/fingerprints/DisableShuffleFingerprint.kt index 818606d9a..8b70475f2 100644 --- a/src/main/kotlin/app/revanced/patches/music/interaction/permanentshuffle/fingerprints/DisableShuffleFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/interaction/permanentshuffle/fingerprints/DisableShuffleFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.music.interaction.permanentshuffle.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object DisableShuffleFingerprint : MethodFingerprint( "V", diff --git a/src/main/kotlin/app/revanced/patches/music/layout/compactheader/fingerprints/CompactHeaderConstructorFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/layout/compactheader/fingerprints/CompactHeaderConstructorFingerprint.kt index 661c138d7..37e23aa43 100644 --- a/src/main/kotlin/app/revanced/patches/music/layout/compactheader/fingerprints/CompactHeaderConstructorFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/layout/compactheader/fingerprints/CompactHeaderConstructorFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.music.layout.compactheader.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object CompactHeaderConstructorFingerprint : MethodFingerprint( "V", AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, listOf("L", "L", "L", "L", "L"), listOf( diff --git a/src/main/kotlin/app/revanced/patches/music/layout/compactheader/patch/CompactHeaderPatch.kt b/src/main/kotlin/app/revanced/patches/music/layout/compactheader/patch/CompactHeaderPatch.kt index 4cea853d6..74a1215e5 100644 --- a/src/main/kotlin/app/revanced/patches/music/layout/compactheader/patch/CompactHeaderPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/layout/compactheader/patch/CompactHeaderPatch.kt @@ -10,7 +10,7 @@ import app.revanced.patcher.patch.PatchResultSuccess import app.revanced.patcher.patch.annotations.Patch import app.revanced.patches.music.annotations.MusicCompatibility import app.revanced.patches.music.layout.compactheader.fingerprints.CompactHeaderConstructorFingerprint -import org.jf.dexlib2.builder.instruction.BuilderInstruction11x +import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction11x @Patch(false) @Name("Compact header") diff --git a/src/main/kotlin/app/revanced/patches/music/layout/minimizedplayback/fingerprints/MinimizedPlaybackManagerFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/layout/minimizedplayback/fingerprints/MinimizedPlaybackManagerFingerprint.kt index eb3d28a08..706eb6f17 100644 --- a/src/main/kotlin/app/revanced/patches/music/layout/minimizedplayback/fingerprints/MinimizedPlaybackManagerFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/layout/minimizedplayback/fingerprints/MinimizedPlaybackManagerFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.music.layout.minimizedplayback.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object MinimizedPlaybackManagerFingerprint : MethodFingerprint( "V", diff --git a/src/main/kotlin/app/revanced/patches/music/layout/premium/fingerprints/HideGetPremiumFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/layout/premium/fingerprints/HideGetPremiumFingerprint.kt index 5b89674cc..3608aacd6 100644 --- a/src/main/kotlin/app/revanced/patches/music/layout/premium/fingerprints/HideGetPremiumFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/layout/premium/fingerprints/HideGetPremiumFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.music.layout.premium.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object HideGetPremiumFingerprint : MethodFingerprint( "V", AccessFlags.PUBLIC or AccessFlags.FINAL, listOf(), listOf( diff --git a/src/main/kotlin/app/revanced/patches/music/layout/premium/fingerprints/HideGetPremiumParentFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/layout/premium/fingerprints/HideGetPremiumParentFingerprint.kt index d91ff64a4..fc15c531b 100644 --- a/src/main/kotlin/app/revanced/patches/music/layout/premium/fingerprints/HideGetPremiumParentFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/layout/premium/fingerprints/HideGetPremiumParentFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.music.layout.premium.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object HideGetPremiumParentFingerprint : MethodFingerprint( "V", AccessFlags.PUBLIC or AccessFlags.FINAL, listOf(), listOf( diff --git a/src/main/kotlin/app/revanced/patches/music/layout/upgradebutton/fingerprints/PivotBarConstructorFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/layout/upgradebutton/fingerprints/PivotBarConstructorFingerprint.kt index e62225b25..63465f00f 100644 --- a/src/main/kotlin/app/revanced/patches/music/layout/upgradebutton/fingerprints/PivotBarConstructorFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/layout/upgradebutton/fingerprints/PivotBarConstructorFingerprint.kt @@ -3,8 +3,8 @@ package app.revanced.patches.music.layout.upgradebutton.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.annotation.FuzzyPatternScanMethod import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode @FuzzyPatternScanMethod(2) // FIXME: Test this threshold and find the best value. diff --git a/src/main/kotlin/app/revanced/patches/music/layout/upgradebutton/patch/RemoveUpgradeButtonPatch.kt b/src/main/kotlin/app/revanced/patches/music/layout/upgradebutton/patch/RemoveUpgradeButtonPatch.kt index 05b1bb38e..43a083179 100644 --- a/src/main/kotlin/app/revanced/patches/music/layout/upgradebutton/patch/RemoveUpgradeButtonPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/layout/upgradebutton/patch/RemoveUpgradeButtonPatch.kt @@ -11,10 +11,10 @@ import app.revanced.patcher.patch.annotations.Patch import app.revanced.patcher.util.smali.toInstructions import app.revanced.patches.music.annotations.MusicCompatibility import app.revanced.patches.music.layout.upgradebutton.fingerprints.PivotBarConstructorFingerprint -import org.jf.dexlib2.Opcode -import org.jf.dexlib2.builder.instruction.BuilderInstruction22t -import org.jf.dexlib2.iface.instruction.formats.Instruction22c -import org.jf.dexlib2.iface.instruction.formats.Instruction35c +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction22t +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction22c +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction35c @Patch diff --git a/src/main/kotlin/app/revanced/patches/music/misc/androidauto/fingerprints/CheckCertificateFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/misc/androidauto/fingerprints/CheckCertificateFingerprint.kt index f6ab9dbbb..fd7d5cfc3 100644 --- a/src/main/kotlin/app/revanced/patches/music/misc/androidauto/fingerprints/CheckCertificateFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/misc/androidauto/fingerprints/CheckCertificateFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.music.misc.androidauto.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags object CheckCertificateFingerprint : MethodFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, diff --git a/src/main/kotlin/app/revanced/patches/music/misc/microg/fingerprints/GooglePlayUtilityFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/misc/microg/fingerprints/GooglePlayUtilityFingerprint.kt index eaefab9b2..efdc5a7c1 100644 --- a/src/main/kotlin/app/revanced/patches/music/misc/microg/fingerprints/GooglePlayUtilityFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/misc/microg/fingerprints/GooglePlayUtilityFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.music.misc.microg.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags object GooglePlayUtilityFingerprint : MethodFingerprint( "I", diff --git a/src/main/kotlin/app/revanced/patches/music/misc/microg/fingerprints/ServiceCheckFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/misc/microg/fingerprints/ServiceCheckFingerprint.kt index dd0833144..5075d5b50 100644 --- a/src/main/kotlin/app/revanced/patches/music/misc/microg/fingerprints/ServiceCheckFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/misc/microg/fingerprints/ServiceCheckFingerprint.kt @@ -3,7 +3,7 @@ package app.revanced.patches.music.misc.microg.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.annotation.FuzzyPatternScanMethod import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags @FuzzyPatternScanMethod(2) // FIXME: Test this threshold and find the best value. diff --git a/src/main/kotlin/app/revanced/patches/music/premium/backgroundplay/fingerprints/BackgroundPlaybackDisableFingerprint.kt b/src/main/kotlin/app/revanced/patches/music/premium/backgroundplay/fingerprints/BackgroundPlaybackDisableFingerprint.kt index fdaea7760..6693fb09c 100644 --- a/src/main/kotlin/app/revanced/patches/music/premium/backgroundplay/fingerprints/BackgroundPlaybackDisableFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/music/premium/backgroundplay/fingerprints/BackgroundPlaybackDisableFingerprint.kt @@ -3,8 +3,8 @@ package app.revanced.patches.music.premium.backgroundplay.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.annotation.FuzzyPatternScanMethod import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode @FuzzyPatternScanMethod(2) // FIXME: Test this threshold and find the best value. diff --git a/src/main/kotlin/app/revanced/patches/nfctoolsse/misc/pro/fingerprints/IsLicenseRegisteredFingerprint.kt b/src/main/kotlin/app/revanced/patches/nfctoolsse/misc/pro/fingerprints/IsLicenseRegisteredFingerprint.kt index fd6089e39..914e0ca3c 100644 --- a/src/main/kotlin/app/revanced/patches/nfctoolsse/misc/pro/fingerprints/IsLicenseRegisteredFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/nfctoolsse/misc/pro/fingerprints/IsLicenseRegisteredFingerprint.kt @@ -1,7 +1,7 @@ package app.revanced.patches.nfctoolsse.misc.pro.fingerprints import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags object IsLicenseRegisteredFingerprint : MethodFingerprint( returnType = "Z", diff --git a/src/main/kotlin/app/revanced/patches/photomath/detection/signature/fingerprints/CheckSignatureFingerprint.kt b/src/main/kotlin/app/revanced/patches/photomath/detection/signature/fingerprints/CheckSignatureFingerprint.kt index df2445be7..3bb7e92f6 100644 --- a/src/main/kotlin/app/revanced/patches/photomath/detection/signature/fingerprints/CheckSignatureFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/photomath/detection/signature/fingerprints/CheckSignatureFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.photomath.detection.signature.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object CheckSignatureFingerprint : MethodFingerprint( returnType = "V", diff --git a/src/main/kotlin/app/revanced/patches/photomath/detection/signature/patch/SignatureDetectionPatch.kt b/src/main/kotlin/app/revanced/patches/photomath/detection/signature/patch/SignatureDetectionPatch.kt index 5d2d5b03f..7a61dfcef 100644 --- a/src/main/kotlin/app/revanced/patches/photomath/detection/signature/patch/SignatureDetectionPatch.kt +++ b/src/main/kotlin/app/revanced/patches/photomath/detection/signature/patch/SignatureDetectionPatch.kt @@ -9,7 +9,7 @@ import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.PatchResult import app.revanced.patcher.patch.PatchResultSuccess import app.revanced.patches.photomath.detection.signature.fingerprints.CheckSignatureFingerprint -import org.jf.dexlib2.iface.instruction.OneRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction @Description("Disables detection of incorrect signature.") class SignatureDetectionPatch : BytecodePatch( diff --git a/src/main/kotlin/app/revanced/patches/photomath/misc/unlockplus/fingerprints/IsPlusUnlockedFingerprint.kt b/src/main/kotlin/app/revanced/patches/photomath/misc/unlockplus/fingerprints/IsPlusUnlockedFingerprint.kt index 9f9dddffa..26dc4f013 100644 --- a/src/main/kotlin/app/revanced/patches/photomath/misc/unlockplus/fingerprints/IsPlusUnlockedFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/photomath/misc/unlockplus/fingerprints/IsPlusUnlockedFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.photomath.misc.unlockplus.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags object IsPlusUnlockedFingerprint : MethodFingerprint( returnType = "Z", diff --git a/src/main/kotlin/app/revanced/patches/pixiv/ads/fingerprints/IsNotPremiumFingerprint.kt b/src/main/kotlin/app/revanced/patches/pixiv/ads/fingerprints/IsNotPremiumFingerprint.kt index 453ec7fe3..cd827cd41 100644 --- a/src/main/kotlin/app/revanced/patches/pixiv/ads/fingerprints/IsNotPremiumFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/pixiv/ads/fingerprints/IsNotPremiumFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.pixiv.ads.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags object IsNotPremiumFingerprint : MethodFingerprint( diff --git a/src/main/kotlin/app/revanced/patches/reddit/ad/general/fingerprints/NewAdPostFingerprint.kt b/src/main/kotlin/app/revanced/patches/reddit/ad/general/fingerprints/NewAdPostFingerprint.kt index 130aba52b..5657bb988 100644 --- a/src/main/kotlin/app/revanced/patches/reddit/ad/general/fingerprints/NewAdPostFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/reddit/ad/general/fingerprints/NewAdPostFingerprint.kt @@ -1,7 +1,7 @@ package app.revanced.patches.reddit.ad.general.fingerprints import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.Opcode object NewAdPostFingerprint : MethodFingerprint( opcodes = listOf(Opcode.INVOKE_VIRTUAL), diff --git a/src/main/kotlin/app/revanced/patches/reddit/ad/general/patch/HideAdsPatch.kt b/src/main/kotlin/app/revanced/patches/reddit/ad/general/patch/HideAdsPatch.kt index 3fb1c2140..f594d9bf2 100644 --- a/src/main/kotlin/app/revanced/patches/reddit/ad/general/patch/HideAdsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/reddit/ad/general/patch/HideAdsPatch.kt @@ -16,11 +16,11 @@ import app.revanced.patches.reddit.ad.comments.patch.HideCommentAdsPatch import app.revanced.patches.reddit.ad.general.annotations.HideAdsCompatibility import app.revanced.patches.reddit.ad.general.fingerprints.AdPostFingerprint import app.revanced.patches.reddit.ad.general.fingerprints.NewAdPostFingerprint -import org.jf.dexlib2.Opcode -import org.jf.dexlib2.iface.instruction.ReferenceInstruction -import org.jf.dexlib2.iface.instruction.formats.Instruction22c -import org.jf.dexlib2.iface.reference.FieldReference -import org.jf.dexlib2.iface.reference.MethodReference +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction22c +import com.android.tools.smali.dexlib2.iface.reference.FieldReference +import com.android.tools.smali.dexlib2.iface.reference.MethodReference @Patch @Name("Hide ads") diff --git a/src/main/kotlin/app/revanced/patches/reddit/customclients/baconreader/api/patch/SpoofClientPatch.kt b/src/main/kotlin/app/revanced/patches/reddit/customclients/baconreader/api/patch/SpoofClientPatch.kt index 39b197c49..40365bb6e 100644 --- a/src/main/kotlin/app/revanced/patches/reddit/customclients/baconreader/api/patch/SpoofClientPatch.kt +++ b/src/main/kotlin/app/revanced/patches/reddit/customclients/baconreader/api/patch/SpoofClientPatch.kt @@ -13,7 +13,7 @@ import app.revanced.patches.reddit.customclients.AbstractSpoofClientPatch import app.revanced.patches.reddit.customclients.SpoofClientAnnotation import app.revanced.patches.reddit.customclients.baconreader.api.fingerprints.GetAuthorizationUrlFingerprint import app.revanced.patches.reddit.customclients.baconreader.api.fingerprints.RequestTokenFingerprint -import org.jf.dexlib2.iface.instruction.OneRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction @SpoofClientAnnotation diff --git a/src/main/kotlin/app/revanced/patches/reddit/customclients/infinityforreddit/api/patch/SpoofClientPatch.kt b/src/main/kotlin/app/revanced/patches/reddit/customclients/infinityforreddit/api/patch/SpoofClientPatch.kt index 88c346981..b17709188 100644 --- a/src/main/kotlin/app/revanced/patches/reddit/customclients/infinityforreddit/api/patch/SpoofClientPatch.kt +++ b/src/main/kotlin/app/revanced/patches/reddit/customclients/infinityforreddit/api/patch/SpoofClientPatch.kt @@ -13,7 +13,7 @@ import app.revanced.patches.reddit.customclients.AbstractSpoofClientPatch import app.revanced.patches.reddit.customclients.SpoofClientAnnotation import app.revanced.patches.reddit.customclients.infinityforreddit.api.fingerprints.GetHttpBasicAuthHeaderFingerprint import app.revanced.patches.reddit.customclients.infinityforreddit.api.fingerprints.LoginActivityOnCreateFingerprint -import org.jf.dexlib2.iface.instruction.OneRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction @SpoofClientAnnotation @Description("Spoofs the client in order to allow logging in. " + diff --git a/src/main/kotlin/app/revanced/patches/reddit/customclients/joeyforreddit/ads/fingerprints/IsAdFreeUserFingerprint.kt b/src/main/kotlin/app/revanced/patches/reddit/customclients/joeyforreddit/ads/fingerprints/IsAdFreeUserFingerprint.kt index 4c625220d..585a26e47 100644 --- a/src/main/kotlin/app/revanced/patches/reddit/customclients/joeyforreddit/ads/fingerprints/IsAdFreeUserFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/reddit/customclients/joeyforreddit/ads/fingerprints/IsAdFreeUserFingerprint.kt @@ -1,7 +1,7 @@ package app.revanced.patches.reddit.customclients.joeyforreddit.ads.fingerprints import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags object IsAdFreeUserFingerprint : MethodFingerprint( returnType = "Z", diff --git a/src/main/kotlin/app/revanced/patches/reddit/customclients/joeyforreddit/api/fingerprints/GetClientIdFingerprint.kt b/src/main/kotlin/app/revanced/patches/reddit/customclients/joeyforreddit/api/fingerprints/GetClientIdFingerprint.kt index 861bb0dd7..f245a9497 100644 --- a/src/main/kotlin/app/revanced/patches/reddit/customclients/joeyforreddit/api/fingerprints/GetClientIdFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/reddit/customclients/joeyforreddit/api/fingerprints/GetClientIdFingerprint.kt @@ -1,8 +1,8 @@ package app.revanced.patches.reddit.customclients.joeyforreddit.api.fingerprints import app.revanced.patcher.extensions.or -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint object GetClientIdFingerprint : MethodFingerprint( diff --git a/src/main/kotlin/app/revanced/patches/reddit/customclients/joeyforreddit/detection/piracy/fingerprints/PiracyDetectionFingerprint.kt b/src/main/kotlin/app/revanced/patches/reddit/customclients/joeyforreddit/detection/piracy/fingerprints/PiracyDetectionFingerprint.kt index dfd1d4afc..930f22ed2 100644 --- a/src/main/kotlin/app/revanced/patches/reddit/customclients/joeyforreddit/detection/piracy/fingerprints/PiracyDetectionFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/reddit/customclients/joeyforreddit/detection/piracy/fingerprints/PiracyDetectionFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.reddit.customclients.joeyforreddit.detection.piracy import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object PiracyDetectionFingerprint : MethodFingerprint( returnType = "V", diff --git a/src/main/kotlin/app/revanced/patches/reddit/customclients/redditisfun/api/fingerprints/GetUserAgentFingerprint.kt b/src/main/kotlin/app/revanced/patches/reddit/customclients/redditisfun/api/fingerprints/GetUserAgentFingerprint.kt index 24609d686..54852443a 100644 --- a/src/main/kotlin/app/revanced/patches/reddit/customclients/redditisfun/api/fingerprints/GetUserAgentFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/reddit/customclients/redditisfun/api/fingerprints/GetUserAgentFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.reddit.customclients.redditisfun.api.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object GetUserAgentFingerprint : MethodFingerprint( "Ljava/lang/String;", diff --git a/src/main/kotlin/app/revanced/patches/reddit/customclients/redditisfun/api/patch/SpoofClientPatch.kt b/src/main/kotlin/app/revanced/patches/reddit/customclients/redditisfun/api/patch/SpoofClientPatch.kt index 66702d8f7..1c166b13c 100644 --- a/src/main/kotlin/app/revanced/patches/reddit/customclients/redditisfun/api/patch/SpoofClientPatch.kt +++ b/src/main/kotlin/app/revanced/patches/reddit/customclients/redditisfun/api/patch/SpoofClientPatch.kt @@ -16,7 +16,7 @@ import app.revanced.patches.reddit.customclients.SpoofClientAnnotation import app.revanced.patches.reddit.customclients.redditisfun.api.fingerprints.BasicAuthorizationFingerprint import app.revanced.patches.reddit.customclients.redditisfun.api.fingerprints.BuildAuthorizationStringFingerprint import app.revanced.patches.reddit.customclients.redditisfun.api.fingerprints.GetUserAgentFingerprint -import org.jf.dexlib2.iface.instruction.OneRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction @SpoofClientAnnotation @Description("Spoofs the client in order to allow logging in. " + diff --git a/src/main/kotlin/app/revanced/patches/reddit/customclients/relayforreddit/api/patch/SpoofClientPatch.kt b/src/main/kotlin/app/revanced/patches/reddit/customclients/relayforreddit/api/patch/SpoofClientPatch.kt index 9c4fdfe54..d1d07ae58 100644 --- a/src/main/kotlin/app/revanced/patches/reddit/customclients/relayforreddit/api/patch/SpoofClientPatch.kt +++ b/src/main/kotlin/app/revanced/patches/reddit/customclients/relayforreddit/api/patch/SpoofClientPatch.kt @@ -15,7 +15,7 @@ import app.revanced.patches.reddit.customclients.relayforreddit.api.fingerprints import app.revanced.patches.reddit.customclients.relayforreddit.api.fingerprints.GetLoggedOutBearerTokenFingerprint import app.revanced.patches.reddit.customclients.relayforreddit.api.fingerprints.GetRefreshTokenFingerprint import app.revanced.patches.reddit.customclients.relayforreddit.api.fingerprints.LoginActivityClientIdFingerprint -import org.jf.dexlib2.iface.instruction.OneRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction @SpoofClientAnnotation @Description("Spoofs the client in order to allow logging in. " + diff --git a/src/main/kotlin/app/revanced/patches/reddit/customclients/syncforreddit/ads/fingerprints/IsAdsEnabledFingerprint.kt b/src/main/kotlin/app/revanced/patches/reddit/customclients/syncforreddit/ads/fingerprints/IsAdsEnabledFingerprint.kt index 40c98bc2b..2c150d1e5 100644 --- a/src/main/kotlin/app/revanced/patches/reddit/customclients/syncforreddit/ads/fingerprints/IsAdsEnabledFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/reddit/customclients/syncforreddit/ads/fingerprints/IsAdsEnabledFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.reddit.customclients.syncforreddit.ads.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags object IsAdsEnabledFingerprint : MethodFingerprint( returnType = "Z", diff --git a/src/main/kotlin/app/revanced/patches/reddit/customclients/syncforreddit/api/patch/SpoofClientPatch.kt b/src/main/kotlin/app/revanced/patches/reddit/customclients/syncforreddit/api/patch/SpoofClientPatch.kt index 2f1ec7a1b..63380ea55 100644 --- a/src/main/kotlin/app/revanced/patches/reddit/customclients/syncforreddit/api/patch/SpoofClientPatch.kt +++ b/src/main/kotlin/app/revanced/patches/reddit/customclients/syncforreddit/api/patch/SpoofClientPatch.kt @@ -18,9 +18,9 @@ import app.revanced.patches.reddit.customclients.SpoofClientAnnotation import app.revanced.patches.reddit.customclients.syncforreddit.api.fingerprints.GetAuthorizationStringFingerprint import app.revanced.patches.reddit.customclients.syncforreddit.api.fingerprints.GetBearerTokenFingerprint import app.revanced.patches.reddit.customclients.syncforreddit.detection.piracy.patch.DisablePiracyDetectionPatch -import org.jf.dexlib2.iface.instruction.OneRegisterInstruction -import org.jf.dexlib2.iface.instruction.ReferenceInstruction -import org.jf.dexlib2.iface.reference.StringReference +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction +import com.android.tools.smali.dexlib2.iface.reference.StringReference import java.util.* @SpoofClientAnnotation diff --git a/src/main/kotlin/app/revanced/patches/reddit/customclients/syncforreddit/detection/piracy/fingerprints/PiracyDetectionFingerprint.kt b/src/main/kotlin/app/revanced/patches/reddit/customclients/syncforreddit/detection/piracy/fingerprints/PiracyDetectionFingerprint.kt index f420ce16b..6251c8b29 100644 --- a/src/main/kotlin/app/revanced/patches/reddit/customclients/syncforreddit/detection/piracy/fingerprints/PiracyDetectionFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/reddit/customclients/syncforreddit/detection/piracy/fingerprints/PiracyDetectionFingerprint.kt @@ -2,9 +2,9 @@ package app.revanced.patches.reddit.customclients.syncforreddit.detection.piracy import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode -import org.jf.dexlib2.iface.instruction.ReferenceInstruction +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction object PiracyDetectionFingerprint : MethodFingerprint( returnType = "V", diff --git a/src/main/kotlin/app/revanced/patches/shared/fingerprints/WatchWhileActivityFingerprint.kt b/src/main/kotlin/app/revanced/patches/shared/fingerprints/WatchWhileActivityFingerprint.kt index 9aec2409a..eab370526 100644 --- a/src/main/kotlin/app/revanced/patches/shared/fingerprints/WatchWhileActivityFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/shared/fingerprints/WatchWhileActivityFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.shared.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags object WatchWhileActivityFingerprint : MethodFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, diff --git a/src/main/kotlin/app/revanced/patches/shared/integrations/patch/AbstractIntegrationsPatch.kt b/src/main/kotlin/app/revanced/patches/shared/integrations/patch/AbstractIntegrationsPatch.kt index bff3bd199..2baf53996 100644 --- a/src/main/kotlin/app/revanced/patches/shared/integrations/patch/AbstractIntegrationsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/shared/integrations/patch/AbstractIntegrationsPatch.kt @@ -9,9 +9,9 @@ import app.revanced.patcher.patch.PatchResult import app.revanced.patcher.patch.PatchResultError import app.revanced.patcher.patch.PatchResultSuccess import app.revanced.patches.shared.integrations.patch.AbstractIntegrationsPatch.IntegrationsFingerprint.RegisterResolver -import org.jf.dexlib2.Opcode -import org.jf.dexlib2.iface.ClassDef -import org.jf.dexlib2.iface.Method +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.ClassDef +import com.android.tools.smali.dexlib2.iface.Method @Description("Applies mandatory patches to implement the ReVanced integrations into the application.") abstract class AbstractIntegrationsPatch( diff --git a/src/main/kotlin/app/revanced/patches/shared/misc/fix/verticalscroll/fingerprints/CanScrollVerticallyFingerprint.kt b/src/main/kotlin/app/revanced/patches/shared/misc/fix/verticalscroll/fingerprints/CanScrollVerticallyFingerprint.kt index c58581081..f96e2d9d0 100644 --- a/src/main/kotlin/app/revanced/patches/shared/misc/fix/verticalscroll/fingerprints/CanScrollVerticallyFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/shared/misc/fix/verticalscroll/fingerprints/CanScrollVerticallyFingerprint.kt @@ -3,8 +3,8 @@ package app.revanced.patches.shared.misc.fix.verticalscroll.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object CanScrollVerticallyFingerprint : MethodFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, diff --git a/src/main/kotlin/app/revanced/patches/shared/misc/fix/verticalscroll/patch/VerticalScrollPatch.kt b/src/main/kotlin/app/revanced/patches/shared/misc/fix/verticalscroll/patch/VerticalScrollPatch.kt index f33bb09b3..de8cdde11 100644 --- a/src/main/kotlin/app/revanced/patches/shared/misc/fix/verticalscroll/patch/VerticalScrollPatch.kt +++ b/src/main/kotlin/app/revanced/patches/shared/misc/fix/verticalscroll/patch/VerticalScrollPatch.kt @@ -10,7 +10,7 @@ import app.revanced.patcher.patch.PatchResult import app.revanced.patcher.patch.PatchResultSuccess import app.revanced.patches.shared.misc.fix.verticalscroll.annotations.VerticalScrollCompatibility import app.revanced.patches.shared.misc.fix.verticalscroll.fingerprints.CanScrollVerticallyFingerprint -import org.jf.dexlib2.iface.instruction.OneRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction @Description("Fixes issues with refreshing the feed when the first component is of type EmptyComponent.") @VerticalScrollCompatibility diff --git a/src/main/kotlin/app/revanced/patches/songpal/badge/fingerprints/CreateTabsFingerprint.kt b/src/main/kotlin/app/revanced/patches/songpal/badge/fingerprints/CreateTabsFingerprint.kt index 59f82c3aa..b85e7464a 100644 --- a/src/main/kotlin/app/revanced/patches/songpal/badge/fingerprints/CreateTabsFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/songpal/badge/fingerprints/CreateTabsFingerprint.kt @@ -2,10 +2,10 @@ package app.revanced.patches.songpal.badge.fingerprints import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint import app.revanced.patches.songpal.badge.patch.BadgeTabPatch -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode -import org.jf.dexlib2.iface.instruction.ReferenceInstruction -import org.jf.dexlib2.iface.reference.MethodReference +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction +import com.android.tools.smali.dexlib2.iface.reference.MethodReference // Located @ ub.i0.h#p (9.5.0) object CreateTabsFingerprint : MethodFingerprint( diff --git a/src/main/kotlin/app/revanced/patches/songpal/badge/fingerprints/ShowNotificationFingerprint.kt b/src/main/kotlin/app/revanced/patches/songpal/badge/fingerprints/ShowNotificationFingerprint.kt index d480430de..02920a8ef 100644 --- a/src/main/kotlin/app/revanced/patches/songpal/badge/fingerprints/ShowNotificationFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/songpal/badge/fingerprints/ShowNotificationFingerprint.kt @@ -2,11 +2,11 @@ package app.revanced.patches.songpal.badge.fingerprints import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint import app.revanced.patches.songpal.badge.fingerprints.ShowNotificationFingerprint.expectedReference -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode -import org.jf.dexlib2.iface.instruction.ReferenceInstruction -import org.jf.dexlib2.iface.reference.MethodReference -import org.jf.dexlib2.immutable.reference.ImmutableMethodReference +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction +import com.android.tools.smali.dexlib2.iface.reference.MethodReference +import com.android.tools.smali.dexlib2.immutable.reference.ImmutableMethodReference // Located @ com.sony.songpal.mdr.vim.activity.MdrRemoteBaseActivity.e#run (9.5.0) object ShowNotificationFingerprint : MethodFingerprint( diff --git a/src/main/kotlin/app/revanced/patches/spotify/lite/ondemand/fingerprints/OnDemandFingerprint.kt b/src/main/kotlin/app/revanced/patches/spotify/lite/ondemand/fingerprints/OnDemandFingerprint.kt index 099eaa438..129579344 100644 --- a/src/main/kotlin/app/revanced/patches/spotify/lite/ondemand/fingerprints/OnDemandFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/spotify/lite/ondemand/fingerprints/OnDemandFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.spotify.lite.ondemand.fingerprints import app.revanced.patcher.fingerprint.method.annotation.FuzzyPatternScanMethod import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.Opcode @FuzzyPatternScanMethod(2) object OnDemandFingerprint : MethodFingerprint( diff --git a/src/main/kotlin/app/revanced/patches/spotify/premium_navbar_tab/patch/PremiumNavbarTabPatch.kt b/src/main/kotlin/app/revanced/patches/spotify/premium_navbar_tab/patch/PremiumNavbarTabPatch.kt index 5c3376d63..9383029a3 100644 --- a/src/main/kotlin/app/revanced/patches/spotify/premium_navbar_tab/patch/PremiumNavbarTabPatch.kt +++ b/src/main/kotlin/app/revanced/patches/spotify/premium_navbar_tab/patch/PremiumNavbarTabPatch.kt @@ -14,8 +14,8 @@ import app.revanced.patches.spotify.premium_navbar_tab.annotations.PremiumNavbar import app.revanced.patches.spotify.premium_navbar_tab.fingerprints.AddPremiumNavbarTabFingerprint import app.revanced.patches.spotify.premium_navbar_tab.fingerprints.AddPremiumNavbarTabParentFingerprint import app.revanced.patches.shared.mapping.misc.patch.ResourceMappingPatch -import org.jf.dexlib2.Opcode -import org.jf.dexlib2.iface.instruction.WideLiteralInstruction +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.instruction.WideLiteralInstruction @Patch @Name("Hide premium navbar") diff --git a/src/main/kotlin/app/revanced/patches/tiktok/ad/patch/HideAdsPatch.kt b/src/main/kotlin/app/revanced/patches/tiktok/ad/patch/HideAdsPatch.kt index 84fedb65c..194f20d65 100644 --- a/src/main/kotlin/app/revanced/patches/tiktok/ad/patch/HideAdsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/tiktok/ad/patch/HideAdsPatch.kt @@ -12,10 +12,10 @@ import app.revanced.patcher.patch.annotations.Patch import app.revanced.patches.tiktok.ad.annotations.HideAdsCompatibility import app.revanced.patches.tiktok.ad.fingerprints.ConvertHelpFeedItemListFingerprint import app.revanced.patches.tiktok.ad.fingerprints.FeedItemListCloneFingerprint -import org.jf.dexlib2.Opcode -import org.jf.dexlib2.iface.instruction.ReferenceInstruction -import org.jf.dexlib2.iface.instruction.TwoRegisterInstruction -import org.jf.dexlib2.iface.reference.FieldReference +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction +import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction +import com.android.tools.smali.dexlib2.iface.reference.FieldReference @Patch @Name("Hide ads") diff --git a/src/main/kotlin/app/revanced/patches/tiktok/feedfilter/fingerprints/FeedApiServiceLIZFingerprint.kt b/src/main/kotlin/app/revanced/patches/tiktok/feedfilter/fingerprints/FeedApiServiceLIZFingerprint.kt index 30854e0c3..a305ff53d 100644 --- a/src/main/kotlin/app/revanced/patches/tiktok/feedfilter/fingerprints/FeedApiServiceLIZFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/tiktok/feedfilter/fingerprints/FeedApiServiceLIZFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.tiktok.feedfilter.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags object FeedApiServiceLIZFingerprint : MethodFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.STATIC or AccessFlags.SYNTHETIC, diff --git a/src/main/kotlin/app/revanced/patches/tiktok/feedfilter/patch/FeedFilterPatch.kt b/src/main/kotlin/app/revanced/patches/tiktok/feedfilter/patch/FeedFilterPatch.kt index 21fb62f1f..bc8f13290 100644 --- a/src/main/kotlin/app/revanced/patches/tiktok/feedfilter/patch/FeedFilterPatch.kt +++ b/src/main/kotlin/app/revanced/patches/tiktok/feedfilter/patch/FeedFilterPatch.kt @@ -14,8 +14,8 @@ import app.revanced.patches.tiktok.feedfilter.fingerprints.FeedApiServiceLIZFing import app.revanced.patches.tiktok.misc.integrations.patch.IntegrationsPatch import app.revanced.patches.tiktok.misc.settings.fingerprints.SettingsStatusLoadFingerprint import app.revanced.patches.tiktok.misc.settings.patch.SettingsPatch -import org.jf.dexlib2.Opcode -import org.jf.dexlib2.iface.instruction.OneRegisterInstruction +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction @Patch @DependsOn([IntegrationsPatch::class, SettingsPatch::class]) diff --git a/src/main/kotlin/app/revanced/patches/tiktok/interaction/downloads/fingerprints/ACLCommonShareFingerprint.kt b/src/main/kotlin/app/revanced/patches/tiktok/interaction/downloads/fingerprints/ACLCommonShareFingerprint.kt index d5219ff3c..457603c96 100644 --- a/src/main/kotlin/app/revanced/patches/tiktok/interaction/downloads/fingerprints/ACLCommonShareFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/tiktok/interaction/downloads/fingerprints/ACLCommonShareFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.tiktok.interaction.downloads.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags object ACLCommonShareFingerprint : MethodFingerprint( "I", diff --git a/src/main/kotlin/app/revanced/patches/tiktok/interaction/downloads/fingerprints/ACLCommonShareFingerprint2.kt b/src/main/kotlin/app/revanced/patches/tiktok/interaction/downloads/fingerprints/ACLCommonShareFingerprint2.kt index a0e29c6a2..774ffd45f 100644 --- a/src/main/kotlin/app/revanced/patches/tiktok/interaction/downloads/fingerprints/ACLCommonShareFingerprint2.kt +++ b/src/main/kotlin/app/revanced/patches/tiktok/interaction/downloads/fingerprints/ACLCommonShareFingerprint2.kt @@ -4,7 +4,7 @@ import app.revanced.patcher.annotation.Name import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint import app.revanced.patches.tiktok.interaction.downloads.annotations.DownloadsCompatibility -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags @Name("Acl common share get show type") @DownloadsCompatibility diff --git a/src/main/kotlin/app/revanced/patches/tiktok/interaction/downloads/fingerprints/ACLCommonShareFingerprint3.kt b/src/main/kotlin/app/revanced/patches/tiktok/interaction/downloads/fingerprints/ACLCommonShareFingerprint3.kt index df0c093cd..3102f378b 100644 --- a/src/main/kotlin/app/revanced/patches/tiktok/interaction/downloads/fingerprints/ACLCommonShareFingerprint3.kt +++ b/src/main/kotlin/app/revanced/patches/tiktok/interaction/downloads/fingerprints/ACLCommonShareFingerprint3.kt @@ -4,7 +4,7 @@ import app.revanced.patcher.annotation.Name import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint import app.revanced.patches.tiktok.interaction.downloads.annotations.DownloadsCompatibility -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags @Name("Acl common share get transcode") @DownloadsCompatibility diff --git a/src/main/kotlin/app/revanced/patches/tiktok/interaction/downloads/fingerprints/DownloadPathParentFingerprint.kt b/src/main/kotlin/app/revanced/patches/tiktok/interaction/downloads/fingerprints/DownloadPathParentFingerprint.kt index 8daff09e4..dd71a308b 100644 --- a/src/main/kotlin/app/revanced/patches/tiktok/interaction/downloads/fingerprints/DownloadPathParentFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/tiktok/interaction/downloads/fingerprints/DownloadPathParentFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.tiktok.interaction.downloads.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags object DownloadPathParentFingerprint : MethodFingerprint( "V", diff --git a/src/main/kotlin/app/revanced/patches/tiktok/interaction/downloads/patch/DownloadsPatch.kt b/src/main/kotlin/app/revanced/patches/tiktok/interaction/downloads/patch/DownloadsPatch.kt index 9fc217eaa..95147aee6 100644 --- a/src/main/kotlin/app/revanced/patches/tiktok/interaction/downloads/patch/DownloadsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/tiktok/interaction/downloads/patch/DownloadsPatch.kt @@ -24,10 +24,10 @@ import app.revanced.patches.tiktok.interaction.downloads.fingerprints.DownloadPa import app.revanced.patches.tiktok.misc.integrations.patch.IntegrationsPatch import app.revanced.patches.tiktok.misc.settings.fingerprints.SettingsStatusLoadFingerprint import app.revanced.patches.tiktok.misc.settings.patch.SettingsPatch -import org.jf.dexlib2.Opcode -import org.jf.dexlib2.iface.instruction.OneRegisterInstruction -import org.jf.dexlib2.iface.instruction.ReferenceInstruction -import org.jf.dexlib2.iface.reference.StringReference +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction +import com.android.tools.smali.dexlib2.iface.reference.StringReference @Patch @DependsOn([IntegrationsPatch::class, SettingsPatch::class]) diff --git a/src/main/kotlin/app/revanced/patches/tiktok/interaction/speed/fingerprints/SpeedControlParentFingerprint.kt b/src/main/kotlin/app/revanced/patches/tiktok/interaction/speed/fingerprints/SpeedControlParentFingerprint.kt index 2a395194b..21508a928 100644 --- a/src/main/kotlin/app/revanced/patches/tiktok/interaction/speed/fingerprints/SpeedControlParentFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/tiktok/interaction/speed/fingerprints/SpeedControlParentFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.tiktok.interaction.speed.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags object SpeedControlParentFingerprint : MethodFingerprint( returnType = "L", diff --git a/src/main/kotlin/app/revanced/patches/tiktok/interaction/speed/patch/PlaybackSpeedPatch.kt b/src/main/kotlin/app/revanced/patches/tiktok/interaction/speed/patch/PlaybackSpeedPatch.kt index f0a1c9eec..dcbdb9dc6 100644 --- a/src/main/kotlin/app/revanced/patches/tiktok/interaction/speed/patch/PlaybackSpeedPatch.kt +++ b/src/main/kotlin/app/revanced/patches/tiktok/interaction/speed/patch/PlaybackSpeedPatch.kt @@ -12,7 +12,7 @@ import app.revanced.patcher.patch.annotations.Patch import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod import app.revanced.patches.tiktok.interaction.speed.annotations.PlaybackSpeedCompatibility import app.revanced.patches.tiktok.interaction.speed.fingerprints.SpeedControlParentFingerprint -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.Opcode @Patch @Name("Playback speed") diff --git a/src/main/kotlin/app/revanced/patches/tiktok/misc/login/fixgoogle/fingerprints/GoogleAuthAvailableFingerprint.kt b/src/main/kotlin/app/revanced/patches/tiktok/misc/login/fixgoogle/fingerprints/GoogleAuthAvailableFingerprint.kt index 24dd8a7de..ba1c00934 100644 --- a/src/main/kotlin/app/revanced/patches/tiktok/misc/login/fixgoogle/fingerprints/GoogleAuthAvailableFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/tiktok/misc/login/fixgoogle/fingerprints/GoogleAuthAvailableFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.tiktok.misc.login.fixgoogle.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags object GoogleAuthAvailableFingerprint : MethodFingerprint( returnType = "Z", diff --git a/src/main/kotlin/app/revanced/patches/tiktok/misc/login/fixgoogle/fingerprints/GoogleOneTapAuthAvailableFingerprint.kt b/src/main/kotlin/app/revanced/patches/tiktok/misc/login/fixgoogle/fingerprints/GoogleOneTapAuthAvailableFingerprint.kt index fb677fcb6..253dbdf21 100644 --- a/src/main/kotlin/app/revanced/patches/tiktok/misc/login/fixgoogle/fingerprints/GoogleOneTapAuthAvailableFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/tiktok/misc/login/fixgoogle/fingerprints/GoogleOneTapAuthAvailableFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.tiktok.misc.login.fixgoogle.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags object GoogleOneTapAuthAvailableFingerprint : MethodFingerprint( returnType = "Z", diff --git a/src/main/kotlin/app/revanced/patches/tiktok/misc/settings/fingerprints/AddSettingsEntryFingerprint.kt b/src/main/kotlin/app/revanced/patches/tiktok/misc/settings/fingerprints/AddSettingsEntryFingerprint.kt index ca0e8129e..25e3aa53b 100644 --- a/src/main/kotlin/app/revanced/patches/tiktok/misc/settings/fingerprints/AddSettingsEntryFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/tiktok/misc/settings/fingerprints/AddSettingsEntryFingerprint.kt @@ -1,7 +1,7 @@ package app.revanced.patches.tiktok.misc.settings.fingerprints import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.Opcode object AddSettingsEntryFingerprint : MethodFingerprint( opcodes = listOf( diff --git a/src/main/kotlin/app/revanced/patches/tiktok/misc/settings/patch/SettingsPatch.kt b/src/main/kotlin/app/revanced/patches/tiktok/misc/settings/patch/SettingsPatch.kt index 633cf1e31..def701423 100644 --- a/src/main/kotlin/app/revanced/patches/tiktok/misc/settings/patch/SettingsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/tiktok/misc/settings/patch/SettingsPatch.kt @@ -16,9 +16,9 @@ import app.revanced.patcher.util.smali.ExternalLabel import app.revanced.patches.tiktok.misc.integrations.patch.IntegrationsPatch import app.revanced.patches.tiktok.misc.settings.annotations.SettingsCompatibility import app.revanced.patches.tiktok.misc.settings.fingerprints.* -import org.jf.dexlib2.Opcode -import org.jf.dexlib2.builder.instruction.BuilderInstruction35c -import org.jf.dexlib2.iface.instruction.formats.Instruction35c +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction35c +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction35c @Patch @DependsOn([IntegrationsPatch::class]) diff --git a/src/main/kotlin/app/revanced/patches/tiktok/misc/spoof/sim/patch/SpoofSimPatch.kt b/src/main/kotlin/app/revanced/patches/tiktok/misc/spoof/sim/patch/SpoofSimPatch.kt index cc9d2987f..99b1b772b 100644 --- a/src/main/kotlin/app/revanced/patches/tiktok/misc/spoof/sim/patch/SpoofSimPatch.kt +++ b/src/main/kotlin/app/revanced/patches/tiktok/misc/spoof/sim/patch/SpoofSimPatch.kt @@ -17,10 +17,10 @@ import app.revanced.patches.tiktok.misc.integrations.patch.IntegrationsPatch import app.revanced.patches.tiktok.misc.settings.fingerprints.SettingsStatusLoadFingerprint import app.revanced.patches.tiktok.misc.settings.patch.SettingsPatch import app.revanced.patches.tiktok.misc.spoof.sim.annotations.SpoofSimCompatibility -import org.jf.dexlib2.Opcode -import org.jf.dexlib2.iface.instruction.OneRegisterInstruction -import org.jf.dexlib2.iface.instruction.formats.Instruction35c -import org.jf.dexlib2.iface.reference.MethodReference +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction35c +import com.android.tools.smali.dexlib2.iface.reference.MethodReference @Patch(false) @DependsOn([IntegrationsPatch::class, SettingsPatch::class]) diff --git a/src/main/kotlin/app/revanced/patches/twitch/chat/antidelete/fingerprints/DeletedMessageClickableSpanCtorFingerprint.kt b/src/main/kotlin/app/revanced/patches/twitch/chat/antidelete/fingerprints/DeletedMessageClickableSpanCtorFingerprint.kt index 49e02dd7a..fbbf32d9d 100644 --- a/src/main/kotlin/app/revanced/patches/twitch/chat/antidelete/fingerprints/DeletedMessageClickableSpanCtorFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/twitch/chat/antidelete/fingerprints/DeletedMessageClickableSpanCtorFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.twitch.chat.antidelete.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags object DeletedMessageClickableSpanCtorFingerprint : MethodFingerprint( "V", AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, diff --git a/src/main/kotlin/app/revanced/patches/twitch/misc/settings/bytecode/patch/SettingsPatch.kt b/src/main/kotlin/app/revanced/patches/twitch/misc/settings/bytecode/patch/SettingsPatch.kt index fdcdcc8a9..8f2b90ce8 100644 --- a/src/main/kotlin/app/revanced/patches/twitch/misc/settings/bytecode/patch/SettingsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/twitch/misc/settings/bytecode/patch/SettingsPatch.kt @@ -26,8 +26,8 @@ import app.revanced.patches.twitch.misc.settings.fingerprints.MenuGroupsUpdatedF import app.revanced.patches.twitch.misc.settings.fingerprints.SettingsActivityOnCreateFingerprint import app.revanced.patches.twitch.misc.settings.fingerprints.SettingsMenuItemEnumFingerprint import app.revanced.patches.twitch.misc.settings.resource.patch.SettingsResourcePatch -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.immutable.ImmutableField +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.immutable.ImmutableField import java.io.Closeable @Patch diff --git a/src/main/kotlin/app/revanced/patches/twitch/misc/settings/fingerprints/MenuGroupsOnClickFingerprint.kt b/src/main/kotlin/app/revanced/patches/twitch/misc/settings/fingerprints/MenuGroupsOnClickFingerprint.kt index 6bf971dd6..6868ec26e 100644 --- a/src/main/kotlin/app/revanced/patches/twitch/misc/settings/fingerprints/MenuGroupsOnClickFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/twitch/misc/settings/fingerprints/MenuGroupsOnClickFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.twitch.misc.settings.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags object MenuGroupsOnClickFingerprint : MethodFingerprint( "V", diff --git a/src/main/kotlin/app/revanced/patches/twitter/misc/hook/json/fingerprints/JsonHookPatchFingerprint.kt b/src/main/kotlin/app/revanced/patches/twitter/misc/hook/json/fingerprints/JsonHookPatchFingerprint.kt index 732e7fb6f..b128967b3 100644 --- a/src/main/kotlin/app/revanced/patches/twitter/misc/hook/json/fingerprints/JsonHookPatchFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/twitter/misc/hook/json/fingerprints/JsonHookPatchFingerprint.kt @@ -1,7 +1,7 @@ package app.revanced.patches.twitter.misc.hook.json.fingerprints import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.Opcode object JsonHookPatchFingerprint : MethodFingerprint( customFingerprint = { methodDef, _ -> methodDef.name == "" }, diff --git a/src/main/kotlin/app/revanced/patches/youtube/ad/general/bytecode/patch/HideAdsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/ad/general/bytecode/patch/HideAdsPatch.kt index db9b4045b..1112a5c82 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/ad/general/bytecode/patch/HideAdsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/ad/general/bytecode/patch/HideAdsPatch.kt @@ -15,8 +15,9 @@ import app.revanced.patches.youtube.ad.general.annotation.HideAdsCompatibility import app.revanced.patches.youtube.ad.general.resource.patch.HideAdsResourcePatch import app.revanced.patches.youtube.ad.getpremium.bytecode.patch.HideGetPremiumPatch import app.revanced.patches.youtube.misc.fix.backtoexitgesture.patch.FixBackToExitGesturePatch -import org.jf.dexlib2.iface.instruction.formats.Instruction31i -import org.jf.dexlib2.iface.instruction.formats.Instruction35c +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction31i +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction35c @Patch @@ -37,7 +38,7 @@ class HideAdsPatch : BytecodePatch() { classDef.methods.forEach { method -> with(method.implementation) { this?.instructions?.forEachIndexed { index, instruction -> - if (instruction.opcode != org.jf.dexlib2.Opcode.CONST) + if (instruction.opcode != Opcode.CONST) return@forEachIndexed // Instruction to store the id adAttribution into a register if ((instruction as Instruction31i).wideLiteral != HideAdsResourcePatch.adAttributionId) @@ -47,7 +48,7 @@ class HideAdsPatch : BytecodePatch() { // Call to get the view with the id adAttribution with(instructions.elementAt(insertIndex)) { - if (opcode != org.jf.dexlib2.Opcode.INVOKE_VIRTUAL) + if (opcode != Opcode.INVOKE_VIRTUAL) return@forEachIndexed // Hide the view diff --git a/src/main/kotlin/app/revanced/patches/youtube/ad/getpremium/bytecode/fingerprints/GetPremiumViewFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/ad/getpremium/bytecode/fingerprints/GetPremiumViewFingerprint.kt index 0f32e3e6a..9f578996f 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/ad/getpremium/bytecode/fingerprints/GetPremiumViewFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/ad/getpremium/bytecode/fingerprints/GetPremiumViewFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.youtube.ad.getpremium.bytecode.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object GetPremiumViewFingerprint : MethodFingerprint( accessFlags = AccessFlags.PROTECTED or AccessFlags.FINAL, diff --git a/src/main/kotlin/app/revanced/patches/youtube/ad/getpremium/bytecode/patch/HideGetPremiumVideoAdvertisementPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/ad/getpremium/bytecode/patch/HideGetPremiumVideoAdvertisementPatch.kt index 1aed88895..724a43c13 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/ad/getpremium/bytecode/patch/HideGetPremiumVideoAdvertisementPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/ad/getpremium/bytecode/patch/HideGetPremiumVideoAdvertisementPatch.kt @@ -15,7 +15,7 @@ import app.revanced.patches.youtube.ad.getpremium.annotations.HideGetPremiumComp import app.revanced.patches.youtube.ad.getpremium.bytecode.fingerprints.GetPremiumViewFingerprint import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch import app.revanced.patches.youtube.misc.settings.bytecode.patch.SettingsPatch -import org.jf.dexlib2.iface.instruction.TwoRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction @DependsOn([IntegrationsPatch::class, SettingsPatch::class]) @Name("Hide get premium") diff --git a/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/fingerprints/AccessibilityPlayerProgressTimeFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/fingerprints/AccessibilityPlayerProgressTimeFingerprint.kt index 8b2f5243f..e56b68e50 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/fingerprints/AccessibilityPlayerProgressTimeFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/fingerprints/AccessibilityPlayerProgressTimeFingerprint.kt @@ -3,7 +3,7 @@ package app.revanced.patches.youtube.interaction.seekbar.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patches.youtube.interaction.seekbar.patch.EnableSeekbarTappingResourcePatch import app.revanced.util.patch.LiteralValueFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags object AccessibilityPlayerProgressTimeFingerprint : LiteralValueFingerprint( returnType = "L", diff --git a/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/fingerprints/SeekbarTappingFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/fingerprints/SeekbarTappingFingerprint.kt index 3c8f3ed0b..912514741 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/fingerprints/SeekbarTappingFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/fingerprints/SeekbarTappingFingerprint.kt @@ -2,9 +2,9 @@ package app.revanced.patches.youtube.interaction.seekbar.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode -import org.jf.dexlib2.iface.instruction.NarrowLiteralInstruction +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.instruction.NarrowLiteralInstruction object SeekbarTappingFingerprint : MethodFingerprint( diff --git a/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/patch/EnableSeekbarTappingPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/patch/EnableSeekbarTappingPatch.kt index 51a6b89ff..424c7f32f 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/patch/EnableSeekbarTappingPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/patch/EnableSeekbarTappingPatch.kt @@ -16,10 +16,10 @@ import app.revanced.patches.youtube.interaction.seekbar.annotation.SeekbarTappin import app.revanced.patches.youtube.interaction.seekbar.fingerprints.AccessibilityPlayerProgressTimeFingerprint import app.revanced.patches.youtube.interaction.seekbar.fingerprints.SeekbarTappingFingerprint import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch -import org.jf.dexlib2.Opcode -import org.jf.dexlib2.iface.Method -import org.jf.dexlib2.iface.instruction.NarrowLiteralInstruction -import org.jf.dexlib2.iface.instruction.formats.Instruction35c +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.Method +import com.android.tools.smali.dexlib2.iface.instruction.NarrowLiteralInstruction +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction35c @Patch @DependsOn([IntegrationsPatch::class, EnableSeekbarTappingResourcePatch::class]) diff --git a/src/main/kotlin/app/revanced/patches/youtube/interaction/swipecontrols/fingerprints/SwipeControlsHostActivityFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/interaction/swipecontrols/fingerprints/SwipeControlsHostActivityFingerprint.kt index ad6de5cc3..c2943eb52 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/interaction/swipecontrols/fingerprints/SwipeControlsHostActivityFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/interaction/swipecontrols/fingerprints/SwipeControlsHostActivityFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.youtube.interaction.swipecontrols.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags object SwipeControlsHostActivityFingerprint : MethodFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, diff --git a/src/main/kotlin/app/revanced/patches/youtube/interaction/swipecontrols/patch/bytecode/SwipeControlsBytecodePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/interaction/swipecontrols/patch/bytecode/SwipeControlsBytecodePatch.kt index 198fe8c47..910e9104d 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/interaction/swipecontrols/patch/bytecode/SwipeControlsBytecodePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/interaction/swipecontrols/patch/bytecode/SwipeControlsBytecodePatch.kt @@ -17,8 +17,8 @@ import app.revanced.patches.youtube.interaction.swipecontrols.fingerprints.Swipe import app.revanced.patches.youtube.interaction.swipecontrols.patch.resource.SwipeControlsResourcePatch import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch import app.revanced.patches.youtube.misc.playertype.patch.PlayerTypeHookPatch -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.immutable.ImmutableMethod +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.immutable.ImmutableMethod @Patch @Name("Swipe controls") diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/autocaptions/fingerprints/StartVideoInformerFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/autocaptions/fingerprints/StartVideoInformerFingerprint.kt index 1b1cd1088..31fab1f21 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/autocaptions/fingerprints/StartVideoInformerFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/autocaptions/fingerprints/StartVideoInformerFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.youtube.layout.autocaptions.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object StartVideoInformerFingerprint : MethodFingerprint( "V", AccessFlags.PUBLIC or AccessFlags.FINAL, listOf("L", "L", "L", "L"), listOf( diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/autocaptions/fingerprints/SubtitleButtonControllerFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/autocaptions/fingerprints/SubtitleButtonControllerFingerprint.kt index 48d98f4f3..1d9545c75 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/autocaptions/fingerprints/SubtitleButtonControllerFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/autocaptions/fingerprints/SubtitleButtonControllerFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.youtube.layout.autocaptions.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object SubtitleButtonControllerFingerprint : MethodFingerprint( returnType = "V", diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/autocaptions/fingerprints/SubtitleTrackFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/autocaptions/fingerprints/SubtitleTrackFingerprint.kt index 66ac4f617..4eae5dbca 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/autocaptions/fingerprints/SubtitleTrackFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/autocaptions/fingerprints/SubtitleTrackFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.youtube.layout.autocaptions.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object SubtitleTrackFingerprint : MethodFingerprint( "Z", AccessFlags.PUBLIC or AccessFlags.FINAL, listOf(), listOf( diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/autoplay/patch/HideAutoplayButtonPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/autoplay/patch/HideAutoplayButtonPatch.kt index 39ae7b3c5..9f2c2f2db 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/autoplay/patch/HideAutoplayButtonPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/autoplay/patch/HideAutoplayButtonPatch.kt @@ -20,10 +20,10 @@ import app.revanced.patches.youtube.layout.buttons.autoplay.annotations.Autoplay import app.revanced.patches.youtube.layout.buttons.autoplay.fingerprints.LayoutConstructorFingerprint import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch import app.revanced.patches.youtube.misc.settings.bytecode.patch.SettingsPatch -import org.jf.dexlib2.iface.instruction.Instruction -import org.jf.dexlib2.iface.instruction.OneRegisterInstruction -import org.jf.dexlib2.iface.instruction.ReferenceInstruction -import org.jf.dexlib2.iface.reference.MethodReference +import com.android.tools.smali.dexlib2.iface.instruction.Instruction +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction +import com.android.tools.smali.dexlib2.iface.reference.MethodReference @Patch @DependsOn([IntegrationsPatch::class, SettingsPatch::class, ResourceMappingPatch::class]) diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/captions/patch/HideCaptionsButtonPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/captions/patch/HideCaptionsButtonPatch.kt index 62452075d..d6817e294 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/captions/patch/HideCaptionsButtonPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/captions/patch/HideCaptionsButtonPatch.kt @@ -15,7 +15,7 @@ import app.revanced.patches.youtube.layout.autocaptions.fingerprints.SubtitleBut import app.revanced.patches.youtube.layout.buttons.captions.annotations.HideCaptionsButtonCompatibility import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch import app.revanced.patches.youtube.misc.settings.bytecode.patch.SettingsPatch -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.Opcode @Patch @DependsOn([IntegrationsPatch::class, SettingsPatch::class]) diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/fingerprints/InitializeButtonsFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/fingerprints/InitializeButtonsFingerprint.kt index 1b2241153..4d435d943 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/fingerprints/InitializeButtonsFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/fingerprints/InitializeButtonsFingerprint.kt @@ -3,7 +3,7 @@ package app.revanced.patches.youtube.layout.buttons.navigation.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patches.youtube.layout.buttons.navigation.patch.ResolvePivotBarFingerprintsPatch import app.revanced.util.patch.LiteralValueFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags object InitializeButtonsFingerprint : LiteralValueFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/fingerprints/PivotBarButtonsViewFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/fingerprints/PivotBarButtonsViewFingerprint.kt index 82fd7e1c6..fd16748f1 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/fingerprints/PivotBarButtonsViewFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/fingerprints/PivotBarButtonsViewFingerprint.kt @@ -1,7 +1,7 @@ package app.revanced.patches.youtube.layout.buttons.navigation.fingerprints import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.Opcode object PivotBarButtonsViewFingerprint : MethodFingerprint( opcodes = listOf( diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/fingerprints/PivotBarConstructorFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/fingerprints/PivotBarConstructorFingerprint.kt index 4500faf65..6ada7f7bc 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/fingerprints/PivotBarConstructorFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/fingerprints/PivotBarConstructorFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.youtube.layout.buttons.navigation.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags object PivotBarConstructorFingerprint : MethodFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/fingerprints/PivotBarCreateButtonViewFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/fingerprints/PivotBarCreateButtonViewFingerprint.kt index 21635ef0f..af06e0051 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/fingerprints/PivotBarCreateButtonViewFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/fingerprints/PivotBarCreateButtonViewFingerprint.kt @@ -1,7 +1,7 @@ package app.revanced.patches.youtube.layout.buttons.navigation.fingerprints import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.Opcode object PivotBarCreateButtonViewFingerprint : MethodFingerprint( opcodes = listOf( diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/fingerprints/PivotBarEnumFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/fingerprints/PivotBarEnumFingerprint.kt index af6bb087e..f07f61829 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/fingerprints/PivotBarEnumFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/fingerprints/PivotBarEnumFingerprint.kt @@ -1,7 +1,7 @@ package app.revanced.patches.youtube.layout.buttons.navigation.fingerprints import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.Opcode object PivotBarEnumFingerprint : MethodFingerprint( opcodes = listOf( diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/patch/NavigationButtonsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/patch/NavigationButtonsPatch.kt index ef8fd1fa0..d88b796f0 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/patch/NavigationButtonsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/patch/NavigationButtonsPatch.kt @@ -21,8 +21,8 @@ import app.revanced.patches.youtube.layout.buttons.navigation.utils.InjectionUti import app.revanced.patches.youtube.layout.buttons.navigation.utils.InjectionUtils.injectHook import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch import app.revanced.patches.youtube.misc.settings.bytecode.patch.SettingsPatch -import org.jf.dexlib2.Opcode -import org.jf.dexlib2.iface.instruction.OneRegisterInstruction +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction @Patch @DependsOn( diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/utils/InjectionUtils.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/utils/InjectionUtils.kt index 4b0c9f4ca..f97305c12 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/utils/InjectionUtils.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/utils/InjectionUtils.kt @@ -3,8 +3,8 @@ package app.revanced.patches.youtube.layout.buttons.navigation.utils import app.revanced.patcher.extensions.InstructionExtensions.addInstruction import app.revanced.patcher.extensions.InstructionExtensions.getInstruction import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod -import org.jf.dexlib2.Opcode.MOVE_RESULT_OBJECT -import org.jf.dexlib2.iface.instruction.OneRegisterInstruction +import com.android.tools.smali.dexlib2.Opcode.MOVE_RESULT_OBJECT +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction internal object InjectionUtils { const val REGISTER_TEMPLATE_REPLACEMENT: String = "REGISTER_INDEX" diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/player/hide/fingerprints/PlayerControlsVisibilityModelFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/player/hide/fingerprints/PlayerControlsVisibilityModelFingerprint.kt index bf9d48e44..fd44dc942 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/player/hide/fingerprints/PlayerControlsVisibilityModelFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/player/hide/fingerprints/PlayerControlsVisibilityModelFingerprint.kt @@ -1,7 +1,7 @@ package app.revanced.patches.youtube.layout.buttons.player.hide.fingerprints import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.Opcode object PlayerControlsVisibilityModelFingerprint : MethodFingerprint( opcodes = listOf(Opcode.INVOKE_DIRECT_RANGE), diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/player/hide/patch/HidePlayerButtonsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/player/hide/patch/HidePlayerButtonsPatch.kt index 5c9071295..c1225205d 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/player/hide/patch/HidePlayerButtonsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/player/hide/patch/HidePlayerButtonsPatch.kt @@ -17,7 +17,7 @@ import app.revanced.patches.youtube.layout.buttons.player.hide.annotations.HideP import app.revanced.patches.youtube.layout.buttons.player.hide.fingerprints.PlayerControlsVisibilityModelFingerprint import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch import app.revanced.patches.youtube.misc.settings.bytecode.patch.SettingsPatch -import org.jf.dexlib2.iface.instruction.formats.Instruction3rc +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction3rc @Patch @DependsOn([IntegrationsPatch::class, SettingsPatch::class]) diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/albumcards/bytecode/fingerprints/AlbumCardsFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/albumcards/bytecode/fingerprints/AlbumCardsFingerprint.kt index 6d8cad5c3..c7c808e2e 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/albumcards/bytecode/fingerprints/AlbumCardsFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/albumcards/bytecode/fingerprints/AlbumCardsFingerprint.kt @@ -3,8 +3,8 @@ package app.revanced.patches.youtube.layout.hide.albumcards.bytecode.fingerprint import app.revanced.patcher.extensions.or import app.revanced.patches.youtube.layout.hide.albumcards.resource.patch.AlbumCardsResourcePatch import app.revanced.util.patch.LiteralValueFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object AlbumCardsFingerprint : LiteralValueFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/albumcards/bytecode/patch/AlbumCardsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/albumcards/bytecode/patch/AlbumCardsPatch.kt index e4322b9e1..3521d7fdf 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/albumcards/bytecode/patch/AlbumCardsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/albumcards/bytecode/patch/AlbumCardsPatch.kt @@ -15,7 +15,7 @@ import app.revanced.patches.youtube.layout.hide.albumcards.annotations.AlbumCard import app.revanced.patches.youtube.layout.hide.albumcards.bytecode.fingerprints.AlbumCardsFingerprint import app.revanced.patches.youtube.layout.hide.albumcards.resource.patch.AlbumCardsResourcePatch import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch -import org.jf.dexlib2.iface.instruction.OneRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction @Patch @DependsOn([IntegrationsPatch::class, AlbumCardsResourcePatch::class]) diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/breakingnews/bytecode/fingerprints/BreakingNewsFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/breakingnews/bytecode/fingerprints/BreakingNewsFingerprint.kt index 16ae7019d..2e5592d8c 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/breakingnews/bytecode/fingerprints/BreakingNewsFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/breakingnews/bytecode/fingerprints/BreakingNewsFingerprint.kt @@ -3,8 +3,8 @@ package app.revanced.patches.youtube.layout.hide.breakingnews.bytecode.fingerpri import app.revanced.patcher.extensions.or import app.revanced.patches.youtube.layout.hide.breakingnews.resource.patch.BreakingNewsResourcePatch import app.revanced.util.patch.LiteralValueFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object BreakingNewsFingerprint : LiteralValueFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/breakingnews/bytecode/patch/BreakingNewsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/breakingnews/bytecode/patch/BreakingNewsPatch.kt index c9ababc1f..71921d5e4 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/breakingnews/bytecode/patch/BreakingNewsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/breakingnews/bytecode/patch/BreakingNewsPatch.kt @@ -15,7 +15,7 @@ import app.revanced.patches.youtube.layout.hide.breakingnews.annotations.Breakin import app.revanced.patches.youtube.layout.hide.breakingnews.bytecode.fingerprints.BreakingNewsFingerprint import app.revanced.patches.youtube.layout.hide.breakingnews.resource.patch.BreakingNewsResourcePatch import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch -import org.jf.dexlib2.iface.instruction.OneRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction @Patch @DependsOn([IntegrationsPatch::class, BreakingNewsResourcePatch::class]) diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/crowdfundingbox/bytecode/fingerprints/CrowdfundingBoxFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/crowdfundingbox/bytecode/fingerprints/CrowdfundingBoxFingerprint.kt index 30dc121c3..946b00bef 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/crowdfundingbox/bytecode/fingerprints/CrowdfundingBoxFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/crowdfundingbox/bytecode/fingerprints/CrowdfundingBoxFingerprint.kt @@ -3,8 +3,8 @@ package app.revanced.patches.youtube.layout.hide.crowdfundingbox.bytecode.finger import app.revanced.patcher.extensions.or import app.revanced.patches.youtube.layout.hide.crowdfundingbox.resource.patch.CrowdfundingBoxResourcePatch import app.revanced.util.patch.LiteralValueFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object CrowdfundingBoxFingerprint : LiteralValueFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/crowdfundingbox/bytecode/patch/CrowdfundingBoxPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/crowdfundingbox/bytecode/patch/CrowdfundingBoxPatch.kt index df3d6d1fd..7df006899 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/crowdfundingbox/bytecode/patch/CrowdfundingBoxPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/crowdfundingbox/bytecode/patch/CrowdfundingBoxPatch.kt @@ -15,7 +15,7 @@ import app.revanced.patches.youtube.layout.hide.crowdfundingbox.annotations.Crow import app.revanced.patches.youtube.layout.hide.crowdfundingbox.bytecode.fingerprints.CrowdfundingBoxFingerprint import app.revanced.patches.youtube.layout.hide.crowdfundingbox.resource.patch.CrowdfundingBoxResourcePatch import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch -import org.jf.dexlib2.iface.instruction.TwoRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction @Patch @DependsOn([IntegrationsPatch::class, CrowdfundingBoxResourcePatch::class]) diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/endscreencards/bytecode/fingerprints/LayoutCircleFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/endscreencards/bytecode/fingerprints/LayoutCircleFingerprint.kt index 5469dc111..f2de24985 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/endscreencards/bytecode/fingerprints/LayoutCircleFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/endscreencards/bytecode/fingerprints/LayoutCircleFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.youtube.layout.hide.endscreencards.bytecode.fingerp import app.revanced.patches.youtube.layout.hide.endscreencards.resource.patch.HideEndscreenCardsResourcePatch import app.revanced.util.patch.LiteralValueFingerprint -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.Opcode object LayoutCircleFingerprint : LiteralValueFingerprint( returnType = "Landroid/view/View;", diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/endscreencards/bytecode/fingerprints/LayoutIconFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/endscreencards/bytecode/fingerprints/LayoutIconFingerprint.kt index 90350f4c0..13de055b3 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/endscreencards/bytecode/fingerprints/LayoutIconFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/endscreencards/bytecode/fingerprints/LayoutIconFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.youtube.layout.hide.endscreencards.bytecode.fingerp import app.revanced.patches.youtube.layout.hide.endscreencards.resource.patch.HideEndscreenCardsResourcePatch import app.revanced.util.patch.LiteralValueFingerprint -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.Opcode object LayoutIconFingerprint : LiteralValueFingerprint( returnType = "Landroid/view/View;", diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/endscreencards/bytecode/fingerprints/LayoutVideoFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/endscreencards/bytecode/fingerprints/LayoutVideoFingerprint.kt index 22c9b07b9..b7b54a530 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/endscreencards/bytecode/fingerprints/LayoutVideoFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/endscreencards/bytecode/fingerprints/LayoutVideoFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.youtube.layout.hide.endscreencards.bytecode.fingerp import app.revanced.patches.youtube.layout.hide.endscreencards.resource.patch.HideEndscreenCardsResourcePatch import app.revanced.util.patch.LiteralValueFingerprint -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.Opcode object LayoutVideoFingerprint : LiteralValueFingerprint( returnType = "Landroid/view/View;", diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/endscreencards/bytecode/patch/HideEndscreenCardsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/endscreencards/bytecode/patch/HideEndscreenCardsPatch.kt index acfd9113b..c5eeb6d91 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/endscreencards/bytecode/patch/HideEndscreenCardsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/endscreencards/bytecode/patch/HideEndscreenCardsPatch.kt @@ -18,7 +18,7 @@ import app.revanced.patches.youtube.layout.hide.endscreencards.bytecode.fingerpr import app.revanced.patches.youtube.layout.hide.endscreencards.bytecode.fingerprints.LayoutVideoFingerprint import app.revanced.patches.youtube.layout.hide.endscreencards.resource.patch.HideEndscreenCardsResourcePatch import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch -import org.jf.dexlib2.iface.instruction.formats.Instruction21c +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction21c @Patch @DependsOn([IntegrationsPatch::class, HideEndscreenCardsResourcePatch::class]) diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/filterbar/fingerprints/FilterBarHeightFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/filterbar/fingerprints/FilterBarHeightFingerprint.kt index 7307754d0..2bea01f58 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/filterbar/fingerprints/FilterBarHeightFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/filterbar/fingerprints/FilterBarHeightFingerprint.kt @@ -3,8 +3,8 @@ package app.revanced.patches.youtube.layout.hide.filterbar.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patches.youtube.layout.hide.filterbar.patch.HideFilterBarResourcePatch import app.revanced.util.patch.LiteralValueFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object FilterBarHeightFingerprint : LiteralValueFingerprint( returnType = "V", diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/filterbar/fingerprints/RelatedChipCloudFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/filterbar/fingerprints/RelatedChipCloudFingerprint.kt index a5d47dbd3..fd811c155 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/filterbar/fingerprints/RelatedChipCloudFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/filterbar/fingerprints/RelatedChipCloudFingerprint.kt @@ -3,8 +3,8 @@ package app.revanced.patches.youtube.layout.hide.filterbar.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patches.youtube.layout.hide.filterbar.patch.HideFilterBarResourcePatch import app.revanced.util.patch.LiteralValueFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object RelatedChipCloudFingerprint : LiteralValueFingerprint( returnType = "V", diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/filterbar/fingerprints/SearchResultsChipBarFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/filterbar/fingerprints/SearchResultsChipBarFingerprint.kt index 9dc8f9359..866ec82f8 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/filterbar/fingerprints/SearchResultsChipBarFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/filterbar/fingerprints/SearchResultsChipBarFingerprint.kt @@ -3,8 +3,8 @@ package app.revanced.patches.youtube.layout.hide.filterbar.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patches.youtube.layout.hide.filterbar.patch.HideFilterBarResourcePatch import app.revanced.util.patch.LiteralValueFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object SearchResultsChipBarFingerprint : LiteralValueFingerprint( returnType = "V", diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/filterbar/patch/HideFilterBarPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/filterbar/patch/HideFilterBarPatch.kt index 45d2f6ae9..a0a44d798 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/filterbar/patch/HideFilterBarPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/filterbar/patch/HideFilterBarPatch.kt @@ -16,8 +16,8 @@ import app.revanced.patches.youtube.layout.hide.filterbar.annotations.HideFilter import app.revanced.patches.youtube.layout.hide.filterbar.fingerprints.FilterBarHeightFingerprint import app.revanced.patches.youtube.layout.hide.filterbar.fingerprints.RelatedChipCloudFingerprint import app.revanced.patches.youtube.layout.hide.filterbar.fingerprints.SearchResultsChipBarFingerprint -import org.jf.dexlib2.iface.instruction.OneRegisterInstruction -import org.jf.dexlib2.iface.instruction.TwoRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction @Patch @Name("Hide filter bar") diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/floatingmicrophone/fingerprints/ShowFloatingMicrophoneButtonFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/floatingmicrophone/fingerprints/ShowFloatingMicrophoneButtonFingerprint.kt index b471d6473..16deabe29 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/floatingmicrophone/fingerprints/ShowFloatingMicrophoneButtonFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/floatingmicrophone/fingerprints/ShowFloatingMicrophoneButtonFingerprint.kt @@ -3,8 +3,8 @@ package app.revanced.patches.youtube.layout.hide.floatingmicrophone.fingerprints import app.revanced.patcher.extensions.or import app.revanced.util.patch.LiteralValueFingerprint import app.revanced.patches.youtube.layout.hide.floatingmicrophone.patch.HideFloatingMicrophoneButtonResourcePatch -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object ShowFloatingMicrophoneButtonFingerprint : LiteralValueFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/floatingmicrophone/patch/HideFloatingMicrophoneButtonPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/floatingmicrophone/patch/HideFloatingMicrophoneButtonPatch.kt index 5e8fd945f..6399085a2 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/floatingmicrophone/patch/HideFloatingMicrophoneButtonPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/floatingmicrophone/patch/HideFloatingMicrophoneButtonPatch.kt @@ -13,7 +13,7 @@ import app.revanced.patcher.patch.annotations.DependsOn import app.revanced.patcher.patch.annotations.Patch import app.revanced.patches.youtube.layout.hide.floatingmicrophone.annotations.HideFloatingMicrophoneButtonCompatibility import app.revanced.patches.youtube.layout.hide.floatingmicrophone.fingerprints.ShowFloatingMicrophoneButtonFingerprint -import org.jf.dexlib2.iface.instruction.TwoRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction @Patch @Name("Hide floating microphone button") diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/general/fingerprints/ConvertElementToFlatBufferFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/general/fingerprints/ConvertElementToFlatBufferFingerprint.kt index a9ada6da1..584bb664b 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/general/fingerprints/ConvertElementToFlatBufferFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/general/fingerprints/ConvertElementToFlatBufferFingerprint.kt @@ -1,7 +1,7 @@ package app.revanced.patches.youtube.layout.hide.general.fingerprints import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.Opcode object ConvertElementToFlatBufferFingerprint : MethodFingerprint( strings = listOf("Failed to convert Element to Flatbuffers: %s"), diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/infocards/fingerprints/InfocardsIncognitoFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/infocards/fingerprints/InfocardsIncognitoFingerprint.kt index d59f8bff2..4e28fe256 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/infocards/fingerprints/InfocardsIncognitoFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/infocards/fingerprints/InfocardsIncognitoFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.youtube.layout.hide.infocards.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags object InfocardsIncognitoFingerprint : MethodFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/infocards/fingerprints/InfocardsIncognitoParentFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/infocards/fingerprints/InfocardsIncognitoParentFingerprint.kt index 815b37d80..34dbb5415 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/infocards/fingerprints/InfocardsIncognitoParentFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/infocards/fingerprints/InfocardsIncognitoParentFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.youtube.layout.hide.infocards.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags object InfocardsIncognitoParentFingerprint : MethodFingerprint( "Ljava/lang/String;", diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/infocards/fingerprints/InfocardsMethodCallFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/infocards/fingerprints/InfocardsMethodCallFingerprint.kt index 48bef700a..9d8446717 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/infocards/fingerprints/InfocardsMethodCallFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/infocards/fingerprints/InfocardsMethodCallFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.youtube.layout.hide.infocards.fingerprints import app.revanced.util.patch.LiteralValueFingerprint import app.revanced.patches.youtube.layout.hide.infocards.resource.patch.HideInfocardsResourcePatch -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.Opcode object InfocardsMethodCallFingerprint : LiteralValueFingerprint( opcodes = listOf( diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/infocards/patch/HideInfoCardsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/infocards/patch/HideInfoCardsPatch.kt index 2d39ae8e5..e725b8320 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/infocards/patch/HideInfoCardsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/infocards/patch/HideInfoCardsPatch.kt @@ -19,9 +19,9 @@ import app.revanced.patches.youtube.layout.hide.infocards.fingerprints.Infocards import app.revanced.patches.youtube.layout.hide.infocards.fingerprints.InfocardsMethodCallFingerprint import app.revanced.patches.youtube.layout.hide.infocards.resource.patch.HideInfocardsResourcePatch import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch -import org.jf.dexlib2.Opcode -import org.jf.dexlib2.iface.instruction.FiveRegisterInstruction -import org.jf.dexlib2.iface.instruction.ReferenceInstruction +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction @Patch @DependsOn([IntegrationsPatch::class, HideInfocardsResourcePatch::class]) diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/loadmorebutton/bytecode/fingerprints/HideLoadMoreButtonFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/loadmorebutton/bytecode/fingerprints/HideLoadMoreButtonFingerprint.kt index 8a01d2224..6ba8b0ab7 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/loadmorebutton/bytecode/fingerprints/HideLoadMoreButtonFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/loadmorebutton/bytecode/fingerprints/HideLoadMoreButtonFingerprint.kt @@ -3,8 +3,8 @@ package app.revanced.patches.youtube.layout.hide.loadmorebutton.bytecode.fingerp import app.revanced.patcher.extensions.or import app.revanced.util.patch.LiteralValueFingerprint import app.revanced.patches.youtube.layout.hide.loadmorebutton.resource.patch.HideLoadMoreButtonResourcePatch -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object HideLoadMoreButtonFingerprint : LiteralValueFingerprint( returnType = "V", diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/loadmorebutton/bytecode/patch/HideLoadMoreButtonPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/loadmorebutton/bytecode/patch/HideLoadMoreButtonPatch.kt index 3f0d69ee8..e4ecb0e7b 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/loadmorebutton/bytecode/patch/HideLoadMoreButtonPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/loadmorebutton/bytecode/patch/HideLoadMoreButtonPatch.kt @@ -14,7 +14,7 @@ import app.revanced.patcher.patch.annotations.Patch import app.revanced.patches.youtube.layout.hide.loadmorebutton.bytecode.fingerprints.HideLoadMoreButtonFingerprint import app.revanced.patches.youtube.layout.hide.loadmorebutton.resource.patch.HideLoadMoreButtonResourcePatch import app.revanced.patches.youtube.layout.hide.loadmorebutton.annotations.HideLoadMoreButtonCompatibility -import org.jf.dexlib2.iface.instruction.OneRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction @Patch @Name("Hide load more button") diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/personalinformation/bytecode/fingerprints/AccountSwitcherAccessibilityLabelFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/personalinformation/bytecode/fingerprints/AccountSwitcherAccessibilityLabelFingerprint.kt index 372c21c5e..915aa5422 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/personalinformation/bytecode/fingerprints/AccountSwitcherAccessibilityLabelFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/personalinformation/bytecode/fingerprints/AccountSwitcherAccessibilityLabelFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.youtube.layout.hide.personalinformation.bytecode.fi import app.revanced.util.patch.LiteralValueFingerprint import app.revanced.patches.youtube.layout.hide.personalinformation.resource.patch.HideEmailAddressResourcePatch -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.Opcode object AccountSwitcherAccessibilityLabelFingerprint : LiteralValueFingerprint( returnType = "V", diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/personalinformation/bytecode/patch/HideEmailAddressPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/personalinformation/bytecode/patch/HideEmailAddressPatch.kt index 1314b56c5..149eaed86 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/personalinformation/bytecode/patch/HideEmailAddressPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/personalinformation/bytecode/patch/HideEmailAddressPatch.kt @@ -15,7 +15,7 @@ import app.revanced.patches.youtube.layout.hide.personalinformation.annotations. import app.revanced.patches.youtube.layout.hide.personalinformation.bytecode.fingerprints.AccountSwitcherAccessibilityLabelFingerprint import app.revanced.patches.youtube.layout.hide.personalinformation.resource.patch.HideEmailAddressResourcePatch import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch -import org.jf.dexlib2.iface.instruction.OneRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction @Patch @DependsOn([IntegrationsPatch::class, HideEmailAddressResourcePatch::class]) diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/player/overlay/bytecode/fingerprints/CreatePlayerOverviewFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/player/overlay/bytecode/fingerprints/CreatePlayerOverviewFingerprint.kt index 1325bee97..5b25eb704 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/player/overlay/bytecode/fingerprints/CreatePlayerOverviewFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/player/overlay/bytecode/fingerprints/CreatePlayerOverviewFingerprint.kt @@ -4,8 +4,8 @@ import app.revanced.extensions.containsConstantInstructionValue import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint import app.revanced.patches.youtube.layout.hide.player.overlay.resource.patch.HidePlayerOverlayResourcePatch -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object CreatePlayerOverviewFingerprint : MethodFingerprint( returnType = "V", diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/player/overlay/bytecode/patch/HidePlayerOverlayPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/player/overlay/bytecode/patch/HidePlayerOverlayPatch.kt index d802ae3b1..e5543f1f7 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/player/overlay/bytecode/patch/HidePlayerOverlayPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/player/overlay/bytecode/patch/HidePlayerOverlayPatch.kt @@ -15,7 +15,7 @@ import app.revanced.patcher.patch.annotations.Patch import app.revanced.patches.youtube.layout.hide.player.overlay.annotations.HidePlayerOverlayPatchCompatibility import app.revanced.patches.youtube.layout.hide.player.overlay.bytecode.fingerprints.CreatePlayerOverviewFingerprint import app.revanced.patches.youtube.layout.hide.player.overlay.resource.patch.HidePlayerOverlayResourcePatch -import org.jf.dexlib2.iface.instruction.OneRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction @Patch @Name("Hide player overlay") diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/bytecode/fingerprints/BottomNavigationBarFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/bytecode/fingerprints/BottomNavigationBarFingerprint.kt index c53e79673..a5ca9d9c4 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/bytecode/fingerprints/BottomNavigationBarFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/bytecode/fingerprints/BottomNavigationBarFingerprint.kt @@ -1,7 +1,7 @@ package app.revanced.patches.youtube.layout.hide.shorts.bytecode.fingerprints import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.Opcode object BottomNavigationBarFingerprint : MethodFingerprint( opcodes = listOf( diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/bytecode/fingerprints/CreateShortsButtonsFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/bytecode/fingerprints/CreateShortsButtonsFingerprint.kt index 282737f7d..fd4b08508 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/bytecode/fingerprints/CreateShortsButtonsFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/bytecode/fingerprints/CreateShortsButtonsFingerprint.kt @@ -3,7 +3,7 @@ package app.revanced.patches.youtube.layout.hide.shorts.bytecode.fingerprints import app.revanced.patcher.extensions.or import app.revanced.util.patch.LiteralValueFingerprint import app.revanced.patches.youtube.layout.hide.shorts.resource.patch.HideShortsComponentsResourcePatch -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags object CreateShortsButtonsFingerprint : LiteralValueFingerprint( accessFlags = AccessFlags.PRIVATE or AccessFlags.FINAL, diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/bytecode/fingerprints/ReelConstructorFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/bytecode/fingerprints/ReelConstructorFingerprint.kt index 467fa3c19..a9b195ba3 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/bytecode/fingerprints/ReelConstructorFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/bytecode/fingerprints/ReelConstructorFingerprint.kt @@ -3,8 +3,8 @@ package app.revanced.patches.youtube.layout.hide.shorts.bytecode.fingerprints import app.revanced.patcher.extensions.or import app.revanced.util.patch.LiteralValueFingerprint import app.revanced.patches.youtube.layout.hide.shorts.resource.patch.HideShortsComponentsResourcePatch -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object ReelConstructorFingerprint : LiteralValueFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/bytecode/fingerprints/RenderBottomNavigationBarFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/bytecode/fingerprints/RenderBottomNavigationBarFingerprint.kt index 216d7276a..f20e9c62c 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/bytecode/fingerprints/RenderBottomNavigationBarFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/bytecode/fingerprints/RenderBottomNavigationBarFingerprint.kt @@ -1,7 +1,7 @@ package app.revanced.patches.youtube.layout.hide.shorts.bytecode.fingerprints import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.Opcode object RenderBottomNavigationBarFingerprint : MethodFingerprint( opcodes = listOf( diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/bytecode/fingerprints/SetPivotBarVisibilityFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/bytecode/fingerprints/SetPivotBarVisibilityFingerprint.kt index 6c169f2ae..fdd010b1b 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/bytecode/fingerprints/SetPivotBarVisibilityFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/bytecode/fingerprints/SetPivotBarVisibilityFingerprint.kt @@ -1,7 +1,7 @@ package app.revanced.patches.youtube.layout.hide.shorts.bytecode.fingerprints import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.Opcode object SetPivotBarVisibilityFingerprint : MethodFingerprint( parameters = listOf("Z"), diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/bytecode/patch/HideShortsComponentsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/bytecode/patch/HideShortsComponentsPatch.kt index 859588f8f..aa1c6997e 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/bytecode/patch/HideShortsComponentsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/bytecode/patch/HideShortsComponentsPatch.kt @@ -21,9 +21,9 @@ import app.revanced.patches.youtube.layout.hide.shorts.bytecode.fingerprints.* import app.revanced.patches.youtube.layout.hide.shorts.resource.patch.HideShortsComponentsResourcePatch import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch import app.revanced.patches.youtube.misc.litho.filter.patch.LithoFilterPatch -import org.jf.dexlib2.iface.instruction.FiveRegisterInstruction -import org.jf.dexlib2.iface.instruction.OneRegisterInstruction -import org.jf.dexlib2.iface.instruction.TwoRegisterInstruction +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.instruction.TwoRegisterInstruction @Patch @DependsOn( diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/time/fingerprints/TimeCounterFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/time/fingerprints/TimeCounterFingerprint.kt index 2f43eb0aa..32712b920 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/time/fingerprints/TimeCounterFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/time/fingerprints/TimeCounterFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.youtube.layout.hide.time.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object TimeCounterFingerprint : MethodFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/watermark/fingerprints/HideWatermarkFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/watermark/fingerprints/HideWatermarkFingerprint.kt index b34c9a99a..58aa58818 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/watermark/fingerprints/HideWatermarkFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/watermark/fingerprints/HideWatermarkFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.youtube.layout.hide.watermark.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags object HideWatermarkFingerprint : MethodFingerprint ( "V", AccessFlags.PUBLIC or AccessFlags.FINAL, listOf("L", "L") diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/watermark/fingerprints/HideWatermarkParentFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/watermark/fingerprints/HideWatermarkParentFingerprint.kt index 444fadd52..003815c45 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/watermark/fingerprints/HideWatermarkParentFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/watermark/fingerprints/HideWatermarkParentFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.youtube.layout.hide.watermark.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags object HideWatermarkParentFingerprint : MethodFingerprint ( "L", AccessFlags.PUBLIC or AccessFlags.FINAL, strings = listOf("player_overlay_in_video_programming") diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/panels/fullscreen/remove/fingerprints/FullscreenViewAdderFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/panels/fullscreen/remove/fingerprints/FullscreenViewAdderFingerprint.kt index 7d7429ca1..521902732 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/panels/fullscreen/remove/fingerprints/FullscreenViewAdderFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/panels/fullscreen/remove/fingerprints/FullscreenViewAdderFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.youtube.layout.panels.fullscreen.remove.fingerprint import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.Opcode object FullscreenViewAdderFingerprint : MethodFingerprint( opcodes = listOf( diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/panels/fullscreen/remove/fingerprints/FullscreenViewAdderParentFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/panels/fullscreen/remove/fingerprints/FullscreenViewAdderParentFingerprint.kt index 9a1bb4219..a7b2565ba 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/panels/fullscreen/remove/fingerprints/FullscreenViewAdderParentFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/panels/fullscreen/remove/fingerprints/FullscreenViewAdderParentFingerprint.kt @@ -1,7 +1,7 @@ package app.revanced.patches.youtube.layout.panels.fullscreen.remove.fingerprints import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.Opcode object FullscreenViewAdderParentFingerprint : MethodFingerprint( returnType = "V", diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/panels/popup/fingerprints/EngagementPanelControllerFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/panels/popup/fingerprints/EngagementPanelControllerFingerprint.kt index a2c94e6f4..ef20819a0 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/panels/popup/fingerprints/EngagementPanelControllerFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/panels/popup/fingerprints/EngagementPanelControllerFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.youtube.layout.panels.popup.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags object EngagementPanelControllerFingerprint : MethodFingerprint( returnType = "L", diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/fingerprints/DislikesOldLayoutTextViewFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/fingerprints/DislikesOldLayoutTextViewFingerprint.kt index 3ac14b345..19557dde0 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/fingerprints/DislikesOldLayoutTextViewFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/fingerprints/DislikesOldLayoutTextViewFingerprint.kt @@ -3,8 +3,8 @@ package app.revanced.patches.youtube.layout.returnyoutubedislike.fingerprints import app.revanced.patcher.extensions.or import app.revanced.util.patch.LiteralValueFingerprint import app.revanced.patches.youtube.layout.returnyoutubedislike.resource.patch.ReturnYouTubeDislikeResourcePatch -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object DislikesOldLayoutTextViewFingerprint : LiteralValueFingerprint( returnType = "V", diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/fingerprints/ShortsTextViewFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/fingerprints/ShortsTextViewFingerprint.kt index 1c78732d5..283c8fb9c 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/fingerprints/ShortsTextViewFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/fingerprints/ShortsTextViewFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.youtube.layout.returnyoutubedislike.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object ShortsTextViewFingerprint : MethodFingerprint( accessFlags = AccessFlags.PROTECTED or AccessFlags.FINAL, diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/fingerprints/TextComponentAtomicReferenceFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/fingerprints/TextComponentAtomicReferenceFingerprint.kt index c5955c0f2..a1b0858dd 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/fingerprints/TextComponentAtomicReferenceFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/fingerprints/TextComponentAtomicReferenceFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.youtube.layout.returnyoutubedislike.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode /** * Resolves against the same method that [TextComponentContextFingerprint] resolves to. diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/fingerprints/TextComponentConstructorFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/fingerprints/TextComponentConstructorFingerprint.kt index 5f5c18844..8fbd4e33b 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/fingerprints/TextComponentConstructorFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/fingerprints/TextComponentConstructorFingerprint.kt @@ -3,7 +3,7 @@ package app.revanced.patches.youtube.layout.returnyoutubedislike.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags object TextComponentConstructorFingerprint : MethodFingerprint( accessFlags = AccessFlags.CONSTRUCTOR or AccessFlags.PRIVATE, diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/fingerprints/TextComponentContextFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/fingerprints/TextComponentContextFingerprint.kt index 7e4d3141f..9c2e7d7e7 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/fingerprints/TextComponentContextFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/fingerprints/TextComponentContextFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.youtube.layout.returnyoutubedislike.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode /** * Resolves against the same class that [TextComponentConstructorFingerprint] resolves to. diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/patch/ReturnYouTubeDislikePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/patch/ReturnYouTubeDislikePatch.kt index f55afa767..230ad1c32 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/patch/ReturnYouTubeDislikePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/patch/ReturnYouTubeDislikePatch.kt @@ -24,10 +24,10 @@ import app.revanced.patches.youtube.layout.returnyoutubedislike.resource.patch.R import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch import app.revanced.patches.youtube.misc.playertype.patch.PlayerTypeHookPatch import app.revanced.patches.youtube.video.videoid.patch.VideoIdPatch -import org.jf.dexlib2.iface.instruction.FiveRegisterInstruction -import org.jf.dexlib2.iface.instruction.OneRegisterInstruction -import org.jf.dexlib2.iface.instruction.ReferenceInstruction -import org.jf.dexlib2.iface.instruction.TwoRegisterInstruction +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.instruction.ReferenceInstruction +import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction @Patch @DependsOn( diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/searchbar/fingerprints/CreateSearchSuggestionsFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/searchbar/fingerprints/CreateSearchSuggestionsFingerprint.kt index bef00e2f3..4c00d24f4 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/searchbar/fingerprints/CreateSearchSuggestionsFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/searchbar/fingerprints/CreateSearchSuggestionsFingerprint.kt @@ -1,7 +1,7 @@ package app.revanced.patches.youtube.layout.searchbar.fingerprints import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.Opcode object CreateSearchSuggestionsFingerprint : MethodFingerprint( opcodes = listOf( diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/searchbar/fingerprints/SetWordmarkHeaderFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/searchbar/fingerprints/SetWordmarkHeaderFingerprint.kt index 836b1aa86..d2f56c0d7 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/searchbar/fingerprints/SetWordmarkHeaderFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/searchbar/fingerprints/SetWordmarkHeaderFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.youtube.layout.searchbar.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object SetWordmarkHeaderFingerprint : MethodFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/bytecode/fingerprints/PlayerSeekbarColorFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/bytecode/fingerprints/PlayerSeekbarColorFingerprint.kt index 0c325dd86..67851084a 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/bytecode/fingerprints/PlayerSeekbarColorFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/bytecode/fingerprints/PlayerSeekbarColorFingerprint.kt @@ -4,7 +4,7 @@ import app.revanced.extensions.containsConstantInstructionValue import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint import app.revanced.patches.youtube.layout.seekbar.resource.SeekbarColorResourcePatch -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags object PlayerSeekbarColorFingerprint : MethodFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/bytecode/fingerprints/SetSeekbarClickedColorFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/bytecode/fingerprints/SetSeekbarClickedColorFingerprint.kt index 1ebccca75..43eb358d5 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/bytecode/fingerprints/SetSeekbarClickedColorFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/bytecode/fingerprints/SetSeekbarClickedColorFingerprint.kt @@ -1,7 +1,7 @@ package app.revanced.patches.youtube.layout.seekbar.bytecode.fingerprints import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.Opcode object SetSeekbarClickedColorFingerprint : MethodFingerprint( opcodes = listOf(Opcode.CONST_HIGH16), diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/bytecode/fingerprints/ShortsSeekbarColorFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/bytecode/fingerprints/ShortsSeekbarColorFingerprint.kt index eea70852a..738e9e433 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/bytecode/fingerprints/ShortsSeekbarColorFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/bytecode/fingerprints/ShortsSeekbarColorFingerprint.kt @@ -3,7 +3,7 @@ package app.revanced.patches.youtube.layout.seekbar.bytecode.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patches.youtube.layout.seekbar.resource.SeekbarColorResourcePatch import app.revanced.util.patch.LiteralValueFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags object ShortsSeekbarColorFingerprint : LiteralValueFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/bytecode/patch/SeekbarColorBytecodePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/bytecode/patch/SeekbarColorBytecodePatch.kt index 156203606..f3b7dfc35 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/bytecode/patch/SeekbarColorBytecodePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/seekbar/bytecode/patch/SeekbarColorBytecodePatch.kt @@ -20,8 +20,8 @@ import app.revanced.patches.youtube.layout.seekbar.resource.SeekbarColorResource import app.revanced.patches.youtube.layout.theme.bytecode.patch.LithoColorHookPatch import app.revanced.patches.youtube.layout.theme.bytecode.patch.LithoColorHookPatch.Companion.lithoColorOverrideHook import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch -import org.jf.dexlib2.iface.instruction.OneRegisterInstruction -import org.jf.dexlib2.iface.instruction.TwoRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction @Description("Hide or set a custom seekbar color") @DependsOn([IntegrationsPatch::class, LithoColorHookPatch::class, SeekbarColorResourcePatch::class]) diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/sponsorblock/bytecode/fingerprints/AppendTimeFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/sponsorblock/bytecode/fingerprints/AppendTimeFingerprint.kt index 950c74602..18d2497cb 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/sponsorblock/bytecode/fingerprints/AppendTimeFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/sponsorblock/bytecode/fingerprints/AppendTimeFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.youtube.layout.sponsorblock.bytecode.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object AppendTimeFingerprint : MethodFingerprint( "V", diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/sponsorblock/bytecode/fingerprints/ControlsOverlayFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/sponsorblock/bytecode/fingerprints/ControlsOverlayFingerprint.kt index a537a12f2..afd72b406 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/sponsorblock/bytecode/fingerprints/ControlsOverlayFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/sponsorblock/bytecode/fingerprints/ControlsOverlayFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.youtube.layout.sponsorblock.bytecode.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object ControlsOverlayFingerprint : MethodFingerprint( returnType = "V", diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/sponsorblock/bytecode/fingerprints/RectangleFieldInvalidatorFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/sponsorblock/bytecode/fingerprints/RectangleFieldInvalidatorFingerprint.kt index 9aa72efba..623c760f3 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/sponsorblock/bytecode/fingerprints/RectangleFieldInvalidatorFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/sponsorblock/bytecode/fingerprints/RectangleFieldInvalidatorFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.youtube.layout.sponsorblock.bytecode.fingerprints import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.iface.instruction.ReferenceInstruction -import org.jf.dexlib2.iface.reference.MethodReference +import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction +import com.android.tools.smali.dexlib2.iface.reference.MethodReference object RectangleFieldInvalidatorFingerprint : MethodFingerprint( "V", diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/sponsorblock/bytecode/patch/SponsorBlockBytecodePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/sponsorblock/bytecode/patch/SponsorBlockBytecodePatch.kt index 84450c9b0..963a7008e 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/sponsorblock/bytecode/patch/SponsorBlockBytecodePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/sponsorblock/bytecode/patch/SponsorBlockBytecodePatch.kt @@ -32,12 +32,12 @@ import app.revanced.patches.youtube.misc.playercontrols.bytecode.patch.PlayerCon import app.revanced.patches.youtube.misc.playertype.patch.PlayerTypeHookPatch import app.revanced.patches.youtube.video.information.patch.VideoInformationPatch import app.revanced.patches.youtube.video.videoid.patch.VideoIdPatch -import org.jf.dexlib2.Opcode -import org.jf.dexlib2.iface.instruction.* -import org.jf.dexlib2.iface.instruction.formats.Instruction35c -import org.jf.dexlib2.iface.reference.FieldReference -import org.jf.dexlib2.iface.reference.MethodReference -import org.jf.dexlib2.iface.reference.StringReference +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.instruction.* +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction35c +import com.android.tools.smali.dexlib2.iface.reference.FieldReference +import com.android.tools.smali.dexlib2.iface.reference.MethodReference +import com.android.tools.smali.dexlib2.iface.reference.StringReference @Patch @DependsOn( diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/spoofappversion/bytecode/fingerprints/SpoofAppVersionFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/spoofappversion/bytecode/fingerprints/SpoofAppVersionFingerprint.kt index 8a5736f12..901f34d45 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/spoofappversion/bytecode/fingerprints/SpoofAppVersionFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/spoofappversion/bytecode/fingerprints/SpoofAppVersionFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.youtube.layout.spoofappversion.bytecode.fingerprint import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object SpoofAppVersionFingerprint : MethodFingerprint( "L", AccessFlags.PUBLIC or AccessFlags.STATIC, listOf("L"), listOf( diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/spoofappversion/bytecode/patch/SpoofAppVersionPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/spoofappversion/bytecode/patch/SpoofAppVersionPatch.kt index d2fb20c42..9095bd712 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/spoofappversion/bytecode/patch/SpoofAppVersionPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/spoofappversion/bytecode/patch/SpoofAppVersionPatch.kt @@ -18,7 +18,7 @@ import app.revanced.patches.youtube.layout.spoofappversion.annotations.SpoofAppV import app.revanced.patches.youtube.layout.spoofappversion.bytecode.fingerprints.SpoofAppVersionFingerprint import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch import app.revanced.patches.youtube.misc.settings.bytecode.patch.SettingsPatch -import org.jf.dexlib2.iface.instruction.OneRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction @Patch @DependsOn([IntegrationsPatch::class, SettingsPatch::class]) 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 a994a26d6..486087b8f 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 @@ -3,8 +3,8 @@ package app.revanced.patches.youtube.layout.startupshortsreset.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.annotation.FuzzyPatternScanMethod import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode @FuzzyPatternScanMethod(3) diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/tabletminiplayer/fingerprints/MiniPlayerDimensionsCalculatorParentFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/tabletminiplayer/fingerprints/MiniPlayerDimensionsCalculatorParentFingerprint.kt index 735c55462..ad90d3fe8 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/tabletminiplayer/fingerprints/MiniPlayerDimensionsCalculatorParentFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/tabletminiplayer/fingerprints/MiniPlayerDimensionsCalculatorParentFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.youtube.layout.tabletminiplayer.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object MiniPlayerDimensionsCalculatorParentFingerprint : MethodFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/tabletminiplayer/fingerprints/MiniPlayerOverrideFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/tabletminiplayer/fingerprints/MiniPlayerOverrideFingerprint.kt index f2210f76b..ded121ec3 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/tabletminiplayer/fingerprints/MiniPlayerOverrideFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/tabletminiplayer/fingerprints/MiniPlayerOverrideFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.youtube.layout.tabletminiplayer.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object MiniPlayerOverrideFingerprint : MethodFingerprint( "Z", AccessFlags.STATIC or AccessFlags.PUBLIC, diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/tabletminiplayer/fingerprints/MiniPlayerOverrideNoContextFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/tabletminiplayer/fingerprints/MiniPlayerOverrideNoContextFingerprint.kt index aba50b3d4..68d9773e7 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/tabletminiplayer/fingerprints/MiniPlayerOverrideNoContextFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/tabletminiplayer/fingerprints/MiniPlayerOverrideNoContextFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.youtube.layout.tabletminiplayer.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object MiniPlayerOverrideNoContextFingerprint : MethodFingerprint( "Z", AccessFlags.FINAL or AccessFlags.PRIVATE, diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/tabletminiplayer/fingerprints/MiniPlayerResponseModelSizeCheckFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/tabletminiplayer/fingerprints/MiniPlayerResponseModelSizeCheckFingerprint.kt index 45cede93b..0cf96c996 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/tabletminiplayer/fingerprints/MiniPlayerResponseModelSizeCheckFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/tabletminiplayer/fingerprints/MiniPlayerResponseModelSizeCheckFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.youtube.layout.tabletminiplayer.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object MiniPlayerResponseModelSizeCheckFingerprint : MethodFingerprint( "L", diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/tabletminiplayer/patch/TabletMiniPlayerPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/tabletminiplayer/patch/TabletMiniPlayerPatch.kt index c642800de..b7961a69d 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/tabletminiplayer/patch/TabletMiniPlayerPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/tabletminiplayer/patch/TabletMiniPlayerPatch.kt @@ -20,8 +20,8 @@ import app.revanced.patches.youtube.layout.tabletminiplayer.annotations.TabletMi import app.revanced.patches.youtube.layout.tabletminiplayer.fingerprints.* import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch import app.revanced.patches.youtube.misc.settings.bytecode.patch.SettingsPatch -import org.jf.dexlib2.Opcode -import org.jf.dexlib2.iface.instruction.OneRegisterInstruction +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction @Patch @DependsOn([IntegrationsPatch::class, SettingsPatch::class]) diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/theme/bytecode/fingerprints/LithoThemeFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/theme/bytecode/fingerprints/LithoThemeFingerprint.kt index 70d9f9ea6..9d2d301ca 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/theme/bytecode/fingerprints/LithoThemeFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/theme/bytecode/fingerprints/LithoThemeFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.youtube.layout.theme.bytecode.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object LithoThemeFingerprint : MethodFingerprint( returnType = "V", diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/autorepeat/fingerprints/AutoRepeatFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/autorepeat/fingerprints/AutoRepeatFingerprint.kt index c784ba8a0..204b3c7c4 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/autorepeat/fingerprints/AutoRepeatFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/autorepeat/fingerprints/AutoRepeatFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.youtube.misc.autorepeat.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags object AutoRepeatFingerprint : MethodFingerprint( "V", diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/autorepeat/fingerprints/AutoRepeatParentFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/autorepeat/fingerprints/AutoRepeatParentFingerprint.kt index 81d6b0083..b08e57915 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/autorepeat/fingerprints/AutoRepeatParentFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/autorepeat/fingerprints/AutoRepeatParentFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.youtube.misc.autorepeat.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags object AutoRepeatParentFingerprint : MethodFingerprint( "V", diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/bottomsheet/hook/fingerprints/CreateBottomSheetFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/bottomsheet/hook/fingerprints/CreateBottomSheetFingerprint.kt index 6a005a36b..c60cbdc6d 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/bottomsheet/hook/fingerprints/CreateBottomSheetFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/bottomsheet/hook/fingerprints/CreateBottomSheetFingerprint.kt @@ -3,7 +3,7 @@ package app.revanced.patches.youtube.misc.bottomsheet.hook.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patches.youtube.misc.bottomsheet.hook.patch.BottomSheetHookResourcePatch import app.revanced.util.patch.LiteralValueFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags object CreateBottomSheetFingerprint : LiteralValueFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/bottomsheet/hook/patch/BottomSheetHookPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/bottomsheet/hook/patch/BottomSheetHookPatch.kt index 73c27a5bd..8687029bf 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/bottomsheet/hook/patch/BottomSheetHookPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/bottomsheet/hook/patch/BottomSheetHookPatch.kt @@ -10,7 +10,7 @@ import app.revanced.patcher.patch.PatchResultSuccess import app.revanced.patcher.patch.annotations.DependsOn import app.revanced.patches.youtube.misc.bottomsheet.hook.fingerprints.CreateBottomSheetFingerprint import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch -import org.jf.dexlib2.iface.instruction.OneRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction @DependsOn([IntegrationsPatch::class, BottomSheetHookResourcePatch::class]) class BottomSheetHookPatch : BytecodePatch( diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/fix/backtoexitgesture/fingerprints/OnBackPressedFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/fix/backtoexitgesture/fingerprints/OnBackPressedFingerprint.kt index 52fee3beb..424a80cf4 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/fix/backtoexitgesture/fingerprints/OnBackPressedFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/fix/backtoexitgesture/fingerprints/OnBackPressedFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.youtube.misc.fix.backtoexitgesture.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object OnBackPressedFingerprint : MethodFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/fix/backtoexitgesture/fingerprints/RecyclerViewScrollingFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/fix/backtoexitgesture/fingerprints/RecyclerViewScrollingFingerprint.kt index 73c5faeeb..c44ebe9c3 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/fix/backtoexitgesture/fingerprints/RecyclerViewScrollingFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/fix/backtoexitgesture/fingerprints/RecyclerViewScrollingFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.youtube.misc.fix.backtoexitgesture.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object RecyclerViewScrollingFingerprint : MethodFingerprint( accessFlags = AccessFlags.PRIVATE or AccessFlags.FINAL, diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/fix/backtoexitgesture/fingerprints/RecyclerViewTopScrollingFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/fix/backtoexitgesture/fingerprints/RecyclerViewTopScrollingFingerprint.kt index 994436544..a5b244759 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/fix/backtoexitgesture/fingerprints/RecyclerViewTopScrollingFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/fix/backtoexitgesture/fingerprints/RecyclerViewTopScrollingFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.youtube.misc.fix.backtoexitgesture.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object RecyclerViewTopScrollingFingerprint : MethodFingerprint( "V", AccessFlags.PUBLIC or AccessFlags.FINAL, listOf(), listOf( diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/fix/backtoexitgesture/fingerprints/RecyclerViewTopScrollingParentFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/fix/backtoexitgesture/fingerprints/RecyclerViewTopScrollingParentFingerprint.kt index b891aa4ae..ff6804c9f 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/fix/backtoexitgesture/fingerprints/RecyclerViewTopScrollingParentFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/fix/backtoexitgesture/fingerprints/RecyclerViewTopScrollingParentFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.youtube.misc.fix.backtoexitgesture.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object RecyclerViewTopScrollingParentFingerprint : MethodFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/fingerprints/ProtobufParameterBuilderFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/fingerprints/ProtobufParameterBuilderFingerprint.kt index 3b61b09dd..46568f1f4 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/fingerprints/ProtobufParameterBuilderFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/fingerprints/ProtobufParameterBuilderFingerprint.kt @@ -1,7 +1,7 @@ package app.revanced.patches.youtube.misc.fix.playback.fingerprints import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.Opcode object ProtobufParameterBuilderFingerprint : MethodFingerprint( opcodes = listOf( diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/fingerprints/ScrubbedPreviewLayoutFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/fingerprints/ScrubbedPreviewLayoutFingerprint.kt index 0246694ee..aa3375e38 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/fingerprints/ScrubbedPreviewLayoutFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/fingerprints/ScrubbedPreviewLayoutFingerprint.kt @@ -3,8 +3,8 @@ package app.revanced.patches.youtube.misc.fix.playback.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patches.youtube.misc.fix.playback.patch.SpoofSignatureVerificationResourcePatch import app.revanced.util.patch.LiteralValueFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object ScrubbedPreviewLayoutFingerprint : LiteralValueFingerprint( accessFlags = AccessFlags.PRIVATE or AccessFlags.FINAL, diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/fingerprints/StoryboardThumbnailFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/fingerprints/StoryboardThumbnailFingerprint.kt index 51e824d0d..15466014d 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/fingerprints/StoryboardThumbnailFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/fingerprints/StoryboardThumbnailFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.youtube.misc.fix.playback.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode /** * Resolves using the class found in [StoryboardThumbnailParentFingerprint]. diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/fingerprints/StoryboardThumbnailParentFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/fingerprints/StoryboardThumbnailParentFingerprint.kt index ae50aae99..d9ec11c7d 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/fingerprints/StoryboardThumbnailParentFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/fingerprints/StoryboardThumbnailParentFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.youtube.misc.fix.playback.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags /** * Here lies code that creates the seekbar thumbnails. diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/fingerprints/UserAgentHeaderBuilderFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/fingerprints/UserAgentHeaderBuilderFingerprint.kt index ab71b605f..127f7a23d 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/fingerprints/UserAgentHeaderBuilderFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/fingerprints/UserAgentHeaderBuilderFingerprint.kt @@ -1,7 +1,7 @@ package app.revanced.patches.youtube.misc.fix.playback.fingerprints import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.Opcode object UserAgentHeaderBuilderFingerprint : MethodFingerprint( parameters = listOf("L", "L", "L"), diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/patch/ClientSpoofPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/patch/ClientSpoofPatch.kt index 605b2319d..bb987b210 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/patch/ClientSpoofPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/patch/ClientSpoofPatch.kt @@ -13,7 +13,7 @@ import app.revanced.patcher.patch.annotations.DependsOn import app.revanced.patcher.patch.annotations.Patch import app.revanced.patches.youtube.misc.fix.playback.annotations.ClientSpoofCompatibility import app.revanced.patches.youtube.misc.fix.playback.fingerprints.UserAgentHeaderBuilderFingerprint -import org.jf.dexlib2.iface.instruction.FiveRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction @Patch @Name("Client spoof") diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/patch/SpoofSignatureVerificationPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/patch/SpoofSignatureVerificationPatch.kt index f87c1683b..0f486e635 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/patch/SpoofSignatureVerificationPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/patch/SpoofSignatureVerificationPatch.kt @@ -20,7 +20,7 @@ import app.revanced.patches.youtube.misc.fix.playback.fingerprints.StoryboardThu import app.revanced.patches.youtube.misc.fix.playback.fingerprints.StoryboardThumbnailParentFingerprint import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch import app.revanced.patches.youtube.misc.playertype.patch.PlayerTypeHookPatch -import org.jf.dexlib2.iface.instruction.ReferenceInstruction +import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction @Name("Spoof signature verification") @Description("Spoofs the client to prevent playback issues.") diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/integrations/fingerprints/APIPlayerServiceFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/integrations/fingerprints/APIPlayerServiceFingerprint.kt index 87607a770..e391444cc 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/integrations/fingerprints/APIPlayerServiceFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/integrations/fingerprints/APIPlayerServiceFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.youtube.misc.integrations.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patches.shared.integrations.patch.AbstractIntegrationsPatch.IntegrationsFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags /** * For embedded playback. diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/integrations/fingerprints/EmbeddedPlayerControlsOverlayFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/integrations/fingerprints/EmbeddedPlayerControlsOverlayFingerprint.kt index 80e477460..aa75270ee 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/integrations/fingerprints/EmbeddedPlayerControlsOverlayFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/integrations/fingerprints/EmbeddedPlayerControlsOverlayFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.youtube.misc.integrations.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patches.shared.integrations.patch.AbstractIntegrationsPatch.IntegrationsFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags /** * For embedded playback inside Google Play store (and probably other situations as well). diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/integrations/fingerprints/EmbeddedPlayerFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/integrations/fingerprints/EmbeddedPlayerFingerprint.kt index 766156470..790bc6c8f 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/integrations/fingerprints/EmbeddedPlayerFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/integrations/fingerprints/EmbeddedPlayerFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.youtube.misc.integrations.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patches.shared.integrations.patch.AbstractIntegrationsPatch.IntegrationsFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags /** * For embedded playback inside the Google app (such as the in app 'discover' tab). diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/integrations/fingerprints/RemoteEmbedFragmentFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/integrations/fingerprints/RemoteEmbedFragmentFingerprint.kt index e719289ff..554167946 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/integrations/fingerprints/RemoteEmbedFragmentFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/integrations/fingerprints/RemoteEmbedFragmentFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.youtube.misc.integrations.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patches.shared.integrations.patch.AbstractIntegrationsPatch.IntegrationsFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags /** * For embedded playback. Likely covers Google Play store and other Google products. diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/integrations/fingerprints/RemoteEmbeddedPlayerFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/integrations/fingerprints/RemoteEmbeddedPlayerFingerprint.kt index 6a16bf267..a7ef3632e 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/integrations/fingerprints/RemoteEmbeddedPlayerFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/integrations/fingerprints/RemoteEmbeddedPlayerFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.youtube.misc.integrations.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patches.shared.integrations.patch.AbstractIntegrationsPatch.IntegrationsFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags /** * For embedded playback inside 3rd party android app (such as 3rd party Reddit apps). diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/integrations/fingerprints/StandalonePlayerActivityFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/integrations/fingerprints/StandalonePlayerActivityFingerprint.kt index 9d2eb4c07..bb9958204 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/integrations/fingerprints/StandalonePlayerActivityFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/integrations/fingerprints/StandalonePlayerActivityFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.youtube.misc.integrations.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patches.shared.integrations.patch.AbstractIntegrationsPatch.IntegrationsFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags /** * Old API activity to embed YouTube into 3rd party Android apps. diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/links/open/fingerprints/BindSessionServiceFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/links/open/fingerprints/BindSessionServiceFingerprint.kt index b1d108279..09f6e01c5 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/links/open/fingerprints/BindSessionServiceFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/links/open/fingerprints/BindSessionServiceFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.youtube.misc.links.open.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object BindSessionServiceFingerprint : MethodFingerprint( returnType = "L", diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/links/open/fingerprints/GetCustomTabPackageNameFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/links/open/fingerprints/GetCustomTabPackageNameFingerprint.kt index 78b795566..8aaecfdca 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/links/open/fingerprints/GetCustomTabPackageNameFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/links/open/fingerprints/GetCustomTabPackageNameFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.youtube.misc.links.open.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object GetCustomTabPackageNameFingerprint : MethodFingerprint( returnType = "L", diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/links/open/fingerprints/InitializeCustomTabSupportFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/links/open/fingerprints/InitializeCustomTabSupportFingerprint.kt index b9f80a60b..314dc8e4d 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/links/open/fingerprints/InitializeCustomTabSupportFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/links/open/fingerprints/InitializeCustomTabSupportFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.youtube.misc.links.open.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object InitializeCustomTabSupportFingerprint : MethodFingerprint( returnType = "V", diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/links/open/patch/OpenLinksExternallyPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/links/open/patch/OpenLinksExternallyPatch.kt index bc5199173..6340b1267 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/links/open/patch/OpenLinksExternallyPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/links/open/patch/OpenLinksExternallyPatch.kt @@ -16,7 +16,7 @@ import app.revanced.patches.youtube.misc.links.open.fingerprints.BindSessionServ import app.revanced.patches.youtube.misc.links.open.fingerprints.GetCustomTabPackageNameFingerprint import app.revanced.patches.youtube.misc.links.open.fingerprints.InitializeCustomTabSupportFingerprint import app.revanced.patches.youtube.misc.settings.bytecode.patch.SettingsPatch -import org.jf.dexlib2.iface.instruction.formats.Instruction21c +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction21c @Patch @Name("Open links externally") diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/litho/filter/fingerprints/ComponentContextParserFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/litho/filter/fingerprints/ComponentContextParserFingerprint.kt index b0fad80b9..5fa5401dc 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/litho/filter/fingerprints/ComponentContextParserFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/litho/filter/fingerprints/ComponentContextParserFingerprint.kt @@ -1,7 +1,7 @@ package app.revanced.patches.youtube.misc.litho.filter.fingerprints import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.Opcode object ComponentContextParserFingerprint : MethodFingerprint( opcodes = listOf( diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/litho/filter/fingerprints/EmptyComponentBuilderFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/litho/filter/fingerprints/EmptyComponentBuilderFingerprint.kt index 7c77b9f96..7d29ce242 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/litho/filter/fingerprints/EmptyComponentBuilderFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/litho/filter/fingerprints/EmptyComponentBuilderFingerprint.kt @@ -1,7 +1,7 @@ package app.revanced.patches.youtube.misc.litho.filter.fingerprints import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.Opcode object EmptyComponentBuilderFingerprint : MethodFingerprint( opcodes = listOf( diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/litho/filter/fingerprints/LithoFilterFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/litho/filter/fingerprints/LithoFilterFingerprint.kt index 9839efc31..9d1df7cf4 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/litho/filter/fingerprints/LithoFilterFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/litho/filter/fingerprints/LithoFilterFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.youtube.misc.litho.filter.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags object LithoFilterFingerprint : MethodFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.STATIC or AccessFlags.CONSTRUCTOR, diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/litho/filter/fingerprints/ProtobufBufferReferenceFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/litho/filter/fingerprints/ProtobufBufferReferenceFingerprint.kt index aeecb9e2a..abe792753 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/litho/filter/fingerprints/ProtobufBufferReferenceFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/litho/filter/fingerprints/ProtobufBufferReferenceFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.youtube.misc.litho.filter.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object ProtobufBufferReferenceFingerprint : MethodFingerprint( returnType = "V", diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/litho/filter/fingerprints/ReadComponentIdentifierFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/litho/filter/fingerprints/ReadComponentIdentifierFingerprint.kt index b78e48af1..c7f8966c1 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/litho/filter/fingerprints/ReadComponentIdentifierFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/litho/filter/fingerprints/ReadComponentIdentifierFingerprint.kt @@ -1,7 +1,7 @@ package app.revanced.patches.youtube.misc.litho.filter.fingerprints import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.Opcode object ReadComponentIdentifierFingerprint : MethodFingerprint( opcodes = listOf( diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/litho/filter/patch/LithoFilterPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/litho/filter/patch/LithoFilterPatch.kt index 7b45c8950..69a174b53 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/litho/filter/patch/LithoFilterPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/litho/filter/patch/LithoFilterPatch.kt @@ -18,10 +18,10 @@ import app.revanced.patcher.patch.annotations.DependsOn import app.revanced.patcher.util.smali.ExternalLabel import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch import app.revanced.patches.youtube.misc.litho.filter.fingerprints.* -import org.jf.dexlib2.iface.instruction.FiveRegisterInstruction -import org.jf.dexlib2.iface.instruction.Instruction -import org.jf.dexlib2.iface.instruction.OneRegisterInstruction -import org.jf.dexlib2.iface.instruction.ReferenceInstruction +import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.Instruction +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction import java.io.Closeable @DependsOn([IntegrationsPatch::class]) diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/microg/fingerprints/GooglePlayUtilityFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/microg/fingerprints/GooglePlayUtilityFingerprint.kt index ebca7a6ba..5276b8fbe 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/microg/fingerprints/GooglePlayUtilityFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/microg/fingerprints/GooglePlayUtilityFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.youtube.misc.microg.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags object GooglePlayUtilityFingerprint : MethodFingerprint( returnType = "I", diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/microg/fingerprints/ServiceCheckFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/microg/fingerprints/ServiceCheckFingerprint.kt index 8c98f055a..64083f0f0 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/microg/fingerprints/ServiceCheckFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/microg/fingerprints/ServiceCheckFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.youtube.misc.microg.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags object ServiceCheckFingerprint : MethodFingerprint( returnType = "V", diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/minimizedplayback/fingerprints/KidsMinimizedPlaybackPolicyControllerFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/minimizedplayback/fingerprints/KidsMinimizedPlaybackPolicyControllerFingerprint.kt index 9763d18d3..0b889561e 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/minimizedplayback/fingerprints/KidsMinimizedPlaybackPolicyControllerFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/minimizedplayback/fingerprints/KidsMinimizedPlaybackPolicyControllerFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.youtube.misc.minimizedplayback.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object KidsMinimizedPlaybackPolicyControllerFingerprint : MethodFingerprint( returnType = "V", diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/minimizedplayback/fingerprints/MinimizedPlaybackManagerFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/minimizedplayback/fingerprints/MinimizedPlaybackManagerFingerprint.kt index dbb7e1e45..c72bc2333 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/minimizedplayback/fingerprints/MinimizedPlaybackManagerFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/minimizedplayback/fingerprints/MinimizedPlaybackManagerFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.youtube.misc.minimizedplayback.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object MinimizedPlaybackManagerFingerprint : MethodFingerprint( "Z", diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/minimizedplayback/fingerprints/MinimizedPlaybackSettingsFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/minimizedplayback/fingerprints/MinimizedPlaybackSettingsFingerprint.kt index a184fe77d..f428c2be2 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/minimizedplayback/fingerprints/MinimizedPlaybackSettingsFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/minimizedplayback/fingerprints/MinimizedPlaybackSettingsFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.youtube.misc.minimizedplayback.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object MinimizedPlaybackSettingsFingerprint : MethodFingerprint( returnType = "Ljava/lang/String;", diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/minimizedplayback/fingerprints/MinimizedPlaybackSettingsParentFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/minimizedplayback/fingerprints/MinimizedPlaybackSettingsParentFingerprint.kt index 180547a2e..f7d8cf59b 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/minimizedplayback/fingerprints/MinimizedPlaybackSettingsParentFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/minimizedplayback/fingerprints/MinimizedPlaybackSettingsParentFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.youtube.misc.minimizedplayback.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags /** * Class fingerprint for [MinimizedPlaybackSettingsFingerprint] diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/minimizedplayback/patch/MinimizedPlaybackPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/minimizedplayback/patch/MinimizedPlaybackPatch.kt index d9c8b8ef8..c3d7a9535 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/minimizedplayback/patch/MinimizedPlaybackPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/minimizedplayback/patch/MinimizedPlaybackPatch.kt @@ -24,8 +24,8 @@ import app.revanced.patches.youtube.misc.minimizedplayback.fingerprints.Minimize import app.revanced.patches.youtube.misc.minimizedplayback.fingerprints.MinimizedPlaybackSettingsParentFingerprint import app.revanced.patches.youtube.misc.playertype.patch.PlayerTypeHookPatch import app.revanced.patches.youtube.misc.settings.bytecode.patch.SettingsPatch -import org.jf.dexlib2.iface.instruction.ReferenceInstruction -import org.jf.dexlib2.iface.reference.MethodReference +import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction +import com.android.tools.smali.dexlib2.iface.reference.MethodReference @Patch @Name("Minimized playback") diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/playercontrols/bytecode/patch/PlayerControlsBytecodePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/playercontrols/bytecode/patch/PlayerControlsBytecodePatch.kt index 2658d4502..2fef90c1c 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/playercontrols/bytecode/patch/PlayerControlsBytecodePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/playercontrols/bytecode/patch/PlayerControlsBytecodePatch.kt @@ -13,7 +13,7 @@ import app.revanced.patches.youtube.misc.playercontrols.annotation.PlayerControl import app.revanced.patches.youtube.misc.playercontrols.fingerprints.BottomControlsInflateFingerprint import app.revanced.patches.youtube.misc.playercontrols.fingerprints.PlayerControlsVisibilityFingerprint import app.revanced.patches.youtube.misc.playercontrols.resource.patch.BottomControlsResourcePatch -import org.jf.dexlib2.iface.instruction.OneRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction @Name("Player controls bytecode patch") @DependsOn([BottomControlsResourcePatch::class]) diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/playercontrols/fingerprints/BottomControlsInflateFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/playercontrols/fingerprints/BottomControlsInflateFingerprint.kt index 63864aa56..6f340c2d4 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/playercontrols/fingerprints/BottomControlsInflateFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/playercontrols/fingerprints/BottomControlsInflateFingerprint.kt @@ -3,8 +3,8 @@ package app.revanced.patches.youtube.misc.playercontrols.fingerprints import app.revanced.patcher.extensions.or import app.revanced.util.patch.LiteralValueFingerprint import app.revanced.patches.youtube.misc.playercontrols.resource.patch.BottomControlsResourcePatch -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object BottomControlsInflateFingerprint : LiteralValueFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL or AccessFlags.SYNTHETIC, diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/playercontrols/fingerprints/PlayerControlsVisibilityFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/playercontrols/fingerprints/PlayerControlsVisibilityFingerprint.kt index db64aaaa4..3d9a23720 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/playercontrols/fingerprints/PlayerControlsVisibilityFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/playercontrols/fingerprints/PlayerControlsVisibilityFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.youtube.misc.playercontrols.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags object PlayerControlsVisibilityFingerprint : MethodFingerprint( accessFlags = AccessFlags.PRIVATE or AccessFlags.FINAL, diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/playertype/fingerprint/PlayerTypeFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/playertype/fingerprint/PlayerTypeFingerprint.kt index c6588b82f..477b63d96 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/playertype/fingerprint/PlayerTypeFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/playertype/fingerprint/PlayerTypeFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.youtube.misc.playertype.fingerprint import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object PlayerTypeFingerprint : MethodFingerprint( returnType = "V", diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/playertype/fingerprint/VideoStateFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/playertype/fingerprint/VideoStateFingerprint.kt index 259915bca..5212f68a3 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/playertype/fingerprint/VideoStateFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/playertype/fingerprint/VideoStateFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.youtube.misc.playertype.fingerprint import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object VideoStateFingerprint : MethodFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/playertype/patch/PlayerTypeHookPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/playertype/patch/PlayerTypeHookPatch.kt index ddf02cbdf..82f578da5 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/playertype/patch/PlayerTypeHookPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/playertype/patch/PlayerTypeHookPatch.kt @@ -15,7 +15,7 @@ import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch import app.revanced.patches.youtube.misc.playertype.annotation.PlayerTypeHookCompatibility import app.revanced.patches.youtube.misc.playertype.fingerprint.PlayerTypeFingerprint import app.revanced.patches.youtube.misc.playertype.fingerprint.VideoStateFingerprint -import org.jf.dexlib2.iface.instruction.ReferenceInstruction +import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction @Name("Player type hook") @Description("Hook to get the current player type and video playback state.") diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/settings/bytecode/fingerprints/LicenseActivityFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/settings/bytecode/fingerprints/LicenseActivityFingerprint.kt index 05dfba24f..ab6fea8f1 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/settings/bytecode/fingerprints/LicenseActivityFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/settings/bytecode/fingerprints/LicenseActivityFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.youtube.misc.settings.bytecode.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags object LicenseActivityFingerprint : MethodFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/settings/bytecode/fingerprints/SetThemeFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/settings/bytecode/fingerprints/SetThemeFingerprint.kt index 77e548568..f4e81b847 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/settings/bytecode/fingerprints/SetThemeFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/settings/bytecode/fingerprints/SetThemeFingerprint.kt @@ -3,8 +3,8 @@ package app.revanced.patches.youtube.misc.settings.bytecode.fingerprints import app.revanced.patcher.extensions.or import app.revanced.util.patch.LiteralValueFingerprint import app.revanced.patches.youtube.misc.settings.resource.patch.SettingsResourcePatch -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object SetThemeFingerprint : LiteralValueFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/settings/bytecode/patch/SettingsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/settings/bytecode/patch/SettingsPatch.kt index 9436d1616..5d8aa1d0b 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/settings/bytecode/patch/SettingsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/settings/bytecode/patch/SettingsPatch.kt @@ -18,9 +18,9 @@ import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch import app.revanced.patches.youtube.misc.settings.bytecode.fingerprints.LicenseActivityFingerprint import app.revanced.patches.youtube.misc.settings.bytecode.fingerprints.SetThemeFingerprint import app.revanced.patches.youtube.misc.settings.resource.patch.SettingsResourcePatch -import org.jf.dexlib2.Opcode -import org.jf.dexlib2.iface.instruction.OneRegisterInstruction -import org.jf.dexlib2.util.MethodUtil +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction +import com.android.tools.smali.dexlib2.util.MethodUtil import java.io.Closeable @DependsOn([IntegrationsPatch::class, SettingsResourcePatch::class]) diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/hdrbrightness/fingerprints/HDRBrightnessFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/video/hdrbrightness/fingerprints/HDRBrightnessFingerprint.kt index 0db80f880..80db39acf 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/hdrbrightness/fingerprints/HDRBrightnessFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/video/hdrbrightness/fingerprints/HDRBrightnessFingerprint.kt @@ -1,7 +1,7 @@ package app.revanced.patches.youtube.video.hdrbrightness.fingerprints import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.Opcode object HDRBrightnessFingerprint : MethodFingerprint( "V", diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/hdrbrightness/patch/HDRBrightnessPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/video/hdrbrightness/patch/HDRBrightnessPatch.kt index 69de86968..d8fb5d49d 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/hdrbrightness/patch/HDRBrightnessPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/video/hdrbrightness/patch/HDRBrightnessPatch.kt @@ -15,9 +15,9 @@ import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch import app.revanced.patches.youtube.misc.settings.bytecode.patch.SettingsPatch import app.revanced.patches.youtube.video.hdrbrightness.annotations.HDRBrightnessCompatibility import app.revanced.patches.youtube.video.hdrbrightness.fingerprints.HDRBrightnessFingerprint -import org.jf.dexlib2.iface.instruction.ReferenceInstruction -import org.jf.dexlib2.iface.instruction.TwoRegisterInstruction -import org.jf.dexlib2.iface.reference.FieldReference +import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction +import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction +import com.android.tools.smali.dexlib2.iface.reference.FieldReference @Patch @Name("HDR auto brightness") diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/information/fingerprints/OnPlaybackSpeedItemClickFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/video/information/fingerprints/OnPlaybackSpeedItemClickFingerprint.kt index 81de6a392..cdb5fd172 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/information/fingerprints/OnPlaybackSpeedItemClickFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/video/information/fingerprints/OnPlaybackSpeedItemClickFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.youtube.video.information.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object OnPlaybackSpeedItemClickFingerprint : MethodFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/information/fingerprints/PlayerControllerSetTimeReferenceFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/video/information/fingerprints/PlayerControllerSetTimeReferenceFingerprint.kt index 628421a01..578bb6a28 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/information/fingerprints/PlayerControllerSetTimeReferenceFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/video/information/fingerprints/PlayerControllerSetTimeReferenceFingerprint.kt @@ -3,7 +3,7 @@ package app.revanced.patches.youtube.video.information.fingerprints import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.Opcode object PlayerControllerSetTimeReferenceFingerprint : MethodFingerprint( opcodes = listOf(Opcode.INVOKE_DIRECT_RANGE, Opcode.IGET_OBJECT), diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/information/fingerprints/VideoLengthFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/video/information/fingerprints/VideoLengthFingerprint.kt index 89d4d16c6..6dbeef191 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/information/fingerprints/VideoLengthFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/video/information/fingerprints/VideoLengthFingerprint.kt @@ -3,7 +3,7 @@ package app.revanced.patches.youtube.video.information.fingerprints import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.Opcode object VideoLengthFingerprint : MethodFingerprint( opcodes = listOf( diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/information/patch/VideoInformationPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/video/information/patch/VideoInformationPatch.kt index 3b3a3dcae..cb2ea76fc 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/information/patch/VideoInformationPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/video/information/patch/VideoInformationPatch.kt @@ -21,16 +21,16 @@ import app.revanced.patches.youtube.video.information.annotation.VideoInformatio import app.revanced.patches.youtube.video.information.fingerprints.* import app.revanced.patches.youtube.video.speed.remember.patch.RememberPlaybackSpeedPatch import app.revanced.patches.youtube.video.videoid.patch.VideoIdPatch -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode -import org.jf.dexlib2.builder.BuilderInstruction -import org.jf.dexlib2.builder.MutableMethodImplementation -import org.jf.dexlib2.iface.instruction.FiveRegisterInstruction -import org.jf.dexlib2.iface.instruction.OneRegisterInstruction -import org.jf.dexlib2.iface.instruction.ReferenceInstruction -import org.jf.dexlib2.immutable.ImmutableMethod -import org.jf.dexlib2.immutable.ImmutableMethodParameter -import org.jf.dexlib2.util.MethodUtil +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.builder.BuilderInstruction +import com.android.tools.smali.dexlib2.builder.MutableMethodImplementation +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.instruction.ReferenceInstruction +import com.android.tools.smali.dexlib2.immutable.ImmutableMethod +import com.android.tools.smali.dexlib2.immutable.ImmutableMethodParameter +import com.android.tools.smali.dexlib2.util.MethodUtil @Name("Video information") @Description("Hooks YouTube to get information about the current playing video.") diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/quality/fingerprints/NewVideoQualityChangedFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/video/quality/fingerprints/NewVideoQualityChangedFingerprint.kt index f1dcf0a5b..c37910da7 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/quality/fingerprints/NewVideoQualityChangedFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/video/quality/fingerprints/NewVideoQualityChangedFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.youtube.video.quality.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object NewVideoQualityChangedFingerprint : MethodFingerprint( returnType = "L", diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/quality/fingerprints/SetQualityByIndexMethodClassFieldReferenceFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/video/quality/fingerprints/SetQualityByIndexMethodClassFieldReferenceFingerprint.kt index a4707a492..aa76503fa 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/quality/fingerprints/SetQualityByIndexMethodClassFieldReferenceFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/video/quality/fingerprints/SetQualityByIndexMethodClassFieldReferenceFingerprint.kt @@ -1,7 +1,7 @@ package app.revanced.patches.youtube.video.quality.fingerprints import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.Opcode /** * Resolves with the class found in [VideoQualitySetterFingerprint]. diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/quality/fingerprints/VideoQualitySetterFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/video/quality/fingerprints/VideoQualitySetterFingerprint.kt index ab95b0b5b..01dc3cf62 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/quality/fingerprints/VideoQualitySetterFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/video/quality/fingerprints/VideoQualitySetterFingerprint.kt @@ -3,8 +3,8 @@ package app.revanced.patches.youtube.video.quality.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object VideoQualitySetterFingerprint : MethodFingerprint( "V", diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/quality/patch/RememberVideoQualityPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/video/quality/patch/RememberVideoQualityPatch.kt index 6cf2e8979..8bd9abdd4 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/quality/patch/RememberVideoQualityPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/video/quality/patch/RememberVideoQualityPatch.kt @@ -26,9 +26,9 @@ import app.revanced.patches.youtube.video.quality.fingerprints.NewVideoQualityCh import app.revanced.patches.youtube.video.quality.fingerprints.SetQualityByIndexMethodClassFieldReferenceFingerprint import app.revanced.patches.youtube.video.quality.fingerprints.VideoQualityItemOnClickParentFingerprint import app.revanced.patches.youtube.video.quality.fingerprints.VideoQualitySetterFingerprint -import org.jf.dexlib2.iface.instruction.ReferenceInstruction -import org.jf.dexlib2.iface.instruction.TwoRegisterInstruction -import org.jf.dexlib2.iface.reference.FieldReference +import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction +import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction +import com.android.tools.smali.dexlib2.iface.reference.FieldReference @Patch @DependsOn([IntegrationsPatch::class, VideoInformationPatch::class, SettingsPatch::class]) diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/speed/custom/fingerprints/SpeedArrayGeneratorFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/video/speed/custom/fingerprints/SpeedArrayGeneratorFingerprint.kt index ba9982988..734ef993e 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/speed/custom/fingerprints/SpeedArrayGeneratorFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/video/speed/custom/fingerprints/SpeedArrayGeneratorFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.youtube.video.speed.custom.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object SpeedArrayGeneratorFingerprint : MethodFingerprint( returnType = "[L", diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/speed/custom/fingerprints/SpeedLimiterFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/video/speed/custom/fingerprints/SpeedLimiterFingerprint.kt index 30c315de8..8e615f854 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/speed/custom/fingerprints/SpeedLimiterFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/video/speed/custom/fingerprints/SpeedLimiterFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.youtube.video.speed.custom.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object SpeedLimiterFingerprint : MethodFingerprint( "V", diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/speed/custom/patch/CustomPlaybackSpeedPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/video/speed/custom/patch/CustomPlaybackSpeedPatch.kt index f3c08a83a..509add41e 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/speed/custom/patch/CustomPlaybackSpeedPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/video/speed/custom/patch/CustomPlaybackSpeedPatch.kt @@ -16,19 +16,21 @@ import app.revanced.patcher.patch.PatchResultError import app.revanced.patcher.patch.PatchResultSuccess import app.revanced.patcher.patch.annotations.DependsOn import app.revanced.patcher.util.proxy.mutableTypes.MutableField.Companion.toMutable -import app.revanced.patches.shared.settings.preference.impl.* +import app.revanced.patches.shared.settings.preference.impl.InputType +import app.revanced.patches.shared.settings.preference.impl.StringResource +import app.revanced.patches.shared.settings.preference.impl.TextPreference import app.revanced.patches.youtube.misc.bottomsheet.hook.patch.BottomSheetHookPatch import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch import app.revanced.patches.youtube.misc.litho.filter.patch.LithoFilterPatch import app.revanced.patches.youtube.misc.settings.bytecode.patch.SettingsPatch import app.revanced.patches.youtube.video.speed.custom.fingerprints.* -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.iface.instruction.NarrowLiteralInstruction -import org.jf.dexlib2.iface.instruction.OneRegisterInstruction -import org.jf.dexlib2.iface.instruction.ReferenceInstruction -import org.jf.dexlib2.iface.reference.FieldReference -import org.jf.dexlib2.iface.reference.MethodReference -import org.jf.dexlib2.immutable.ImmutableField +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.iface.instruction.NarrowLiteralInstruction +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction +import com.android.tools.smali.dexlib2.iface.reference.FieldReference +import com.android.tools.smali.dexlib2.iface.reference.MethodReference +import com.android.tools.smali.dexlib2.immutable.ImmutableField @Name("Custom playback speed") @Description("Adds custom playback speed options.") diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/speed/remember/patch/RememberPlaybackSpeedPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/video/speed/remember/patch/RememberPlaybackSpeedPatch.kt index 620e74399..e1f3cfbbc 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/speed/remember/patch/RememberPlaybackSpeedPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/video/speed/remember/patch/RememberPlaybackSpeedPatch.kt @@ -20,7 +20,7 @@ import app.revanced.patches.youtube.misc.settings.bytecode.patch.SettingsPatch import app.revanced.patches.youtube.video.information.patch.VideoInformationPatch import app.revanced.patches.youtube.video.speed.custom.patch.CustomPlaybackSpeedPatch import app.revanced.patches.youtube.video.speed.remember.fingerprint.InitializePlaybackSpeedValuesFingerprint -import org.jf.dexlib2.iface.instruction.ReferenceInstruction +import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction @Name("Remember playback speed") @Description("Adds the ability to remember the playback speed you chose in the playback speed flyout.") diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/videoid/fingerprint/VideoIdFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/video/videoid/fingerprint/VideoIdFingerprint.kt index 3f4a0e237..ae8dfadc4 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/videoid/fingerprint/VideoIdFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/video/videoid/fingerprint/VideoIdFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.youtube.video.videoid.fingerprint import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object VideoIdFingerprint : MethodFingerprint( returnType = "V", diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/videoid/fingerprint/VideoIdFingerprintBackgroundPlay.kt b/src/main/kotlin/app/revanced/patches/youtube/video/videoid/fingerprint/VideoIdFingerprintBackgroundPlay.kt index 6f7da47b4..1556a600f 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/videoid/fingerprint/VideoIdFingerprintBackgroundPlay.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/video/videoid/fingerprint/VideoIdFingerprintBackgroundPlay.kt @@ -2,8 +2,8 @@ package app.revanced.patches.youtube.video.videoid.fingerprint import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object VideoIdFingerprintBackgroundPlay : MethodFingerprint( returnType = "V", diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/videoid/patch/VideoIdPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/video/videoid/patch/VideoIdPatch.kt index 8f7b19024..92ed1f390 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/videoid/patch/VideoIdPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/video/videoid/patch/VideoIdPatch.kt @@ -15,7 +15,7 @@ import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch import app.revanced.patches.youtube.video.videoid.annotation.VideoIdCompatibility import app.revanced.patches.youtube.video.videoid.fingerprint.VideoIdFingerprint import app.revanced.patches.youtube.video.videoid.fingerprint.VideoIdFingerprintBackgroundPlay -import org.jf.dexlib2.iface.instruction.OneRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction @Name("Video id hook") @Description("Hooks to detect when the video id changes") diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/videoqualitymenu/fingerprints/VideoQualityMenuViewInflateFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/video/videoqualitymenu/fingerprints/VideoQualityMenuViewInflateFingerprint.kt index 4e2424a33..989aa0deb 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/videoqualitymenu/fingerprints/VideoQualityMenuViewInflateFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/video/videoqualitymenu/fingerprints/VideoQualityMenuViewInflateFingerprint.kt @@ -3,8 +3,8 @@ package app.revanced.patches.youtube.video.videoqualitymenu.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patches.youtube.video.videoqualitymenu.patch.OldVideoQualityMenuResourcePatch import app.revanced.util.patch.LiteralValueFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object VideoQualityMenuViewInflateFingerprint : LiteralValueFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/videoqualitymenu/patch/OldVideoQualityMenuPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/video/videoqualitymenu/patch/OldVideoQualityMenuPatch.kt index ed50f07d2..d0111b2a9 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/videoqualitymenu/patch/OldVideoQualityMenuPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/video/videoqualitymenu/patch/OldVideoQualityMenuPatch.kt @@ -15,7 +15,7 @@ import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch import app.revanced.patches.youtube.misc.litho.filter.patch.LithoFilterPatch import app.revanced.patches.youtube.video.videoqualitymenu.annotations.OldVideoQualityMenuCompatibility import app.revanced.patches.youtube.video.videoqualitymenu.fingerprints.VideoQualityMenuViewInflateFingerprint -import org.jf.dexlib2.iface.instruction.OneRegisterInstruction +import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction @Patch @DependsOn([ diff --git a/src/main/kotlin/app/revanced/patches/youtubevanced/ad/general/fingerprints/ContainsAdFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtubevanced/ad/general/fingerprints/ContainsAdFingerprint.kt index 3d77a1447..1ed40c6ad 100644 --- a/src/main/kotlin/app/revanced/patches/youtubevanced/ad/general/fingerprints/ContainsAdFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtubevanced/ad/general/fingerprints/ContainsAdFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.youtubevanced.ad.general.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object ContainsAdFingerprint:MethodFingerprint( returnType = "Z", diff --git a/src/main/kotlin/app/revanced/patches/youtubevanced/ad/general/patch/HideAdsPatch.kt b/src/main/kotlin/app/revanced/patches/youtubevanced/ad/general/patch/HideAdsPatch.kt index 439a44a2f..30544e8c2 100644 --- a/src/main/kotlin/app/revanced/patches/youtubevanced/ad/general/patch/HideAdsPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtubevanced/ad/general/patch/HideAdsPatch.kt @@ -14,7 +14,7 @@ import app.revanced.patcher.patch.annotations.Patch import app.revanced.patches.shared.misc.fix.verticalscroll.patch.VerticalScrollPatch import app.revanced.patches.youtubevanced.ad.general.annotations.HideAdsCompatibility import app.revanced.patches.youtubevanced.ad.general.fingerprints.ContainsAdFingerprint -import org.jf.dexlib2.iface.instruction.formats.Instruction21c +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction21c @Patch @Name("Hide ads") diff --git a/src/main/kotlin/app/revanced/patches/yuka/misc/unlockpremium/fingerprints/IsPremiumFingerprint.kt b/src/main/kotlin/app/revanced/patches/yuka/misc/unlockpremium/fingerprints/IsPremiumFingerprint.kt index 4835c4048..06b4a3770 100644 --- a/src/main/kotlin/app/revanced/patches/yuka/misc/unlockpremium/fingerprints/IsPremiumFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/yuka/misc/unlockpremium/fingerprints/IsPremiumFingerprint.kt @@ -2,8 +2,8 @@ package app.revanced.patches.yuka.misc.unlockpremium.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode object IsPremiumFingerprint : MethodFingerprint( returnType = "Z", diff --git a/src/main/kotlin/app/revanced/patches/yuka/misc/unlockpremium/fingerprints/YukaUserConstructorFingerprint.kt b/src/main/kotlin/app/revanced/patches/yuka/misc/unlockpremium/fingerprints/YukaUserConstructorFingerprint.kt index 67aba3720..5d9d2237b 100644 --- a/src/main/kotlin/app/revanced/patches/yuka/misc/unlockpremium/fingerprints/YukaUserConstructorFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/yuka/misc/unlockpremium/fingerprints/YukaUserConstructorFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.patches.yuka.misc.unlockpremium.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.AccessFlags object YukaUserConstructorFingerprint : MethodFingerprint( returnType = "V", diff --git a/src/main/kotlin/app/revanced/util/microg/MicroGBytecodeHelper.kt b/src/main/kotlin/app/revanced/util/microg/MicroGBytecodeHelper.kt index ccc57627b..866d36782 100644 --- a/src/main/kotlin/app/revanced/util/microg/MicroGBytecodeHelper.kt +++ b/src/main/kotlin/app/revanced/util/microg/MicroGBytecodeHelper.kt @@ -12,11 +12,11 @@ import app.revanced.util.microg.Constants.ACTIONS import app.revanced.util.microg.Constants.AUTHORITIES import app.revanced.util.microg.Constants.MICROG_VENDOR import app.revanced.util.microg.Constants.PERMISSIONS -import org.jf.dexlib2.Opcode -import org.jf.dexlib2.builder.instruction.BuilderInstruction21c -import org.jf.dexlib2.iface.instruction.formats.Instruction21c -import org.jf.dexlib2.iface.reference.StringReference -import org.jf.dexlib2.immutable.reference.ImmutableStringReference +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.builder.instruction.BuilderInstruction21c +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction21c +import com.android.tools.smali.dexlib2.iface.reference.StringReference +import com.android.tools.smali.dexlib2.immutable.reference.ImmutableStringReference /** * Helper class for applying bytecode patches needed for the microg-support patches. diff --git a/src/main/kotlin/app/revanced/util/patch/AbstractTransformInstructionsPatch.kt b/src/main/kotlin/app/revanced/util/patch/AbstractTransformInstructionsPatch.kt index a8354c6bd..1d51b33dd 100644 --- a/src/main/kotlin/app/revanced/util/patch/AbstractTransformInstructionsPatch.kt +++ b/src/main/kotlin/app/revanced/util/patch/AbstractTransformInstructionsPatch.kt @@ -6,9 +6,9 @@ import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.PatchResult import app.revanced.patcher.patch.PatchResultSuccess import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod -import org.jf.dexlib2.iface.ClassDef -import org.jf.dexlib2.iface.Method -import org.jf.dexlib2.iface.instruction.Instruction +import com.android.tools.smali.dexlib2.iface.ClassDef +import com.android.tools.smali.dexlib2.iface.Method +import com.android.tools.smali.dexlib2.iface.instruction.Instruction internal abstract class AbstractTransformInstructionsPatch : BytecodePatch() { diff --git a/src/main/kotlin/app/revanced/util/patch/LiteralValueFingerprint.kt b/src/main/kotlin/app/revanced/util/patch/LiteralValueFingerprint.kt index ec977e062..86c3b98e5 100644 --- a/src/main/kotlin/app/revanced/util/patch/LiteralValueFingerprint.kt +++ b/src/main/kotlin/app/revanced/util/patch/LiteralValueFingerprint.kt @@ -2,7 +2,7 @@ package app.revanced.util.patch import app.revanced.extensions.containsConstantInstructionValue import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import org.jf.dexlib2.Opcode +import com.android.tools.smali.dexlib2.Opcode abstract class LiteralValueFingerprint( returnType: String? = null, diff --git a/src/main/kotlin/app/revanced/util/patch/MethodCall.kt b/src/main/kotlin/app/revanced/util/patch/MethodCall.kt index 9bd1bd447..6d3a3e069 100644 --- a/src/main/kotlin/app/revanced/util/patch/MethodCall.kt +++ b/src/main/kotlin/app/revanced/util/patch/MethodCall.kt @@ -2,11 +2,11 @@ package app.revanced.util.patch import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod -import org.jf.dexlib2.Opcode -import org.jf.dexlib2.iface.ClassDef -import org.jf.dexlib2.iface.instruction.Instruction -import org.jf.dexlib2.iface.instruction.formats.Instruction35c -import org.jf.dexlib2.iface.reference.MethodReference +import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.ClassDef +import com.android.tools.smali.dexlib2.iface.instruction.Instruction +import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction35c +import com.android.tools.smali.dexlib2.iface.reference.MethodReference internal typealias Instruction35cInfo = Triple From 597e15160a33a85daedf93bcb3f7d04e3010b88e Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 14 Aug 2023 02:15:25 +0000 Subject: [PATCH 35/67] chore(release): 2.188.0-dev.15 [skip ci] # [2.188.0-dev.15](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.14...v2.188.0-dev.15) (2023-08-14) --- CHANGELOG.md | 2 ++ gradle.properties | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5d2c02431..50bf4885f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,5 @@ +# [2.188.0-dev.15](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.14...v2.188.0-dev.15) (2023-08-14) + # [2.188.0-dev.14](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.13...v2.188.0-dev.14) (2023-08-13) diff --git a/gradle.properties b/gradle.properties index 618bfd280..5c491ac32 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ org.gradle.parallel = true org.gradle.caching = true kotlin.code.style = official -version = 2.188.0-dev.14 +version = 2.188.0-dev.15 From fd3813f66ededdae1e52bf021a3de9d818f65096 Mon Sep 17 00:00:00 2001 From: oSumAtrIX Date: Sat, 19 Aug 2023 02:48:21 +0200 Subject: [PATCH 36/67] fix(YouTube Music - Remove upgrade button): Remove the correct navigation bar item A new item has been added to the list, so the index has to be shifted by one. This is not a final solution and the last index should be removed dynamically --- .../layout/upgradebutton/patch/RemoveUpgradeButtonPatch.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/app/revanced/patches/music/layout/upgradebutton/patch/RemoveUpgradeButtonPatch.kt b/src/main/kotlin/app/revanced/patches/music/layout/upgradebutton/patch/RemoveUpgradeButtonPatch.kt index 43a083179..2cf4fdb9e 100644 --- a/src/main/kotlin/app/revanced/patches/music/layout/upgradebutton/patch/RemoveUpgradeButtonPatch.kt +++ b/src/main/kotlin/app/revanced/patches/music/layout/upgradebutton/patch/RemoveUpgradeButtonPatch.kt @@ -18,7 +18,7 @@ import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction35c @Patch -@Name("Upgrade button remover") +@Name("Remove upgrade button") @Description("Removes the upgrade tab from the pivot bar.") @MusicCompatibility class RemoveUpgradeButtonPatch : BytecodePatch( @@ -36,7 +36,7 @@ class RemoveUpgradeButtonPatch : BytecodePatch( val instructionList = """ invoke-interface { v0 }, Ljava/util/List;->size()I move-result v1 - const/4 v2, 0x3 + const/4 v2, 0x4 invoke-interface {v0, v2}, Ljava/util/List;->remove(I)Ljava/lang/Object; iput-object v0, v$register, $pivotBarElementFieldRef """.toInstructions().toMutableList() From f21843bf55155ad72c4d2ccc7aba30ea4a3034b3 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sat, 19 Aug 2023 00:51:44 +0000 Subject: [PATCH 37/67] chore(release): 2.188.0-dev.16 [skip ci] # [2.188.0-dev.16](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.15...v2.188.0-dev.16) (2023-08-19) ### Bug Fixes * **YouTube Music - Remove upgrade button:** Remove the correct navigation bar item ([fd3813f](https://github.com/ReVanced/revanced-patches/commit/fd3813f66ededdae1e52bf021a3de9d818f65096)) --- CHANGELOG.md | 7 +++++++ gradle.properties | 2 +- patches.json | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 50bf4885f..12e675cfe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [2.188.0-dev.16](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.15...v2.188.0-dev.16) (2023-08-19) + + +### Bug Fixes + +* **YouTube Music - Remove upgrade button:** Remove the correct navigation bar item ([fd3813f](https://github.com/ReVanced/revanced-patches/commit/fd3813f66ededdae1e52bf021a3de9d818f65096)) + # [2.188.0-dev.15](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.14...v2.188.0-dev.15) (2023-08-14) # [2.188.0-dev.14](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.13...v2.188.0-dev.14) (2023-08-13) diff --git a/gradle.properties b/gradle.properties index 5c491ac32..69f9e1196 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ org.gradle.parallel = true org.gradle.caching = true kotlin.code.style = official -version = 2.188.0-dev.15 +version = 2.188.0-dev.16 diff --git a/patches.json b/patches.json index a658ed217..7b13cf142 100644 --- a/patches.json +++ b/patches.json @@ -1 +1 @@ -[{"name":"Always autorepeat","description":"Always repeats the playing video again.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Auto claim channel points","description":"Automatically claim Channel Points.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Background play","description":"Enables playing music in the background.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Block audio ads","description":"Blocks audio ads in streams and VODs.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Block embedded ads","description":"Blocks embedded stream ads using services like TTV.lol or PurpleAdBlocker.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Block video ads","Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Block video ads","description":"Blocks video ads in streams and VODs.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Bypass certificate checks","description":"Bypasses certificate checks which prevent YouTube Music from working on Android Auto.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Change package name","description":"Changes the package name. Appends \".revanced\" to the package name by default.","version":"0.0.0","excluded":true,"options":[{"key":"packageName","title":"Package name","description":"The name of the package to rename the app to.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[]},{"name":"Client spoof","description":"Spoofs the client to allow playback.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Spoof signature verification"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Codecs unlock","description":"Adds more audio codec options. The new audio codecs usually result in better audio quality.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Comments","description":"Hides components related to comments.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings","LithoFilterPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Compact header","description":"Hides the music category bar at the top of the homepage.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Copy video url","description":"Adds buttons in player to copy video links.","version":"0.0.0","excluded":false,"options":[],"dependencies":["CopyVideoUrlResourcePatch","Player controls bytecode patch","Video information"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Custom branding","description":"Changes the YouTube launcher icon and name to your choice (defaults to ReVanced).","version":"0.0.0","excluded":false,"options":[{"key":"appName","title":"Application Name","description":"The name of the application it will show on your home screen.","required":true,"choices":null},{"key":"iconPath","title":"App Icon Path","description":"A path containing mipmap resource folders with icons.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Debug mode","description":"Enables Twitch\u0027s internal debugging mode.","version":"0.0.0","excluded":true,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":[]}]},{"name":"Disable Shorts on startup","description":"Disables playing YouTube Shorts when launching YouTube.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable Sync for Lemmy bottom sheet","description":"Disables the bottom sheet at the startup that asks you to signup to \"Sync for Lemmy\".","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":["v23.06.30-13:39"]},{"name":"com.laurencedawson.reddit_sync.pro","versions":[]},{"name":"com.laurencedawson.reddit_sync.dev","versions":[]}]},{"name":"Disable ads","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":[]}]},{"name":"Disable ads","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"o.o.joey","versions":[]}]},{"name":"Disable ads","description":"Disables ads in HexEditor.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.myprog.hexedit","versions":[]}]},{"name":"Disable auto captions","description":"Disable forced captions from being automatically enabled.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable fullscreen panels","description":"Disables video description and comments panel in fullscreen view.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable login requirement","description":"Do not force login.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Disable mandatory login","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.adobe.lrmobile","versions":[]}]},{"name":"Disable player popup panels","description":"Disables panels from appearing automatically when going into fullscreen (playlist or live chat).","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable screenshot popup","description":"Disables the popup that shows up when taking a screenshot.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Disable switching emoji to sticker in message input field","description":"Disables switching from emoji to sticker search mode in message input field","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Disable typing indicator","description":"Disables the indicator while typing a message","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Disable zoom haptics","description":"Disables haptics when zooming.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Downloads","description":"Removes download restrictions and changes the default path to download to.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Dynamic color","description":"Replaces the default Twitter Blue with the users Material You palette.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Enable android debugging","description":"Enables Android debugging capabilities.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Enable debugging","description":"Adds debugging options.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"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.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.spotify.lite","versions":[]}]},{"name":"Exclusive audio playback","description":"Enables the option to play music without video.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Export all activities","description":"Makes all app activities exportable.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"External downloads","description":"Adds support to download and save YouTube videos using an external app.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ExternalDownloadsResourcePatch","Player controls bytecode patch","Video information"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Feed filter","description":"Filters tiktok videos: removing ads, removing livestreams.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Fix google login","description":"Allows logging in with a Google account.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"HDR auto brightness","description":"Makes the brightness of HDR videos follow the system default.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide Shorts components","description":"Hides components from YouTube Shorts.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","LithoFilterPatch","HideShortsComponentsResourcePatch","ResourceMappingPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide ads","description":"Removes ads from the Reddit.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Hide subreddit banner","Hide comment ads"],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Hide ads","description":"Removes general ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["VerticalScrollPatch"],"compatiblePackages":[{"name":"com.vanced.android.youtube","versions":[]}]},{"name":"Hide ads","description":"Hides ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Json hook"],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Hide ads","description":"Removes ads from Inshorts.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.nis.app","versions":[]}]},{"name":"Hide ads","description":"Removes general ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Hide get premium","HideAdsResourcePatch","VerticalScrollPatch","FixBackToExitGesturePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide ads","description":"Removes ads from TikTok.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Hide ads","description":"Hides ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"jp.pxv.android","versions":[]}]},{"name":"Hide album cards","description":"Hides the album cards below the artist description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","AlbumCardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide autoplay button","description":"Hides the autoplay button in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","ResourceMappingPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide breaking news shelf","description":"Hides the breaking news shelf on the homepage tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","BreakingNewsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide captions button","description":"Hides the captions button on video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide cast button","description":"Hides the cast button in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Hide crowdfunding box","description":"Hides the crowdfunding box between the player and video description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","CrowdfundingBoxResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide email address","description":"Hides the email address in the account switcher.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideEmailAddressResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide endscreen cards","description":"Hides the suggested video cards at the end of a video in fullscreen.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideEndscreenCardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide filter bar","description":"Hides the filter bar in video feeds.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideFilterBarResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide floating microphone button","description":"Hides the floating microphone button which appears in search.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideFloatingMicrophoneButtonResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide get premium","description":"Removes all \"Get Premium\" evidences from the avatar menu.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Hide inbox ads","description":"Hides ads in inbox.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Hide info cards","description":"Hides info cards in videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideInfocardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide layout components","description":"Hides general layout components.","version":"0.0.0","excluded":false,"options":[],"dependencies":["LithoFilterPatch","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide load more button","description":"Hides the button under videos that loads similar videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideLoadMoreButtonResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide player buttons","description":"Adds the option to hide video player previous and next buttons.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide player overlay","description":"Hides the dark background overlay from the player when player controls are visible.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HidePlayerOverlayResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Hide premium navbar","description":"Removes the premium tab from the navbar.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ResourceMappingPatch"],"compatiblePackages":[{"name":"com.spotify.music","versions":[]}]},{"name":"Hide recommended users","description":"Hides recommended users.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Json hook"],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Hide seekbar","description":"Hides the seekbar.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","SeekbarColorBytecodePatch","SeekbarPreferencesPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide timeline ads","description":"Removes ads from the timeline.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.instagram.android","versions":["275.0.0.27.98"]}]},{"name":"Hide timestamp","description":"Hides timestamp in video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide video action buttons","description":"Adds the options to hide action buttons under a video.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ResourceMappingPatch","LithoFilterPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide watermark","description":"Hides creator\u0027s watermarks on videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Minimized playback","description":"Enables minimized and background playback.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Player type hook","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Minimized playback music","description":"Enables minimized playback on Kids music.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Music video ads","description":"Removes ads in the music player.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Navigation buttons","description":"Adds options to hide or change navigation buttons.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","ResolvePivotBarFingerprintsPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Old video quality menu","description":"Shows the old video quality with the advanced video quality options instead of the new one.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","OldVideoQualityMenuResourcePatch","LithoFilterPatch","BottomSheetHookPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.20.39","18.23.35"]}]},{"name":"Open links externally","description":"Open links outside of the app directly in your browser.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Override certificate pinning","description":"Overrides certificate pinning, allowing to inspect traffic via a proxy.","version":"0.0.0","excluded":true,"options":[],"dependencies":["Enable android debugging"],"compatiblePackages":[]},{"name":"Permanent repeat","description":"Permanently remember your repeating preference even if the playlist ends or another track is played.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Permanent shuffle","description":"Permanently remember your shuffle preference even if the playlist ends or another track is played.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Playback speed","description":"Adds custom playback speeds and ability to remember the playback speed you chose in the video playback speed flyout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Custom playback speed","Remember playback speed"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.20.39","18.23.35"]}]},{"name":"Playback speed","description":"Enables the playback speed option for all videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Player flyout menu","description":"Hides player flyout menu items.","version":"0.0.0","excluded":false,"options":[],"dependencies":["LithoFilterPatch","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Predictive back gesture","description":"Enables the predictive back gesture introduced on Android 13.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Premium heading","description":"Shows premium branding on the home screen.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Premium icon reddit","description":"Unlocks premium Reddit app icons.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Pro unlock","description":"Unlocks pro-only functions.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.backdrops.wallpapers","versions":["4.52"]}]},{"name":"Promo code unlock","description":"Disables the validation of promo code. Any code will work to unlock all features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Spoof cert patch"],"compatiblePackages":[{"name":"de.dwd.warnapp","versions":[]}]},{"name":"Remember video quality","description":"Adds the ability to remember the video quality you chose in the video quality flyout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video information","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.19.35","18.20.39","18.23.35"]}]},{"name":"Remove ads","description":"Removes all ads from the app.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"net.binarymode.android.irplus","versions":[]}]},{"name":"Remove badge tab","description":"Removes the badge tab from the activity tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.sony.songpal.mdr","versions":[]}]},{"name":"Remove bootloader detection","description":"Removes the check for an unlocked bootloader.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.bmf.bmf2go","versions":[]}]},{"name":"Remove broadcasts restriction","description":"Enables starting/stopping NetGuard via broadcasts.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"eu.faircode.netguard","versions":[]}]},{"name":"Remove debugging detection","description":"Removes the USB and wireless debugging checks.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.scb.phone","versions":[]}]},{"name":"Remove device restrictions","description":"Removes restrictions from using the app on any device.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.recorder","versions":[]}]},{"name":"Remove notification badge","description":"Removes the red notification badge from the activity tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.sony.songpal.mdr","versions":[]}]},{"name":"Remove player controls background","description":"Removes the background from the video player controls.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Remove root detection","description":"Removes the check for root permissions.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.bmf.bmf2go","versions":[]}]},{"name":"Remove root detection","description":"Removes the check for root permissions and unlocked bootloader.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.oe.app","versions":[]}]},{"name":"Remove screen capture restriction","description":"Removes the restriction of capturing audio from apps that normally wouldn\u0027t allow it.","version":"0.0.0","excluded":true,"options":[],"dependencies":["RemoveCaptureRestrictionResourcePatch"],"compatiblePackages":[]},{"name":"Remove screenshot restriction","description":"Removes the restriction of taking screenshots in apps that normally wouldn\u0027t allow it.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Return YouTube Dislike","description":"Shows the dislike count of videos using the Return YouTube Dislike API.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video id hook","ReturnYouTubeDislikeResourcePatch","Player type hook"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Sanitize sharing links","description":"Removes (tracking) query parameters from the URLs when sharing links.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Seekbar tapping","description":"Enables tap-to-seek on the seekbar of the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","EnableSeekbarTappingResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Settings","description":"Adds settings menu to Twitch.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","SettingsResourcePatch"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":[]}]},{"name":"Settings","description":"Adds ReVanced settings to TikTok.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Show deleted messages","description":"Shows deleted chat messages behind a clickable spoiler.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Show seekbar","description":"Shows progress bar for all video.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Sim spoof","description":"Spoofs the information which is retrieved from the sim-card.","version":"0.0.0","excluded":true,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"SponsorBlock","description":"Integrates SponsorBlock which allows skipping video segments such as sponsored content.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video id hook","Video information","Player type hook","Player controls bytecode patch","SponsorBlockResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Spoof app version","description":"Tricks YouTube into thinking you are running an older version of the app. One of the side effects also includes restoring the old UI.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://baconreader.com/auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.onelouder.baconreader","versions":[]},{"name":"com.onelouder.baconreader.premium","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"dbrady://relay\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"free.reddit.news","versions":[]},{"name":"reddit.news","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://rubenmayayo.com\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.rubenmayayo.reddit","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://www.ccrama.me\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"me.ccrama.redditslide","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"redditisfun://auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.andrewshu.android.reddit","versions":[]},{"name":"com.andrewshu.android.redditdonation","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://redditsync/auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":[]},{"name":"com.laurencedawson.reddit_sync.pro","versions":[]},{"name":"com.laurencedawson.reddit_sync.dev","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"https://127.0.0.1:65023/authorize_callback\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"o.o.joey","versions":[]},{"name":"o.o.joey.pro","versions":[]},{"name":"o.o.joey.dev","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"infinity://localhost\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"ml.docilealligator.infinityforreddit","versions":[]}]},{"name":"Spoof signature","description":"Spoofs the signature of the app.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.oe.app","versions":[]}]},{"name":"Spoof wifi connection","description":"Spoofs an existing Wi-Fi connection.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Spotify theme","description":"Applies a custom theme.","version":"0.0.0","excluded":false,"options":[{"key":"backgroundColor","title":"Background color","description":"The background color. Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"accentColor","title":"Accent color","description":"The accent color (\u0027spotify green\u0027 by default). Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"accentPressedColor","title":"Pressed accent for the dark theme","description":"The color when accented buttons are pressed, by default slightly darker than accent. Can be a hex color or a resource reference.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.spotify.music","versions":[]}]},{"name":"Swipe controls","description":"Adds volume and brightness swipe controls.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Player type hook","SwipeControlsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Tablet mini player","description":"Enables the tablet mini player layout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Theme","description":"Applies a custom theme.","version":"0.0.0","excluded":false,"options":[{"key":"darkThemeBackgroundColor","title":"Background color for the dark theme","description":"The background color of the dark theme. Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"lightThemeBackgroundColor","title":"Background color for the light theme","description":"The background color of the light theme. Can be a hex color or a resource reference.","required":false,"choices":null}],"dependencies":["Litho color hook","SeekbarColorBytecodePatch","ThemeResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Unlock paid widgets","description":"Unlocks paid widgets of the app","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.dci.dev.androidtwelvewidgets","versions":[]}]},{"name":"Unlock plus","description":"Unlocks plus features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["SignatureDetectionPatch"],"compatiblePackages":[{"name":"com.microblink.photomath","versions":["8.20.0"]}]},{"name":"Unlock premium","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"io.yuka.android","versions":[]}]},{"name":"Unlock premium","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.adobe.lrmobile","versions":[]}]},{"name":"Unlock pro","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.candylink.openvpn","versions":[]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"ginlemon.iconpackstudio","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["SignatureVerificationPatch","LicenseValidationPatch"],"compatiblePackages":[{"name":"com.zombodroid.MemeGenerator","versions":["4.6364","4.6370","4.6375","4.6377"]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.wakdev.apps.nfctools.se","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ithebk.expensemanager","versions":[]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"co.windyapp.android","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"tv.trakt.trakt","versions":["1.1.1"]}]},{"name":"Unlock pro","description":"Unlocks all professional features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"org.totschnig.myexpenses","versions":["3.4.9"]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.awedea.nyx","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.vsco.cam","versions":[]}]},{"name":"Unlock themes","description":"Unlocks all themes that are inaccessible until a certain level is reached.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ticktick.task","versions":[]}]},{"name":"Upgrade button remover","description":"Removes the upgrade tab from the pivot bar.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Vanced MicroG support","description":"Allows YouTube ReVanced to run without root and under a different package name with Vanced MicroG.","version":"0.0.0","excluded":false,"options":[],"dependencies":["MicroGResourcePatch","Hide cast button","Client spoof"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Vanced MicroG support","description":"Allows YouTube Music ReVanced to run without root and under a different package name.","version":"0.0.0","excluded":false,"options":[],"dependencies":["MicroGResourcePatch"],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Video ads","description":"Removes ads in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Wide searchbar","description":"Replaces the search icon with a wide search bar. This will hide the YouTube logo when active.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]}] \ No newline at end of file +[{"name":"Always autorepeat","description":"Always repeats the playing video again.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Auto claim channel points","description":"Automatically claim Channel Points.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Background play","description":"Enables playing music in the background.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Block audio ads","description":"Blocks audio ads in streams and VODs.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Block embedded ads","description":"Blocks embedded stream ads using services like TTV.lol or PurpleAdBlocker.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Block video ads","Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Block video ads","description":"Blocks video ads in streams and VODs.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Bypass certificate checks","description":"Bypasses certificate checks which prevent YouTube Music from working on Android Auto.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Change package name","description":"Changes the package name. Appends \".revanced\" to the package name by default.","version":"0.0.0","excluded":true,"options":[{"key":"packageName","title":"Package name","description":"The name of the package to rename the app to.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[]},{"name":"Client spoof","description":"Spoofs the client to allow playback.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Spoof signature verification"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Codecs unlock","description":"Adds more audio codec options. The new audio codecs usually result in better audio quality.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Comments","description":"Hides components related to comments.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings","LithoFilterPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Compact header","description":"Hides the music category bar at the top of the homepage.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Copy video url","description":"Adds buttons in player to copy video links.","version":"0.0.0","excluded":false,"options":[],"dependencies":["CopyVideoUrlResourcePatch","Player controls bytecode patch","Video information"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Custom branding","description":"Changes the YouTube launcher icon and name to your choice (defaults to ReVanced).","version":"0.0.0","excluded":false,"options":[{"key":"appName","title":"Application Name","description":"The name of the application it will show on your home screen.","required":true,"choices":null},{"key":"iconPath","title":"App Icon Path","description":"A path containing mipmap resource folders with icons.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Debug mode","description":"Enables Twitch\u0027s internal debugging mode.","version":"0.0.0","excluded":true,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":[]}]},{"name":"Disable Shorts on startup","description":"Disables playing YouTube Shorts when launching YouTube.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable Sync for Lemmy bottom sheet","description":"Disables the bottom sheet at the startup that asks you to signup to \"Sync for Lemmy\".","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":["v23.06.30-13:39"]},{"name":"com.laurencedawson.reddit_sync.pro","versions":[]},{"name":"com.laurencedawson.reddit_sync.dev","versions":[]}]},{"name":"Disable ads","description":"Disables ads in HexEditor.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.myprog.hexedit","versions":[]}]},{"name":"Disable ads","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":[]}]},{"name":"Disable ads","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"o.o.joey","versions":[]}]},{"name":"Disable auto captions","description":"Disable forced captions from being automatically enabled.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable fullscreen panels","description":"Disables video description and comments panel in fullscreen view.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable login requirement","description":"Do not force login.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Disable mandatory login","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.adobe.lrmobile","versions":[]}]},{"name":"Disable player popup panels","description":"Disables panels from appearing automatically when going into fullscreen (playlist or live chat).","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable screenshot popup","description":"Disables the popup that shows up when taking a screenshot.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Disable switching emoji to sticker in message input field","description":"Disables switching from emoji to sticker search mode in message input field","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Disable typing indicator","description":"Disables the indicator while typing a message","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Disable zoom haptics","description":"Disables haptics when zooming.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Downloads","description":"Removes download restrictions and changes the default path to download to.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Dynamic color","description":"Replaces the default Twitter Blue with the users Material You palette.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Enable android debugging","description":"Enables Android debugging capabilities.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Enable debugging","description":"Adds debugging options.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"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.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.spotify.lite","versions":[]}]},{"name":"Exclusive audio playback","description":"Enables the option to play music without video.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Export all activities","description":"Makes all app activities exportable.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"External downloads","description":"Adds support to download and save YouTube videos using an external app.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ExternalDownloadsResourcePatch","Player controls bytecode patch","Video information"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Feed filter","description":"Filters tiktok videos: removing ads, removing livestreams.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Fix google login","description":"Allows logging in with a Google account.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"HDR auto brightness","description":"Makes the brightness of HDR videos follow the system default.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide Shorts components","description":"Hides components from YouTube Shorts.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","LithoFilterPatch","HideShortsComponentsResourcePatch","ResourceMappingPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide ads","description":"Removes general ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Hide get premium","HideAdsResourcePatch","VerticalScrollPatch","FixBackToExitGesturePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide ads","description":"Removes ads from the Reddit.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Hide subreddit banner","Hide comment ads"],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Hide ads","description":"Hides ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Json hook"],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Hide ads","description":"Removes general ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["VerticalScrollPatch"],"compatiblePackages":[{"name":"com.vanced.android.youtube","versions":[]}]},{"name":"Hide ads","description":"Removes ads from TikTok.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Hide ads","description":"Removes ads from Inshorts.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.nis.app","versions":[]}]},{"name":"Hide ads","description":"Hides ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"jp.pxv.android","versions":[]}]},{"name":"Hide album cards","description":"Hides the album cards below the artist description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","AlbumCardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide autoplay button","description":"Hides the autoplay button in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","ResourceMappingPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide breaking news shelf","description":"Hides the breaking news shelf on the homepage tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","BreakingNewsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide captions button","description":"Hides the captions button on video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide cast button","description":"Hides the cast button in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Hide crowdfunding box","description":"Hides the crowdfunding box between the player and video description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","CrowdfundingBoxResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide email address","description":"Hides the email address in the account switcher.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideEmailAddressResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide endscreen cards","description":"Hides the suggested video cards at the end of a video in fullscreen.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideEndscreenCardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide filter bar","description":"Hides the filter bar in video feeds.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideFilterBarResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide floating microphone button","description":"Hides the floating microphone button which appears in search.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideFloatingMicrophoneButtonResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide get premium","description":"Removes all \"Get Premium\" evidences from the avatar menu.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Hide inbox ads","description":"Hides ads in inbox.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Hide info cards","description":"Hides info cards in videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideInfocardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide layout components","description":"Hides general layout components.","version":"0.0.0","excluded":false,"options":[],"dependencies":["LithoFilterPatch","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide load more button","description":"Hides the button under videos that loads similar videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideLoadMoreButtonResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide player buttons","description":"Adds the option to hide video player previous and next buttons.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide player overlay","description":"Hides the dark background overlay from the player when player controls are visible.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HidePlayerOverlayResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Hide premium navbar","description":"Removes the premium tab from the navbar.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ResourceMappingPatch"],"compatiblePackages":[{"name":"com.spotify.music","versions":[]}]},{"name":"Hide recommended users","description":"Hides recommended users.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Json hook"],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Hide seekbar","description":"Hides the seekbar.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","SeekbarColorBytecodePatch","SeekbarPreferencesPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide timeline ads","description":"Removes ads from the timeline.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.instagram.android","versions":["275.0.0.27.98"]}]},{"name":"Hide timestamp","description":"Hides timestamp in video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide video action buttons","description":"Adds the options to hide action buttons under a video.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ResourceMappingPatch","LithoFilterPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide watermark","description":"Hides creator\u0027s watermarks on videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Minimized playback","description":"Enables minimized and background playback.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Player type hook","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Minimized playback music","description":"Enables minimized playback on Kids music.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Music video ads","description":"Removes ads in the music player.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Navigation buttons","description":"Adds options to hide or change navigation buttons.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","ResolvePivotBarFingerprintsPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Old video quality menu","description":"Shows the old video quality with the advanced video quality options instead of the new one.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","OldVideoQualityMenuResourcePatch","LithoFilterPatch","BottomSheetHookPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.20.39","18.23.35"]}]},{"name":"Open links externally","description":"Open links outside of the app directly in your browser.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Override certificate pinning","description":"Overrides certificate pinning, allowing to inspect traffic via a proxy.","version":"0.0.0","excluded":true,"options":[],"dependencies":["Enable android debugging"],"compatiblePackages":[]},{"name":"Permanent repeat","description":"Permanently remember your repeating preference even if the playlist ends or another track is played.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Permanent shuffle","description":"Permanently remember your shuffle preference even if the playlist ends or another track is played.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Playback speed","description":"Adds custom playback speeds and ability to remember the playback speed you chose in the video playback speed flyout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Custom playback speed","Remember playback speed"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.20.39","18.23.35"]}]},{"name":"Playback speed","description":"Enables the playback speed option for all videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Player flyout menu","description":"Hides player flyout menu items.","version":"0.0.0","excluded":false,"options":[],"dependencies":["LithoFilterPatch","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Predictive back gesture","description":"Enables the predictive back gesture introduced on Android 13.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Premium heading","description":"Shows premium branding on the home screen.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Premium icon reddit","description":"Unlocks premium Reddit app icons.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Pro unlock","description":"Unlocks pro-only functions.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.backdrops.wallpapers","versions":["4.52"]}]},{"name":"Promo code unlock","description":"Disables the validation of promo code. Any code will work to unlock all features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Spoof cert patch"],"compatiblePackages":[{"name":"de.dwd.warnapp","versions":[]}]},{"name":"Remember video quality","description":"Adds the ability to remember the video quality you chose in the video quality flyout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video information","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.19.35","18.20.39","18.23.35"]}]},{"name":"Remove ads","description":"Removes all ads from the app.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"net.binarymode.android.irplus","versions":[]}]},{"name":"Remove badge tab","description":"Removes the badge tab from the activity tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.sony.songpal.mdr","versions":[]}]},{"name":"Remove bootloader detection","description":"Removes the check for an unlocked bootloader.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.bmf.bmf2go","versions":[]}]},{"name":"Remove broadcasts restriction","description":"Enables starting/stopping NetGuard via broadcasts.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"eu.faircode.netguard","versions":[]}]},{"name":"Remove debugging detection","description":"Removes the USB and wireless debugging checks.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.scb.phone","versions":[]}]},{"name":"Remove device restrictions","description":"Removes restrictions from using the app on any device.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.recorder","versions":[]}]},{"name":"Remove notification badge","description":"Removes the red notification badge from the activity tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.sony.songpal.mdr","versions":[]}]},{"name":"Remove player controls background","description":"Removes the background from the video player controls.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Remove root detection","description":"Removes the check for root permissions and unlocked bootloader.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.oe.app","versions":[]}]},{"name":"Remove root detection","description":"Removes the check for root permissions.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.bmf.bmf2go","versions":[]}]},{"name":"Remove screen capture restriction","description":"Removes the restriction of capturing audio from apps that normally wouldn\u0027t allow it.","version":"0.0.0","excluded":true,"options":[],"dependencies":["RemoveCaptureRestrictionResourcePatch"],"compatiblePackages":[]},{"name":"Remove screenshot restriction","description":"Removes the restriction of taking screenshots in apps that normally wouldn\u0027t allow it.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Remove upgrade button","description":"Removes the upgrade tab from the pivot bar.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Return YouTube Dislike","description":"Shows the dislike count of videos using the Return YouTube Dislike API.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video id hook","ReturnYouTubeDislikeResourcePatch","Player type hook"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Sanitize sharing links","description":"Removes (tracking) query parameters from the URLs when sharing links.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Seekbar tapping","description":"Enables tap-to-seek on the seekbar of the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","EnableSeekbarTappingResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Settings","description":"Adds settings menu to Twitch.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","SettingsResourcePatch"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":[]}]},{"name":"Settings","description":"Adds ReVanced settings to TikTok.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Show deleted messages","description":"Shows deleted chat messages behind a clickable spoiler.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Show seekbar","description":"Shows progress bar for all video.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Sim spoof","description":"Spoofs the information which is retrieved from the sim-card.","version":"0.0.0","excluded":true,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"SponsorBlock","description":"Integrates SponsorBlock which allows skipping video segments such as sponsored content.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video id hook","Video information","Player type hook","Player controls bytecode patch","SponsorBlockResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Spoof app version","description":"Tricks YouTube into thinking you are running an older version of the app. One of the side effects also includes restoring the old UI.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://baconreader.com/auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.onelouder.baconreader","versions":[]},{"name":"com.onelouder.baconreader.premium","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"dbrady://relay\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"free.reddit.news","versions":[]},{"name":"reddit.news","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"redditisfun://auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.andrewshu.android.reddit","versions":[]},{"name":"com.andrewshu.android.redditdonation","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"infinity://localhost\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"ml.docilealligator.infinityforreddit","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://rubenmayayo.com\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.rubenmayayo.reddit","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://redditsync/auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":[]},{"name":"com.laurencedawson.reddit_sync.pro","versions":[]},{"name":"com.laurencedawson.reddit_sync.dev","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"https://127.0.0.1:65023/authorize_callback\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"o.o.joey","versions":[]},{"name":"o.o.joey.pro","versions":[]},{"name":"o.o.joey.dev","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://www.ccrama.me\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"me.ccrama.redditslide","versions":[]}]},{"name":"Spoof signature","description":"Spoofs the signature of the app.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.oe.app","versions":[]}]},{"name":"Spoof wifi connection","description":"Spoofs an existing Wi-Fi connection.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Spotify theme","description":"Applies a custom theme.","version":"0.0.0","excluded":false,"options":[{"key":"backgroundColor","title":"Background color","description":"The background color. Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"accentColor","title":"Accent color","description":"The accent color (\u0027spotify green\u0027 by default). Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"accentPressedColor","title":"Pressed accent for the dark theme","description":"The color when accented buttons are pressed, by default slightly darker than accent. Can be a hex color or a resource reference.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.spotify.music","versions":[]}]},{"name":"Swipe controls","description":"Adds volume and brightness swipe controls.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Player type hook","SwipeControlsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Tablet mini player","description":"Enables the tablet mini player layout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Theme","description":"Applies a custom theme.","version":"0.0.0","excluded":false,"options":[{"key":"darkThemeBackgroundColor","title":"Background color for the dark theme","description":"The background color of the dark theme. Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"lightThemeBackgroundColor","title":"Background color for the light theme","description":"The background color of the light theme. Can be a hex color or a resource reference.","required":false,"choices":null}],"dependencies":["Litho color hook","SeekbarColorBytecodePatch","ThemeResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Unlock paid widgets","description":"Unlocks paid widgets of the app","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.dci.dev.androidtwelvewidgets","versions":[]}]},{"name":"Unlock plus","description":"Unlocks plus features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["SignatureDetectionPatch"],"compatiblePackages":[{"name":"com.microblink.photomath","versions":["8.20.0"]}]},{"name":"Unlock premium","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.adobe.lrmobile","versions":[]}]},{"name":"Unlock premium","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"io.yuka.android","versions":[]}]},{"name":"Unlock pro","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.candylink.openvpn","versions":[]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.wakdev.apps.nfctools.se","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ithebk.expensemanager","versions":[]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.awedea.nyx","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.vsco.cam","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["SignatureVerificationPatch","LicenseValidationPatch"],"compatiblePackages":[{"name":"com.zombodroid.MemeGenerator","versions":["4.6364","4.6370","4.6375","4.6377"]}]},{"name":"Unlock pro","description":"Unlocks all professional features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"org.totschnig.myexpenses","versions":["3.4.9"]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"tv.trakt.trakt","versions":["1.1.1"]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"ginlemon.iconpackstudio","versions":[]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"co.windyapp.android","versions":[]}]},{"name":"Unlock themes","description":"Unlocks all themes that are inaccessible until a certain level is reached.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ticktick.task","versions":[]}]},{"name":"Vanced MicroG support","description":"Allows YouTube ReVanced to run without root and under a different package name with Vanced MicroG.","version":"0.0.0","excluded":false,"options":[],"dependencies":["MicroGResourcePatch","Hide cast button","Client spoof"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Vanced MicroG support","description":"Allows YouTube Music ReVanced to run without root and under a different package name.","version":"0.0.0","excluded":false,"options":[],"dependencies":["MicroGResourcePatch"],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Video ads","description":"Removes ads in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Wide searchbar","description":"Replaces the search icon with a wide search bar. This will hide the YouTube logo when active.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]}] \ No newline at end of file From c92ed0170f4f433867c051cd0a493abb2fcc1ae6 Mon Sep 17 00:00:00 2001 From: Pun Butrach Date: Sat, 19 Aug 2023 20:37:51 +0700 Subject: [PATCH 38/67] build: update Gradle to v8.3 (#2843) --- gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 62f495dfe..ac72c34e8 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME From 8a4277c486d995f57cde3a56274979c4a7b42bf6 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Mon, 21 Aug 2023 10:28:34 +0400 Subject: [PATCH 39/67] feat(YouTube): Add `Alternative thumbnails` patch (#2834) Co-authored-by: oSumAtrIX --- .../AlternativeThumbnailsCompatibility.kt | 8 + ...tURLRequestCallbackOnFailureFingerprint.kt | 14 ++ ...estCallbackOnResponseStartedFingerprint.kt | 21 +++ ...RLRequestCallbackOnSucceededFingerprint.kt | 14 ++ .../MessageDigestImageUrlFingerprint.kt | 10 ++ .../MessageDigestImageUrlParentFingerprint.kt | 12 ++ .../patch/AlternativeThumbnailsPatch.kt | 167 ++++++++++++++++++ 7 files changed, 246 insertions(+) create mode 100644 src/main/kotlin/app/revanced/patches/youtube/layout/alternativethumbnails/annotations/AlternativeThumbnailsCompatibility.kt create mode 100644 src/main/kotlin/app/revanced/patches/youtube/layout/alternativethumbnails/bytecode/fingerprints/CronetURLRequestCallbackOnFailureFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/youtube/layout/alternativethumbnails/bytecode/fingerprints/CronetURLRequestCallbackOnResponseStartedFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/youtube/layout/alternativethumbnails/bytecode/fingerprints/CronetURLRequestCallbackOnSucceededFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/youtube/layout/alternativethumbnails/bytecode/fingerprints/MessageDigestImageUrlFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/youtube/layout/alternativethumbnails/bytecode/fingerprints/MessageDigestImageUrlParentFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/youtube/layout/alternativethumbnails/bytecode/patch/AlternativeThumbnailsPatch.kt diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/alternativethumbnails/annotations/AlternativeThumbnailsCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/alternativethumbnails/annotations/AlternativeThumbnailsCompatibility.kt new file mode 100644 index 000000000..1809f7571 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/alternativethumbnails/annotations/AlternativeThumbnailsCompatibility.kt @@ -0,0 +1,8 @@ +package app.revanced.patches.youtube.layout.alternativethumbnails.annotations + +import app.revanced.patcher.annotation.Compatibility +import app.revanced.patcher.annotation.Package + +@Compatibility([Package("com.google.android.youtube", arrayOf("18.20.39", "18.23.35"))]) +@Target(AnnotationTarget.CLASS) +internal annotation class AlternativeThumbnailsCompatibility diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/alternativethumbnails/bytecode/fingerprints/CronetURLRequestCallbackOnFailureFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/alternativethumbnails/bytecode/fingerprints/CronetURLRequestCallbackOnFailureFingerprint.kt new file mode 100644 index 000000000..281deb8b6 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/alternativethumbnails/bytecode/fingerprints/CronetURLRequestCallbackOnFailureFingerprint.kt @@ -0,0 +1,14 @@ +package app.revanced.patches.youtube.layout.alternativethumbnails.bytecode.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint +import com.android.tools.smali.dexlib2.AccessFlags + +object CronetURLRequestCallbackOnFailureFingerprint : MethodFingerprint( + returnType = "V", + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, + parameters = listOf("Lorg/chromium/net/UrlRequest;", "Lorg/chromium/net/UrlResponseInfo;", "Lorg/chromium/net/CronetException;"), + customFingerprint = { methodDef, _ -> + methodDef.name == "onFailed" + } +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/alternativethumbnails/bytecode/fingerprints/CronetURLRequestCallbackOnResponseStartedFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/alternativethumbnails/bytecode/fingerprints/CronetURLRequestCallbackOnResponseStartedFingerprint.kt new file mode 100644 index 000000000..bd295c736 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/alternativethumbnails/bytecode/fingerprints/CronetURLRequestCallbackOnResponseStartedFingerprint.kt @@ -0,0 +1,21 @@ +package app.revanced.patches.youtube.layout.alternativethumbnails.bytecode.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint +import com.android.tools.smali.dexlib2.AccessFlags + +// Acts as a parent fingerprint. +object CronetURLRequestCallbackOnResponseStartedFingerprint : MethodFingerprint( + returnType = "V", + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, + parameters = listOf("Lorg/chromium/net/UrlRequest;", "Lorg/chromium/net/UrlResponseInfo;"), + strings = listOf( + "Content-Length", + "Content-Type", + "identity", + "application/x-protobuf" + ), + customFingerprint = { methodDef, _ -> + methodDef.name == "onResponseStarted" + } +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/alternativethumbnails/bytecode/fingerprints/CronetURLRequestCallbackOnSucceededFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/alternativethumbnails/bytecode/fingerprints/CronetURLRequestCallbackOnSucceededFingerprint.kt new file mode 100644 index 000000000..516a1b1cf --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/alternativethumbnails/bytecode/fingerprints/CronetURLRequestCallbackOnSucceededFingerprint.kt @@ -0,0 +1,14 @@ +package app.revanced.patches.youtube.layout.alternativethumbnails.bytecode.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint +import com.android.tools.smali.dexlib2.AccessFlags + +object CronetURLRequestCallbackOnSucceededFingerprint : MethodFingerprint( + returnType = "V", + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, + parameters = listOf("Lorg/chromium/net/UrlRequest;", "Lorg/chromium/net/UrlResponseInfo;"), + customFingerprint = { methodDef, _ -> + methodDef.name == "onSucceeded" + } +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/alternativethumbnails/bytecode/fingerprints/MessageDigestImageUrlFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/alternativethumbnails/bytecode/fingerprints/MessageDigestImageUrlFingerprint.kt new file mode 100644 index 000000000..53fc96ea2 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/alternativethumbnails/bytecode/fingerprints/MessageDigestImageUrlFingerprint.kt @@ -0,0 +1,10 @@ +package app.revanced.patches.youtube.layout.alternativethumbnails.bytecode.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint +import com.android.tools.smali.dexlib2.AccessFlags + +object MessageDigestImageUrlFingerprint : MethodFingerprint( + accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, + parameters = listOf("Ljava/lang/String;", "L") +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/alternativethumbnails/bytecode/fingerprints/MessageDigestImageUrlParentFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/alternativethumbnails/bytecode/fingerprints/MessageDigestImageUrlParentFingerprint.kt new file mode 100644 index 000000000..1495650a4 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/alternativethumbnails/bytecode/fingerprints/MessageDigestImageUrlParentFingerprint.kt @@ -0,0 +1,12 @@ +package app.revanced.patches.youtube.layout.alternativethumbnails.bytecode.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint +import com.android.tools.smali.dexlib2.AccessFlags + +object MessageDigestImageUrlParentFingerprint : MethodFingerprint( + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, + returnType = "Ljava/lang/String;", + parameters = listOf(), + strings = listOf("@#&=*+-_.,:!?()/~'%;\$"), +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/alternativethumbnails/bytecode/patch/AlternativeThumbnailsPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/alternativethumbnails/bytecode/patch/AlternativeThumbnailsPatch.kt new file mode 100644 index 000000000..f24697edd --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/alternativethumbnails/bytecode/patch/AlternativeThumbnailsPatch.kt @@ -0,0 +1,167 @@ +package app.revanced.patches.youtube.layout.alternativethumbnails.bytecode.patch + +import app.revanced.extensions.toErrorResult +import app.revanced.patcher.annotation.Description +import app.revanced.patcher.annotation.Name +import app.revanced.patcher.data.BytecodeContext +import app.revanced.patcher.extensions.InstructionExtensions.addInstruction +import app.revanced.patcher.extensions.InstructionExtensions.addInstructions +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint.Companion.resolve +import app.revanced.patcher.patch.BytecodePatch +import app.revanced.patcher.patch.PatchResult +import app.revanced.patcher.patch.PatchResultSuccess +import app.revanced.patcher.patch.annotations.DependsOn +import app.revanced.patcher.patch.annotations.Patch +import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod +import app.revanced.patches.shared.settings.preference.impl.ArrayResource +import app.revanced.patches.shared.settings.preference.impl.ListPreference +import app.revanced.patches.shared.settings.preference.impl.NonInteractivePreference +import app.revanced.patches.shared.settings.preference.impl.PreferenceScreen +import app.revanced.patches.shared.settings.preference.impl.StringResource +import app.revanced.patches.shared.settings.preference.impl.SwitchPreference +import app.revanced.patches.youtube.layout.alternativethumbnails.annotations.AlternativeThumbnailsCompatibility +import app.revanced.patches.youtube.layout.alternativethumbnails.bytecode.fingerprints.CronetURLRequestCallbackOnFailureFingerprint +import app.revanced.patches.youtube.layout.alternativethumbnails.bytecode.fingerprints.CronetURLRequestCallbackOnResponseStartedFingerprint +import app.revanced.patches.youtube.layout.alternativethumbnails.bytecode.fingerprints.CronetURLRequestCallbackOnSucceededFingerprint +import app.revanced.patches.youtube.layout.alternativethumbnails.bytecode.fingerprints.MessageDigestImageUrlFingerprint +import app.revanced.patches.youtube.layout.alternativethumbnails.bytecode.fingerprints.MessageDigestImageUrlParentFingerprint +import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch +import app.revanced.patches.youtube.misc.settings.bytecode.patch.SettingsPatch + +@Patch +@DependsOn([IntegrationsPatch::class, SettingsPatch::class]) +@Name("Alternative thumbnails") +@AlternativeThumbnailsCompatibility +@Description("Adds an option to replace video thumbnails with still image captures of the video.") +class AlternativeThumbnailsPatch : BytecodePatch( + listOf(MessageDigestImageUrlParentFingerprint, CronetURLRequestCallbackOnResponseStartedFingerprint) +) { + override fun execute(context: BytecodeContext): PatchResult { + SettingsPatch.PreferenceScreen.LAYOUT.addPreferences( + PreferenceScreen( + "revanced_alt_thumbnails_preference_screen", + StringResource("revanced_alt_thumbnails_preference_screen_title", "Alternative thumbnails"), + listOf( + SwitchPreference( + "revanced_alt_thumbnail", + StringResource("revanced_alt_thumbnail_title", "Enable alternative thumbnails"), + StringResource("revanced_alt_thumbnail_summary_on", "YouTube video stills shown"), + StringResource("revanced_alt_thumbnail_summary_off", "Original YouTube thumbnails shown") + ), + ListPreference( + "revanced_alt_thumbnail_type", + StringResource("revanced_alt_thumbnail_type_title", "Video time to take the still from"), + ArrayResource( + "revanced_alt_thumbnail_type_entries", + listOf( + StringResource("revanced_alt_thumbnail_type_entry_1", "Beginning of video"), + StringResource("revanced_alt_thumbnail_type_entry_2", "Middle of video"), + StringResource("revanced_alt_thumbnail_type_entry_3", "End of video"), + ) + ), + ArrayResource( + "revanced_alt_thumbnail_type_entry_values", + listOf( + StringResource("revanced_alt_thumbnail_type_entry_value_1", "1"), + StringResource("revanced_alt_thumbnail_type_entry_value_2", "2"), + StringResource("revanced_alt_thumbnail_type_entry_value_3", "3"), + ) + ) + ), + SwitchPreference( + "revanced_alt_thumbnail_fast_quality", + StringResource("revanced_alt_thumbnail_fast_quality_title", "Use fast alternative thumbnails"), + StringResource("revanced_alt_thumbnail_fast_quality_summary_on", "Using medium quality stills. Thumbnails will load faster, but live streams, unreleased, or very old videos may show blank thumbnails"), + StringResource("revanced_alt_thumbnail_fast_quality_summary_off", "Using high quality stills") + ), + NonInteractivePreference( + StringResource("revanced_alt_thumbnail_about_title", "About"), + StringResource("revanced_alt_thumbnail_about_summary", "Alternative thumbnails are still images from the beginning/middle/end of each video. No external API is used, as these images are built into YouTube") + ) + ), + StringResource("revanced_alt_thumbnails_preference_screen_summary", "Video thumbnail settings") + ) + ) + + MessageDigestImageUrlParentFingerprint.result + ?: return MessageDigestImageUrlParentFingerprint.toErrorResult() + MessageDigestImageUrlFingerprint.resolve(context, MessageDigestImageUrlParentFingerprint.result!!.classDef) + MessageDigestImageUrlFingerprint.result?.apply { + loadImageUrlMethod = mutableMethod + } ?: return MessageDigestImageUrlFingerprint.toErrorResult() + addImageUrlHook(INTEGRATIONS_CLASS_DESCRIPTOR, true) + + + CronetURLRequestCallbackOnResponseStartedFingerprint.result + ?: return CronetURLRequestCallbackOnResponseStartedFingerprint.toErrorResult() + CronetURLRequestCallbackOnSucceededFingerprint.resolve( + context, + CronetURLRequestCallbackOnResponseStartedFingerprint.result!!.classDef + ) + CronetURLRequestCallbackOnSucceededFingerprint.result?.apply { + loadImageSuccessCallbackMethod = mutableMethod + } ?: return CronetURLRequestCallbackOnSucceededFingerprint.toErrorResult() + addImageUrlSuccessCallbackHook(INTEGRATIONS_CLASS_DESCRIPTOR) + + + CronetURLRequestCallbackOnFailureFingerprint.resolve( + context, + CronetURLRequestCallbackOnResponseStartedFingerprint.result!!.classDef + ) + CronetURLRequestCallbackOnFailureFingerprint.result?.apply { + loadImageErrorCallbackMethod = mutableMethod + } ?: return CronetURLRequestCallbackOnFailureFingerprint.toErrorResult() + + + return PatchResultSuccess() + } + + internal companion object { + private const val INTEGRATIONS_CLASS_DESCRIPTOR = + "Lapp/revanced/integrations/patches/AlternativeThumbnailsPatch;" + + private lateinit var loadImageUrlMethod: MutableMethod + private var loadImageUrlIndex = 0 + + private lateinit var loadImageSuccessCallbackMethod: MutableMethod + private var loadImageSuccessCallbackIndex = 0 + + private lateinit var loadImageErrorCallbackMethod: MutableMethod + private var loadImageErrorCallbackIndex = 0 + + /** + * @param highPriority If the hook should be called before all other hooks. + */ + fun addImageUrlHook(targetMethodClass: String, highPriority: Boolean) { + loadImageUrlMethod.addInstructions( + if (highPriority) 0 else loadImageUrlIndex, """ + invoke-static { p1 }, $targetMethodClass->overrideImageURL(Ljava/lang/String;)Ljava/lang/String; + move-result-object p1 + """ + ) + loadImageUrlIndex += 2 + } + + /** + * If a connection completed, which includes normal 200 responses but also includes + * status 404 and other error like http responses. + */ + fun addImageUrlSuccessCallbackHook(targetMethodClass: String) { + loadImageSuccessCallbackMethod.addInstruction( + loadImageSuccessCallbackIndex++, + "invoke-static { p2 }, $targetMethodClass->handleCronetSuccess(Lorg/chromium/net/UrlResponseInfo;)V" + ) + } + + /** + * If a connection outright failed to complete any connection. + */ + fun addImageUrlErrorCallbackHook(targetMethodClass: String) { + loadImageErrorCallbackMethod.addInstruction( + loadImageErrorCallbackIndex++, + "invoke-static { p2, p3 }, $targetMethodClass->handleCronetFailure(Lorg/chromium/net/UrlResponseInfo;Ljava/io/IOException;)V" + ) + } + + } +} From 134e66aa79e73da18bb8448b0debb954959b0f90 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 21 Aug 2023 06:31:19 +0000 Subject: [PATCH 40/67] chore(release): 2.188.0-dev.17 [skip ci] # [2.188.0-dev.17](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.16...v2.188.0-dev.17) (2023-08-21) ### Features * **YouTube:** Add `Alternative thumbnails` patch ([#2834](https://github.com/ReVanced/revanced-patches/issues/2834)) ([8a4277c](https://github.com/ReVanced/revanced-patches/commit/8a4277c486d995f57cde3a56274979c4a7b42bf6)) --- CHANGELOG.md | 7 +++++++ gradle.properties | 2 +- patches.json | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 12e675cfe..a15b26c56 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [2.188.0-dev.17](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.16...v2.188.0-dev.17) (2023-08-21) + + +### Features + +* **YouTube:** Add `Alternative thumbnails` patch ([#2834](https://github.com/ReVanced/revanced-patches/issues/2834)) ([8a4277c](https://github.com/ReVanced/revanced-patches/commit/8a4277c486d995f57cde3a56274979c4a7b42bf6)) + # [2.188.0-dev.16](https://github.com/ReVanced/revanced-patches/compare/v2.188.0-dev.15...v2.188.0-dev.16) (2023-08-19) diff --git a/gradle.properties b/gradle.properties index 69f9e1196..e1a241981 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ org.gradle.parallel = true org.gradle.caching = true kotlin.code.style = official -version = 2.188.0-dev.16 +version = 2.188.0-dev.17 diff --git a/patches.json b/patches.json index 7b13cf142..bb6551cbc 100644 --- a/patches.json +++ b/patches.json @@ -1 +1 @@ -[{"name":"Always autorepeat","description":"Always repeats the playing video again.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Auto claim channel points","description":"Automatically claim Channel Points.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Background play","description":"Enables playing music in the background.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Block audio ads","description":"Blocks audio ads in streams and VODs.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Block embedded ads","description":"Blocks embedded stream ads using services like TTV.lol or PurpleAdBlocker.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Block video ads","Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Block video ads","description":"Blocks video ads in streams and VODs.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Bypass certificate checks","description":"Bypasses certificate checks which prevent YouTube Music from working on Android Auto.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Change package name","description":"Changes the package name. Appends \".revanced\" to the package name by default.","version":"0.0.0","excluded":true,"options":[{"key":"packageName","title":"Package name","description":"The name of the package to rename the app to.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[]},{"name":"Client spoof","description":"Spoofs the client to allow playback.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Spoof signature verification"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Codecs unlock","description":"Adds more audio codec options. The new audio codecs usually result in better audio quality.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Comments","description":"Hides components related to comments.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings","LithoFilterPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Compact header","description":"Hides the music category bar at the top of the homepage.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Copy video url","description":"Adds buttons in player to copy video links.","version":"0.0.0","excluded":false,"options":[],"dependencies":["CopyVideoUrlResourcePatch","Player controls bytecode patch","Video information"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Custom branding","description":"Changes the YouTube launcher icon and name to your choice (defaults to ReVanced).","version":"0.0.0","excluded":false,"options":[{"key":"appName","title":"Application Name","description":"The name of the application it will show on your home screen.","required":true,"choices":null},{"key":"iconPath","title":"App Icon Path","description":"A path containing mipmap resource folders with icons.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Debug mode","description":"Enables Twitch\u0027s internal debugging mode.","version":"0.0.0","excluded":true,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":[]}]},{"name":"Disable Shorts on startup","description":"Disables playing YouTube Shorts when launching YouTube.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable Sync for Lemmy bottom sheet","description":"Disables the bottom sheet at the startup that asks you to signup to \"Sync for Lemmy\".","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":["v23.06.30-13:39"]},{"name":"com.laurencedawson.reddit_sync.pro","versions":[]},{"name":"com.laurencedawson.reddit_sync.dev","versions":[]}]},{"name":"Disable ads","description":"Disables ads in HexEditor.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.myprog.hexedit","versions":[]}]},{"name":"Disable ads","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":[]}]},{"name":"Disable ads","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"o.o.joey","versions":[]}]},{"name":"Disable auto captions","description":"Disable forced captions from being automatically enabled.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable fullscreen panels","description":"Disables video description and comments panel in fullscreen view.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable login requirement","description":"Do not force login.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Disable mandatory login","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.adobe.lrmobile","versions":[]}]},{"name":"Disable player popup panels","description":"Disables panels from appearing automatically when going into fullscreen (playlist or live chat).","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable screenshot popup","description":"Disables the popup that shows up when taking a screenshot.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Disable switching emoji to sticker in message input field","description":"Disables switching from emoji to sticker search mode in message input field","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Disable typing indicator","description":"Disables the indicator while typing a message","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Disable zoom haptics","description":"Disables haptics when zooming.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Downloads","description":"Removes download restrictions and changes the default path to download to.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Dynamic color","description":"Replaces the default Twitter Blue with the users Material You palette.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Enable android debugging","description":"Enables Android debugging capabilities.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Enable debugging","description":"Adds debugging options.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"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.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.spotify.lite","versions":[]}]},{"name":"Exclusive audio playback","description":"Enables the option to play music without video.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Export all activities","description":"Makes all app activities exportable.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"External downloads","description":"Adds support to download and save YouTube videos using an external app.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ExternalDownloadsResourcePatch","Player controls bytecode patch","Video information"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Feed filter","description":"Filters tiktok videos: removing ads, removing livestreams.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Fix google login","description":"Allows logging in with a Google account.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"HDR auto brightness","description":"Makes the brightness of HDR videos follow the system default.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide Shorts components","description":"Hides components from YouTube Shorts.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","LithoFilterPatch","HideShortsComponentsResourcePatch","ResourceMappingPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide ads","description":"Removes general ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Hide get premium","HideAdsResourcePatch","VerticalScrollPatch","FixBackToExitGesturePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide ads","description":"Removes ads from the Reddit.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Hide subreddit banner","Hide comment ads"],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Hide ads","description":"Hides ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Json hook"],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Hide ads","description":"Removes general ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["VerticalScrollPatch"],"compatiblePackages":[{"name":"com.vanced.android.youtube","versions":[]}]},{"name":"Hide ads","description":"Removes ads from TikTok.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Hide ads","description":"Removes ads from Inshorts.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.nis.app","versions":[]}]},{"name":"Hide ads","description":"Hides ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"jp.pxv.android","versions":[]}]},{"name":"Hide album cards","description":"Hides the album cards below the artist description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","AlbumCardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide autoplay button","description":"Hides the autoplay button in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","ResourceMappingPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide breaking news shelf","description":"Hides the breaking news shelf on the homepage tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","BreakingNewsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide captions button","description":"Hides the captions button on video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide cast button","description":"Hides the cast button in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Hide crowdfunding box","description":"Hides the crowdfunding box between the player and video description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","CrowdfundingBoxResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide email address","description":"Hides the email address in the account switcher.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideEmailAddressResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide endscreen cards","description":"Hides the suggested video cards at the end of a video in fullscreen.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideEndscreenCardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide filter bar","description":"Hides the filter bar in video feeds.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideFilterBarResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide floating microphone button","description":"Hides the floating microphone button which appears in search.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideFloatingMicrophoneButtonResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide get premium","description":"Removes all \"Get Premium\" evidences from the avatar menu.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Hide inbox ads","description":"Hides ads in inbox.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Hide info cards","description":"Hides info cards in videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideInfocardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide layout components","description":"Hides general layout components.","version":"0.0.0","excluded":false,"options":[],"dependencies":["LithoFilterPatch","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide load more button","description":"Hides the button under videos that loads similar videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideLoadMoreButtonResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide player buttons","description":"Adds the option to hide video player previous and next buttons.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide player overlay","description":"Hides the dark background overlay from the player when player controls are visible.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HidePlayerOverlayResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Hide premium navbar","description":"Removes the premium tab from the navbar.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ResourceMappingPatch"],"compatiblePackages":[{"name":"com.spotify.music","versions":[]}]},{"name":"Hide recommended users","description":"Hides recommended users.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Json hook"],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Hide seekbar","description":"Hides the seekbar.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","SeekbarColorBytecodePatch","SeekbarPreferencesPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide timeline ads","description":"Removes ads from the timeline.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.instagram.android","versions":["275.0.0.27.98"]}]},{"name":"Hide timestamp","description":"Hides timestamp in video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide video action buttons","description":"Adds the options to hide action buttons under a video.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ResourceMappingPatch","LithoFilterPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide watermark","description":"Hides creator\u0027s watermarks on videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Minimized playback","description":"Enables minimized and background playback.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Player type hook","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Minimized playback music","description":"Enables minimized playback on Kids music.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Music video ads","description":"Removes ads in the music player.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Navigation buttons","description":"Adds options to hide or change navigation buttons.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","ResolvePivotBarFingerprintsPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Old video quality menu","description":"Shows the old video quality with the advanced video quality options instead of the new one.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","OldVideoQualityMenuResourcePatch","LithoFilterPatch","BottomSheetHookPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.20.39","18.23.35"]}]},{"name":"Open links externally","description":"Open links outside of the app directly in your browser.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Override certificate pinning","description":"Overrides certificate pinning, allowing to inspect traffic via a proxy.","version":"0.0.0","excluded":true,"options":[],"dependencies":["Enable android debugging"],"compatiblePackages":[]},{"name":"Permanent repeat","description":"Permanently remember your repeating preference even if the playlist ends or another track is played.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Permanent shuffle","description":"Permanently remember your shuffle preference even if the playlist ends or another track is played.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Playback speed","description":"Adds custom playback speeds and ability to remember the playback speed you chose in the video playback speed flyout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Custom playback speed","Remember playback speed"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.20.39","18.23.35"]}]},{"name":"Playback speed","description":"Enables the playback speed option for all videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Player flyout menu","description":"Hides player flyout menu items.","version":"0.0.0","excluded":false,"options":[],"dependencies":["LithoFilterPatch","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Predictive back gesture","description":"Enables the predictive back gesture introduced on Android 13.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Premium heading","description":"Shows premium branding on the home screen.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Premium icon reddit","description":"Unlocks premium Reddit app icons.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Pro unlock","description":"Unlocks pro-only functions.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.backdrops.wallpapers","versions":["4.52"]}]},{"name":"Promo code unlock","description":"Disables the validation of promo code. Any code will work to unlock all features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Spoof cert patch"],"compatiblePackages":[{"name":"de.dwd.warnapp","versions":[]}]},{"name":"Remember video quality","description":"Adds the ability to remember the video quality you chose in the video quality flyout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video information","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.19.35","18.20.39","18.23.35"]}]},{"name":"Remove ads","description":"Removes all ads from the app.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"net.binarymode.android.irplus","versions":[]}]},{"name":"Remove badge tab","description":"Removes the badge tab from the activity tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.sony.songpal.mdr","versions":[]}]},{"name":"Remove bootloader detection","description":"Removes the check for an unlocked bootloader.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.bmf.bmf2go","versions":[]}]},{"name":"Remove broadcasts restriction","description":"Enables starting/stopping NetGuard via broadcasts.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"eu.faircode.netguard","versions":[]}]},{"name":"Remove debugging detection","description":"Removes the USB and wireless debugging checks.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.scb.phone","versions":[]}]},{"name":"Remove device restrictions","description":"Removes restrictions from using the app on any device.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.recorder","versions":[]}]},{"name":"Remove notification badge","description":"Removes the red notification badge from the activity tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.sony.songpal.mdr","versions":[]}]},{"name":"Remove player controls background","description":"Removes the background from the video player controls.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Remove root detection","description":"Removes the check for root permissions and unlocked bootloader.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.oe.app","versions":[]}]},{"name":"Remove root detection","description":"Removes the check for root permissions.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.bmf.bmf2go","versions":[]}]},{"name":"Remove screen capture restriction","description":"Removes the restriction of capturing audio from apps that normally wouldn\u0027t allow it.","version":"0.0.0","excluded":true,"options":[],"dependencies":["RemoveCaptureRestrictionResourcePatch"],"compatiblePackages":[]},{"name":"Remove screenshot restriction","description":"Removes the restriction of taking screenshots in apps that normally wouldn\u0027t allow it.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Remove upgrade button","description":"Removes the upgrade tab from the pivot bar.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Return YouTube Dislike","description":"Shows the dislike count of videos using the Return YouTube Dislike API.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video id hook","ReturnYouTubeDislikeResourcePatch","Player type hook"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Sanitize sharing links","description":"Removes (tracking) query parameters from the URLs when sharing links.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Seekbar tapping","description":"Enables tap-to-seek on the seekbar of the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","EnableSeekbarTappingResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Settings","description":"Adds settings menu to Twitch.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","SettingsResourcePatch"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":[]}]},{"name":"Settings","description":"Adds ReVanced settings to TikTok.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Show deleted messages","description":"Shows deleted chat messages behind a clickable spoiler.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Show seekbar","description":"Shows progress bar for all video.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Sim spoof","description":"Spoofs the information which is retrieved from the sim-card.","version":"0.0.0","excluded":true,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"SponsorBlock","description":"Integrates SponsorBlock which allows skipping video segments such as sponsored content.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video id hook","Video information","Player type hook","Player controls bytecode patch","SponsorBlockResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Spoof app version","description":"Tricks YouTube into thinking you are running an older version of the app. One of the side effects also includes restoring the old UI.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://baconreader.com/auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.onelouder.baconreader","versions":[]},{"name":"com.onelouder.baconreader.premium","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"dbrady://relay\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"free.reddit.news","versions":[]},{"name":"reddit.news","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"redditisfun://auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.andrewshu.android.reddit","versions":[]},{"name":"com.andrewshu.android.redditdonation","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"infinity://localhost\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"ml.docilealligator.infinityforreddit","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://rubenmayayo.com\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.rubenmayayo.reddit","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://redditsync/auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":[]},{"name":"com.laurencedawson.reddit_sync.pro","versions":[]},{"name":"com.laurencedawson.reddit_sync.dev","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"https://127.0.0.1:65023/authorize_callback\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"o.o.joey","versions":[]},{"name":"o.o.joey.pro","versions":[]},{"name":"o.o.joey.dev","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://www.ccrama.me\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"me.ccrama.redditslide","versions":[]}]},{"name":"Spoof signature","description":"Spoofs the signature of the app.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.oe.app","versions":[]}]},{"name":"Spoof wifi connection","description":"Spoofs an existing Wi-Fi connection.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Spotify theme","description":"Applies a custom theme.","version":"0.0.0","excluded":false,"options":[{"key":"backgroundColor","title":"Background color","description":"The background color. Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"accentColor","title":"Accent color","description":"The accent color (\u0027spotify green\u0027 by default). Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"accentPressedColor","title":"Pressed accent for the dark theme","description":"The color when accented buttons are pressed, by default slightly darker than accent. Can be a hex color or a resource reference.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.spotify.music","versions":[]}]},{"name":"Swipe controls","description":"Adds volume and brightness swipe controls.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Player type hook","SwipeControlsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Tablet mini player","description":"Enables the tablet mini player layout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Theme","description":"Applies a custom theme.","version":"0.0.0","excluded":false,"options":[{"key":"darkThemeBackgroundColor","title":"Background color for the dark theme","description":"The background color of the dark theme. Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"lightThemeBackgroundColor","title":"Background color for the light theme","description":"The background color of the light theme. Can be a hex color or a resource reference.","required":false,"choices":null}],"dependencies":["Litho color hook","SeekbarColorBytecodePatch","ThemeResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Unlock paid widgets","description":"Unlocks paid widgets of the app","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.dci.dev.androidtwelvewidgets","versions":[]}]},{"name":"Unlock plus","description":"Unlocks plus features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["SignatureDetectionPatch"],"compatiblePackages":[{"name":"com.microblink.photomath","versions":["8.20.0"]}]},{"name":"Unlock premium","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.adobe.lrmobile","versions":[]}]},{"name":"Unlock premium","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"io.yuka.android","versions":[]}]},{"name":"Unlock pro","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.candylink.openvpn","versions":[]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.wakdev.apps.nfctools.se","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ithebk.expensemanager","versions":[]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.awedea.nyx","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.vsco.cam","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["SignatureVerificationPatch","LicenseValidationPatch"],"compatiblePackages":[{"name":"com.zombodroid.MemeGenerator","versions":["4.6364","4.6370","4.6375","4.6377"]}]},{"name":"Unlock pro","description":"Unlocks all professional features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"org.totschnig.myexpenses","versions":["3.4.9"]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"tv.trakt.trakt","versions":["1.1.1"]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"ginlemon.iconpackstudio","versions":[]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"co.windyapp.android","versions":[]}]},{"name":"Unlock themes","description":"Unlocks all themes that are inaccessible until a certain level is reached.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ticktick.task","versions":[]}]},{"name":"Vanced MicroG support","description":"Allows YouTube ReVanced to run without root and under a different package name with Vanced MicroG.","version":"0.0.0","excluded":false,"options":[],"dependencies":["MicroGResourcePatch","Hide cast button","Client spoof"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Vanced MicroG support","description":"Allows YouTube Music ReVanced to run without root and under a different package name.","version":"0.0.0","excluded":false,"options":[],"dependencies":["MicroGResourcePatch"],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Video ads","description":"Removes ads in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Wide searchbar","description":"Replaces the search icon with a wide search bar. This will hide the YouTube logo when active.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]}] \ No newline at end of file +[{"name":"Alternative thumbnails","description":"Adds an option to replace video thumbnails with still image captures of the video.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.20.39","18.23.35"]}]},{"name":"Always autorepeat","description":"Always repeats the playing video again.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Auto claim channel points","description":"Automatically claim Channel Points.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Background play","description":"Enables playing music in the background.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Block audio ads","description":"Blocks audio ads in streams and VODs.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Block embedded ads","description":"Blocks embedded stream ads using services like TTV.lol or PurpleAdBlocker.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Block video ads","Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Block video ads","description":"Blocks video ads in streams and VODs.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Bypass certificate checks","description":"Bypasses certificate checks which prevent YouTube Music from working on Android Auto.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Change package name","description":"Changes the package name. Appends \".revanced\" to the package name by default.","version":"0.0.0","excluded":true,"options":[{"key":"packageName","title":"Package name","description":"The name of the package to rename the app to.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[]},{"name":"Client spoof","description":"Spoofs the client to allow playback.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Spoof signature verification"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Codecs unlock","description":"Adds more audio codec options. The new audio codecs usually result in better audio quality.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Comments","description":"Hides components related to comments.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings","LithoFilterPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Compact header","description":"Hides the music category bar at the top of the homepage.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Copy video url","description":"Adds buttons in player to copy video links.","version":"0.0.0","excluded":false,"options":[],"dependencies":["CopyVideoUrlResourcePatch","Player controls bytecode patch","Video information"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Custom branding","description":"Changes the YouTube launcher icon and name to your choice (defaults to ReVanced).","version":"0.0.0","excluded":false,"options":[{"key":"appName","title":"Application Name","description":"The name of the application it will show on your home screen.","required":true,"choices":null},{"key":"iconPath","title":"App Icon Path","description":"A path containing mipmap resource folders with icons.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Debug mode","description":"Enables Twitch\u0027s internal debugging mode.","version":"0.0.0","excluded":true,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":[]}]},{"name":"Disable Shorts on startup","description":"Disables playing YouTube Shorts when launching YouTube.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable Sync for Lemmy bottom sheet","description":"Disables the bottom sheet at the startup that asks you to signup to \"Sync for Lemmy\".","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":["v23.06.30-13:39"]},{"name":"com.laurencedawson.reddit_sync.pro","versions":[]},{"name":"com.laurencedawson.reddit_sync.dev","versions":[]}]},{"name":"Disable ads","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":[]}]},{"name":"Disable ads","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"o.o.joey","versions":[]}]},{"name":"Disable ads","description":"Disables ads in HexEditor.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.myprog.hexedit","versions":[]}]},{"name":"Disable auto captions","description":"Disable forced captions from being automatically enabled.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable fullscreen panels","description":"Disables video description and comments panel in fullscreen view.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable login requirement","description":"Do not force login.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Disable mandatory login","description":"This patch has no description.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.adobe.lrmobile","versions":[]}]},{"name":"Disable player popup panels","description":"Disables panels from appearing automatically when going into fullscreen (playlist or live chat).","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Disable screenshot popup","description":"Disables the popup that shows up when taking a screenshot.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Disable switching emoji to sticker in message input field","description":"Disables switching from emoji to sticker search mode in message input field","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Disable typing indicator","description":"Disables the indicator while typing a message","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Disable zoom haptics","description":"Disables haptics when zooming.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Downloads","description":"Removes download restrictions and changes the default path to download to.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Dynamic color","description":"Replaces the default Twitter Blue with the users Material You palette.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Enable android debugging","description":"Enables Android debugging capabilities.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Enable debugging","description":"Adds debugging options.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"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.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.spotify.lite","versions":[]}]},{"name":"Exclusive audio playback","description":"Enables the option to play music without video.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Export all activities","description":"Makes all app activities exportable.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"External downloads","description":"Adds support to download and save YouTube videos using an external app.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ExternalDownloadsResourcePatch","Player controls bytecode patch","Video information"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Feed filter","description":"Filters tiktok videos: removing ads, removing livestreams.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Fix google login","description":"Allows logging in with a Google account.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"HDR auto brightness","description":"Makes the brightness of HDR videos follow the system default.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide Shorts components","description":"Hides components from YouTube Shorts.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","LithoFilterPatch","HideShortsComponentsResourcePatch","ResourceMappingPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide ads","description":"Removes ads from the Reddit.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Hide subreddit banner","Hide comment ads"],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Hide ads","description":"Removes general ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["VerticalScrollPatch"],"compatiblePackages":[{"name":"com.vanced.android.youtube","versions":[]}]},{"name":"Hide ads","description":"Hides ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Json hook"],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Hide ads","description":"Removes ads from Inshorts.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.nis.app","versions":[]}]},{"name":"Hide ads","description":"Removes general ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Hide get premium","HideAdsResourcePatch","VerticalScrollPatch","FixBackToExitGesturePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide ads","description":"Removes ads from TikTok.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Hide ads","description":"Hides ads.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"jp.pxv.android","versions":[]}]},{"name":"Hide album cards","description":"Hides the album cards below the artist description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","AlbumCardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide autoplay button","description":"Hides the autoplay button in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","ResourceMappingPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide breaking news shelf","description":"Hides the breaking news shelf on the homepage tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","BreakingNewsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide captions button","description":"Hides the captions button on video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide cast button","description":"Hides the cast button in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Hide crowdfunding box","description":"Hides the crowdfunding box between the player and video description.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","CrowdfundingBoxResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide email address","description":"Hides the email address in the account switcher.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideEmailAddressResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide endscreen cards","description":"Hides the suggested video cards at the end of a video in fullscreen.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideEndscreenCardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide filter bar","description":"Hides the filter bar in video feeds.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideFilterBarResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide floating microphone button","description":"Hides the floating microphone button which appears in search.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideFloatingMicrophoneButtonResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide get premium","description":"Removes all \"Get Premium\" evidences from the avatar menu.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Hide inbox ads","description":"Hides ads in inbox.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.facebook.orca","versions":[]}]},{"name":"Hide info cards","description":"Hides info cards in videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","HideInfocardsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide layout components","description":"Hides general layout components.","version":"0.0.0","excluded":false,"options":[],"dependencies":["LithoFilterPatch","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide load more button","description":"Hides the button under videos that loads similar videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HideLoadMoreButtonResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide player buttons","description":"Adds the option to hide video player previous and next buttons.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide player overlay","description":"Hides the dark background overlay from the player when player controls are visible.","version":"0.0.0","excluded":false,"options":[],"dependencies":["HidePlayerOverlayResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Hide premium navbar","description":"Removes the premium tab from the navbar.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ResourceMappingPatch"],"compatiblePackages":[{"name":"com.spotify.music","versions":[]}]},{"name":"Hide recommended users","description":"Hides recommended users.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Json hook"],"compatiblePackages":[{"name":"com.twitter.android","versions":[]}]},{"name":"Hide seekbar","description":"Hides the seekbar.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","SeekbarColorBytecodePatch","SeekbarPreferencesPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide timeline ads","description":"Removes ads from the timeline.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.instagram.android","versions":["275.0.0.27.98"]}]},{"name":"Hide timestamp","description":"Hides timestamp in video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide video action buttons","description":"Adds the options to hide action buttons under a video.","version":"0.0.0","excluded":false,"options":[],"dependencies":["ResourceMappingPatch","LithoFilterPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Hide watermark","description":"Hides creator\u0027s watermarks on videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Minimized playback","description":"Enables minimized and background playback.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Player type hook","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Minimized playback music","description":"Enables minimized playback on Kids music.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Music video ads","description":"Removes ads in the music player.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Navigation buttons","description":"Adds options to hide or change navigation buttons.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings","ResolvePivotBarFingerprintsPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Old video quality menu","description":"Shows the old video quality with the advanced video quality options instead of the new one.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","OldVideoQualityMenuResourcePatch","LithoFilterPatch","BottomSheetHookPatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.20.39","18.23.35"]}]},{"name":"Open links externally","description":"Open links outside of the app directly in your browser.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Override certificate pinning","description":"Overrides certificate pinning, allowing to inspect traffic via a proxy.","version":"0.0.0","excluded":true,"options":[],"dependencies":["Enable android debugging"],"compatiblePackages":[]},{"name":"Permanent repeat","description":"Permanently remember your repeating preference even if the playlist ends or another track is played.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Permanent shuffle","description":"Permanently remember your shuffle preference even if the playlist ends or another track is played.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Playback speed","description":"Adds custom playback speeds and ability to remember the playback speed you chose in the video playback speed flyout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Custom playback speed","Remember playback speed"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.20.39","18.23.35"]}]},{"name":"Playback speed","description":"Enables the playback speed option for all videos.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Player flyout menu","description":"Hides player flyout menu items.","version":"0.0.0","excluded":false,"options":[],"dependencies":["LithoFilterPatch","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Predictive back gesture","description":"Enables the predictive back gesture introduced on Android 13.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Premium heading","description":"Shows premium branding on the home screen.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Premium icon reddit","description":"Unlocks premium Reddit app icons.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Pro unlock","description":"Unlocks pro-only functions.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.backdrops.wallpapers","versions":["4.52"]}]},{"name":"Promo code unlock","description":"Disables the validation of promo code. Any code will work to unlock all features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Spoof cert patch"],"compatiblePackages":[{"name":"de.dwd.warnapp","versions":[]}]},{"name":"Remember video quality","description":"Adds the ability to remember the video quality you chose in the video quality flyout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video information","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.19.35","18.20.39","18.23.35"]}]},{"name":"Remove ads","description":"Removes all ads from the app.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"net.binarymode.android.irplus","versions":[]}]},{"name":"Remove badge tab","description":"Removes the badge tab from the activity tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.sony.songpal.mdr","versions":[]}]},{"name":"Remove bootloader detection","description":"Removes the check for an unlocked bootloader.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.bmf.bmf2go","versions":[]}]},{"name":"Remove broadcasts restriction","description":"Enables starting/stopping NetGuard via broadcasts.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"eu.faircode.netguard","versions":[]}]},{"name":"Remove debugging detection","description":"Removes the USB and wireless debugging checks.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.scb.phone","versions":[]}]},{"name":"Remove device restrictions","description":"Removes restrictions from using the app on any device.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.recorder","versions":[]}]},{"name":"Remove notification badge","description":"Removes the red notification badge from the activity tab.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.sony.songpal.mdr","versions":[]}]},{"name":"Remove player controls background","description":"Removes the background from the video player controls.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Remove root detection","description":"Removes the check for root permissions.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.bmf.bmf2go","versions":[]}]},{"name":"Remove root detection","description":"Removes the check for root permissions and unlocked bootloader.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.oe.app","versions":[]}]},{"name":"Remove screen capture restriction","description":"Removes the restriction of capturing audio from apps that normally wouldn\u0027t allow it.","version":"0.0.0","excluded":true,"options":[],"dependencies":["RemoveCaptureRestrictionResourcePatch"],"compatiblePackages":[]},{"name":"Remove screenshot restriction","description":"Removes the restriction of taking screenshots in apps that normally wouldn\u0027t allow it.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Remove upgrade button","description":"Removes the upgrade tab from the pivot bar.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Return YouTube Dislike","description":"Shows the dislike count of videos using the Return YouTube Dislike API.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video id hook","ReturnYouTubeDislikeResourcePatch","Player type hook"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Sanitize sharing links","description":"Removes (tracking) query parameters from the URLs when sharing links.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.reddit.frontpage","versions":[]}]},{"name":"Seekbar tapping","description":"Enables tap-to-seek on the seekbar of the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","EnableSeekbarTappingResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Settings","description":"Adds settings menu to Twitch.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","SettingsResourcePatch"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":[]}]},{"name":"Settings","description":"Adds ReVanced settings to TikTok.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Show deleted messages","description":"Shows deleted chat messages behind a clickable spoiler.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"tv.twitch.android.app","versions":["15.4.1"]}]},{"name":"Show seekbar","description":"Shows progress bar for all video.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"Sim spoof","description":"Spoofs the information which is retrieved from the sim-card.","version":"0.0.0","excluded":true,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.ss.android.ugc.trill","versions":[]},{"name":"com.zhiliaoapp.musically","versions":[]}]},{"name":"SponsorBlock","description":"Integrates SponsorBlock which allows skipping video segments such as sponsored content.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Video id hook","Video information","Player type hook","Player controls bytecode patch","SponsorBlockResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Spoof app version","description":"Tricks YouTube into thinking you are running an older version of the app. One of the side effects also includes restoring the old UI.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://baconreader.com/auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.onelouder.baconreader","versions":[]},{"name":"com.onelouder.baconreader.premium","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"dbrady://relay\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"free.reddit.news","versions":[]},{"name":"reddit.news","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://rubenmayayo.com\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.rubenmayayo.reddit","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://www.ccrama.me\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"me.ccrama.redditslide","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"redditisfun://auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.andrewshu.android.reddit","versions":[]},{"name":"com.andrewshu.android.redditdonation","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"http://redditsync/auth\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"com.laurencedawson.reddit_sync","versions":[]},{"name":"com.laurencedawson.reddit_sync.pro","versions":[]},{"name":"com.laurencedawson.reddit_sync.dev","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"https://127.0.0.1:65023/authorize_callback\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":["DisablePiracyDetectionPatch"],"compatiblePackages":[{"name":"o.o.joey","versions":[]},{"name":"o.o.joey.pro","versions":[]},{"name":"o.o.joey.dev","versions":[]}]},{"name":"Spoof client","description":"Spoofs the client in order to allow logging in. The OAuth application type has to be \"Installed app\" and the redirect URI has to be set to \"infinity://localhost\".","version":"0.0.0","excluded":false,"options":[{"key":"client-id","title":"OAuth client ID","description":"The Reddit OAuth client ID.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"ml.docilealligator.infinityforreddit","versions":[]}]},{"name":"Spoof signature","description":"Spoofs the signature of the app.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"at.gv.oe.app","versions":[]}]},{"name":"Spoof wifi connection","description":"Spoofs an existing Wi-Fi connection.","version":"0.0.0","excluded":true,"options":[],"dependencies":[],"compatiblePackages":[]},{"name":"Spotify theme","description":"Applies a custom theme.","version":"0.0.0","excluded":false,"options":[{"key":"backgroundColor","title":"Background color","description":"The background color. Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"accentColor","title":"Accent color","description":"The accent color (\u0027spotify green\u0027 by default). Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"accentPressedColor","title":"Pressed accent for the dark theme","description":"The color when accented buttons are pressed, by default slightly darker than accent. Can be a hex color or a resource reference.","required":false,"choices":null}],"dependencies":[],"compatiblePackages":[{"name":"com.spotify.music","versions":[]}]},{"name":"Swipe controls","description":"Adds volume and brightness swipe controls.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Player type hook","SwipeControlsResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Tablet mini player","description":"Enables the tablet mini player layout.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Theme","description":"Applies a custom theme.","version":"0.0.0","excluded":false,"options":[{"key":"darkThemeBackgroundColor","title":"Background color for the dark theme","description":"The background color of the dark theme. Can be a hex color or a resource reference.","required":false,"choices":null},{"key":"lightThemeBackgroundColor","title":"Background color for the light theme","description":"The background color of the light theme. Can be a hex color or a resource reference.","required":false,"choices":null}],"dependencies":["Litho color hook","SeekbarColorBytecodePatch","ThemeResourcePatch"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":[]}]},{"name":"Unlock paid widgets","description":"Unlocks paid widgets of the app","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.dci.dev.androidtwelvewidgets","versions":[]}]},{"name":"Unlock plus","description":"Unlocks plus features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["SignatureDetectionPatch"],"compatiblePackages":[{"name":"com.microblink.photomath","versions":["8.20.0"]}]},{"name":"Unlock premium","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"io.yuka.android","versions":[]}]},{"name":"Unlock premium","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.adobe.lrmobile","versions":[]}]},{"name":"Unlock pro","description":"Unlocks premium features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.candylink.openvpn","versions":[]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"ginlemon.iconpackstudio","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":["SignatureVerificationPatch","LicenseValidationPatch"],"compatiblePackages":[{"name":"com.zombodroid.MemeGenerator","versions":["4.6364","4.6370","4.6375","4.6377"]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.wakdev.apps.nfctools.se","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ithebk.expensemanager","versions":[]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"co.windyapp.android","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"tv.trakt.trakt","versions":["1.1.1"]}]},{"name":"Unlock pro","description":"Unlocks all professional features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"org.totschnig.myexpenses","versions":["3.4.9"]}]},{"name":"Unlock pro","description":"Unlocks all pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.awedea.nyx","versions":[]}]},{"name":"Unlock pro","description":"Unlocks pro features.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.vsco.cam","versions":[]}]},{"name":"Unlock themes","description":"Unlocks all themes that are inaccessible until a certain level is reached.","version":"0.0.0","excluded":false,"options":[],"dependencies":[],"compatiblePackages":[{"name":"com.ticktick.task","versions":[]}]},{"name":"Vanced MicroG support","description":"Allows YouTube ReVanced to run without root and under a different package name with Vanced MicroG.","version":"0.0.0","excluded":false,"options":[],"dependencies":["MicroGResourcePatch","Hide cast button","Client spoof"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Vanced MicroG support","description":"Allows YouTube Music ReVanced to run without root and under a different package name.","version":"0.0.0","excluded":false,"options":[],"dependencies":["MicroGResourcePatch"],"compatiblePackages":[{"name":"com.google.android.apps.youtube.music","versions":[]}]},{"name":"Video ads","description":"Removes ads in the video player.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]},{"name":"Wide searchbar","description":"Replaces the search icon with a wide search bar. This will hide the YouTube logo when active.","version":"0.0.0","excluded":false,"options":[],"dependencies":["Integrations","Settings"],"compatiblePackages":[{"name":"com.google.android.youtube","versions":["18.16.37","18.19.35","18.20.39","18.23.35"]}]}] \ No newline at end of file From c1b9eefa280b980d08a571e1ce205dc71ccde3b6 Mon Sep 17 00:00:00 2001 From: oSumAtrIX Date: Wed, 2 Aug 2023 01:35:40 +0200 Subject: [PATCH 41/67] feat(YouTube): Support version `18.29.38` --- .../LayoutConstructorFingerprint.kt | 12 ++++ ...essibilityPlayerProgressTimeFingerprint.kt | 12 ---- .../OnTouchEventHandlerFingerprint.kt | 32 ++++++++++ .../patch/EnableSeekbarTappingPatch.kt | 46 +++++--------- .../EnableSeekbarTappingResourcePatch.kt | 13 +--- .../SubtitleButtonControllerFingerprint.kt | 5 +- .../LayoutConstructorFingerprint.kt | 10 --- .../autoplay/patch/HideAutoplayButtonPatch.kt | 2 +- .../captions/patch/HideCaptionsButtonPatch.kt | 6 +- .../HideLoadMoreButtonFingerprint.kt | 7 +-- .../CreatePlayerOverviewFingerprint.kt | 3 +- .../fingerprints/TimeCounterFingerprint.kt | 30 ++++----- .../FullscreenPanelsCompatibility.kt | 8 --- .../FullscreenViewAdderFingerprint.kt | 11 ---- .../FullscreenViewAdderParentFingerprint.kt | 20 ------ .../patch/FullscreenPanelsRemoverPatch.kt | 63 ------------------- .../fingerprints/ShortsTextViewFingerprint.kt | 4 +- ...TextComponentAtomicReferenceFingerprint.kt | 2 +- .../ControlsOverlayFingerprint.kt | 7 +-- .../patch/SponsorBlockBytecodePatch.kt | 31 +++++---- .../MiniPlayerOverrideFingerprint.kt | 19 ++---- .../MiniPlayerOverrideParentFingerprint.kt | 7 --- .../patch/TabletMiniPlayerPatch.kt | 48 +++++++------- ...izedPlaybackPolicyControllerFingerprint.kt | 23 ++++--- .../patch/PlayerControlsBytecodePatch.kt | 13 +++- .../PlayerControlsVisibilityFingerprint.kt | 5 +- .../fingerprint/PlayerTypeFingerprint.kt | 20 +----- .../fingerprint/VideoStateFingerprint.kt | 5 +- .../playertype/patch/PlayerTypeHookPatch.kt | 16 ++--- .../videoid/fingerprint/VideoIdFingerprint.kt | 6 +- .../VideoIdFingerprintBackgroundPlay.kt | 21 +++++-- .../video/videoid/patch/VideoIdPatch.kt | 41 +++++++----- 32 files changed, 214 insertions(+), 334 deletions(-) create mode 100644 src/main/kotlin/app/revanced/patches/shared/fingerprints/LayoutConstructorFingerprint.kt delete mode 100644 src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/fingerprints/AccessibilityPlayerProgressTimeFingerprint.kt create mode 100644 src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/fingerprints/OnTouchEventHandlerFingerprint.kt delete mode 100644 src/main/kotlin/app/revanced/patches/youtube/layout/buttons/autoplay/fingerprints/LayoutConstructorFingerprint.kt delete mode 100644 src/main/kotlin/app/revanced/patches/youtube/layout/panels/fullscreen/remove/annotations/FullscreenPanelsCompatibility.kt delete mode 100644 src/main/kotlin/app/revanced/patches/youtube/layout/panels/fullscreen/remove/patch/FullscreenPanelsRemoverPatch.kt delete mode 100644 src/main/kotlin/app/revanced/patches/youtube/layout/tabletminiplayer/fingerprints/MiniPlayerOverrideParentFingerprint.kt diff --git a/src/main/kotlin/app/revanced/patches/shared/fingerprints/LayoutConstructorFingerprint.kt b/src/main/kotlin/app/revanced/patches/shared/fingerprints/LayoutConstructorFingerprint.kt new file mode 100644 index 000000000..ad843e9f7 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/shared/fingerprints/LayoutConstructorFingerprint.kt @@ -0,0 +1,12 @@ +package app.revanced.patches.shared.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint +import com.android.tools.smali.dexlib2.AccessFlags + +object LayoutConstructorFingerprint : MethodFingerprint( + returnType = "V", + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, + parameters = emptyList(), + strings = listOf("1.0x") +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/fingerprints/AccessibilityPlayerProgressTimeFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/fingerprints/AccessibilityPlayerProgressTimeFingerprint.kt deleted file mode 100644 index e56b68e50..000000000 --- a/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/fingerprints/AccessibilityPlayerProgressTimeFingerprint.kt +++ /dev/null @@ -1,12 +0,0 @@ -package app.revanced.patches.youtube.interaction.seekbar.fingerprints - -import app.revanced.patcher.extensions.or -import app.revanced.patches.youtube.interaction.seekbar.patch.EnableSeekbarTappingResourcePatch -import app.revanced.util.patch.LiteralValueFingerprint -import com.android.tools.smali.dexlib2.AccessFlags - -object AccessibilityPlayerProgressTimeFingerprint : LiteralValueFingerprint( - returnType = "L", - accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, - literal = EnableSeekbarTappingResourcePatch.accessibilityPlayerProgressTime -) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/fingerprints/OnTouchEventHandlerFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/fingerprints/OnTouchEventHandlerFingerprint.kt new file mode 100644 index 000000000..98a0d2147 --- /dev/null +++ b/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/fingerprints/OnTouchEventHandlerFingerprint.kt @@ -0,0 +1,32 @@ +package app.revanced.patches.youtube.interaction.seekbar.fingerprints + +import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.method.annotation.FuzzyPatternScanMethod +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint +import com.android.tools.smali.dexlib2.AccessFlags +import com.android.tools.smali.dexlib2.Opcode + +@FuzzyPatternScanMethod(3) +object OnTouchEventHandlerFingerprint : MethodFingerprint( + returnType = "Z", + accessFlags = AccessFlags.PUBLIC or AccessFlags.PUBLIC, + parameters = listOf("L"), + opcodes = listOf( + Opcode.INVOKE_VIRTUAL, // oMethodReference + Opcode.RETURN, + Opcode.IGET_OBJECT, + Opcode.IGET_BOOLEAN, + Opcode.IF_EQZ, + Opcode.INVOKE_VIRTUAL, + Opcode.RETURN, + Opcode.INT_TO_FLOAT, + Opcode.INT_TO_FLOAT, + Opcode.INVOKE_VIRTUAL, + Opcode.MOVE_RESULT, + Opcode.IF_NEZ, + Opcode.RETURN, + Opcode.INVOKE_VIRTUAL, + Opcode.INVOKE_VIRTUAL, // pMethodReference + ), + customFingerprint = { methodDef, _ -> methodDef.name == "onTouchEvent" } +) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/patch/EnableSeekbarTappingPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/patch/EnableSeekbarTappingPatch.kt index 424c7f32f..32a5ed3bb 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/patch/EnableSeekbarTappingPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/patch/EnableSeekbarTappingPatch.kt @@ -13,13 +13,15 @@ import app.revanced.patcher.patch.annotations.DependsOn import app.revanced.patcher.patch.annotations.Patch import app.revanced.patcher.util.smali.ExternalLabel import app.revanced.patches.youtube.interaction.seekbar.annotation.SeekbarTappingCompatibility -import app.revanced.patches.youtube.interaction.seekbar.fingerprints.AccessibilityPlayerProgressTimeFingerprint +import app.revanced.patches.youtube.interaction.seekbar.fingerprints.OnTouchEventHandlerFingerprint import app.revanced.patches.youtube.interaction.seekbar.fingerprints.SeekbarTappingFingerprint import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch import com.android.tools.smali.dexlib2.Opcode import com.android.tools.smali.dexlib2.iface.Method import com.android.tools.smali.dexlib2.iface.instruction.NarrowLiteralInstruction import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction35c +import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction +import com.android.tools.smali.dexlib2.iface.reference.MethodReference @Patch @DependsOn([IntegrationsPatch::class, EnableSeekbarTappingResourcePatch::class]) @@ -27,37 +29,23 @@ import com.android.tools.smali.dexlib2.iface.instruction.formats.Instruction35c @Description("Enables tap-to-seek on the seekbar of the video player.") @SeekbarTappingCompatibility class EnableSeekbarTappingPatch : BytecodePatch( - listOf(AccessibilityPlayerProgressTimeFingerprint, SeekbarTappingFingerprint) + listOf(OnTouchEventHandlerFingerprint, SeekbarTappingFingerprint) ) { override fun execute(context: BytecodeContext): PatchResult { // Find the required methods to tap the seekbar. - val seekbarTappingMethods = - AccessibilityPlayerProgressTimeFingerprint.result?.classDef?.methods?.let { methods -> - buildMap { - // find the methods which tap the seekbar - methods.forEach { method -> - if (method.implementation == null) return@forEach + val seekbarTappingMethods = OnTouchEventHandlerFingerprint.result?.let { + val patternScanResult = it.scanResult.patternScanResult!! - val instructions = method.implementation!!.instructions + fun getReference(index: Int) = it.mutableMethod.getInstruction(index) + .reference as MethodReference - // The method has more than 7 instructions. - if (instructions.count() < 7) return@forEach - - // The 7th instruction has the opcode CONST_4. - val instruction = instructions.elementAt(6) - if (instruction.opcode != Opcode.CONST_4) return@forEach - - // the literal for this instruction has to be either 1 or 2. - val literal = (instruction as NarrowLiteralInstruction).narrowLiteral - - // Based on the literal, determine which method is which. - if (literal == 1) this["P"] = method - if (literal == 2) this["O"] = method - } - } + buildMap { + put("O", getReference(patternScanResult.endIndex)) + put("N", getReference(patternScanResult.startIndex)) } + } - seekbarTappingMethods ?: return AccessibilityPlayerProgressTimeFingerprint.toErrorResult() + seekbarTappingMethods ?: return OnTouchEventHandlerFingerprint.toErrorResult() SeekbarTappingFingerprint.result?.let { val insertIndex = it.scanResult.patternScanResult!!.endIndex - 1 @@ -68,11 +56,11 @@ class EnableSeekbarTappingPatch : BytecodePatch( val freeRegister = 0 val xAxisRegister = 2 - val pMethod = seekbarTappingMethods["P"]!! val oMethod = seekbarTappingMethods["O"]!! + val nMethod = seekbarTappingMethods["N"]!! - fun Method.toInvokeInstructionString() = - "invoke-virtual { v$thisInstanceRegister, v$xAxisRegister }, $definingClass->$name(I)V" + fun MethodReference.toInvokeInstructionString() = + "invoke-virtual { v$thisInstanceRegister, v$xAxisRegister }, $this" addInstructionsWithLabels( insertIndex, @@ -81,7 +69,7 @@ class EnableSeekbarTappingPatch : BytecodePatch( move-result v$freeRegister if-eqz v$freeRegister, :disabled ${oMethod.toInvokeInstructionString()} - ${pMethod.toInvokeInstructionString()} + ${nMethod.toInvokeInstructionString()} """, ExternalLabel("disabled", getInstruction(insertIndex)) ) diff --git a/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/patch/EnableSeekbarTappingResourcePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/patch/EnableSeekbarTappingResourcePatch.kt index 29c62c377..a28a53274 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/patch/EnableSeekbarTappingResourcePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/patch/EnableSeekbarTappingResourcePatch.kt @@ -2,16 +2,14 @@ package app.revanced.patches.youtube.interaction.seekbar.patch import app.revanced.patcher.data.ResourceContext import app.revanced.patcher.patch.PatchResult -import app.revanced.patcher.patch.PatchResultError import app.revanced.patcher.patch.PatchResultSuccess import app.revanced.patcher.patch.ResourcePatch import app.revanced.patcher.patch.annotations.DependsOn -import app.revanced.patches.shared.mapping.misc.patch.ResourceMappingPatch import app.revanced.patches.shared.settings.preference.impl.StringResource import app.revanced.patches.shared.settings.preference.impl.SwitchPreference import app.revanced.patches.youtube.misc.settings.bytecode.patch.SettingsPatch -@DependsOn([SettingsPatch::class, ResourceMappingPatch::class]) +@DependsOn([SettingsPatch::class]) class EnableSeekbarTappingResourcePatch : ResourcePatch { override fun execute(context: ResourceContext): PatchResult { SettingsPatch.PreferenceScreen.INTERACTIONS.addPreferences( @@ -22,15 +20,6 @@ class EnableSeekbarTappingResourcePatch : ResourcePatch { StringResource("revanced_seekbar_tapping_summary_off", "Seekbar tapping is disabled") ) ) - - accessibilityPlayerProgressTime = ResourceMappingPatch.resourceMappings.find { - it.name == "accessibility_player_progress_time" - }?.id ?: return PatchResultError("Failed to find required resource") - return PatchResultSuccess() } - - internal companion object { - var accessibilityPlayerProgressTime = -1L - } } \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/autocaptions/fingerprints/SubtitleButtonControllerFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/autocaptions/fingerprints/SubtitleButtonControllerFingerprint.kt index 1d9545c75..b3b0462b2 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/autocaptions/fingerprints/SubtitleButtonControllerFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/autocaptions/fingerprints/SubtitleButtonControllerFingerprint.kt @@ -19,8 +19,5 @@ object SubtitleButtonControllerFingerprint : MethodFingerprint( Opcode.CONST, Opcode.INVOKE_VIRTUAL, Opcode.IGET_OBJECT, - ), - customFingerprint = { methodDef, _ -> - methodDef.definingClass.endsWith("SubtitleButtonController;") - } + ) ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/autoplay/fingerprints/LayoutConstructorFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/autoplay/fingerprints/LayoutConstructorFingerprint.kt deleted file mode 100644 index 92d33ce31..000000000 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/autoplay/fingerprints/LayoutConstructorFingerprint.kt +++ /dev/null @@ -1,10 +0,0 @@ -package app.revanced.patches.youtube.layout.buttons.autoplay.fingerprints - -import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint - -object LayoutConstructorFingerprint : MethodFingerprint( - strings = listOf("1.0x"), - customFingerprint = { methodDef, _ -> - methodDef.definingClass.endsWith("YouTubeControlsOverlay;") - } -) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/autoplay/patch/HideAutoplayButtonPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/autoplay/patch/HideAutoplayButtonPatch.kt index 9f2c2f2db..f60021dc7 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/autoplay/patch/HideAutoplayButtonPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/autoplay/patch/HideAutoplayButtonPatch.kt @@ -17,7 +17,7 @@ import app.revanced.patches.shared.mapping.misc.patch.ResourceMappingPatch import app.revanced.patches.shared.settings.preference.impl.StringResource import app.revanced.patches.shared.settings.preference.impl.SwitchPreference import app.revanced.patches.youtube.layout.buttons.autoplay.annotations.AutoplayButtonCompatibility -import app.revanced.patches.youtube.layout.buttons.autoplay.fingerprints.LayoutConstructorFingerprint +import app.revanced.patches.shared.fingerprints.LayoutConstructorFingerprint import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch import app.revanced.patches.youtube.misc.settings.bytecode.patch.SettingsPatch import com.android.tools.smali.dexlib2.iface.instruction.Instruction diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/captions/patch/HideCaptionsButtonPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/captions/patch/HideCaptionsButtonPatch.kt index d6817e294..34940dd2d 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/captions/patch/HideCaptionsButtonPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/captions/patch/HideCaptionsButtonPatch.kt @@ -38,12 +38,12 @@ class HideCaptionsButtonPatch : BytecodePatch(listOf( val subtitleButtonControllerMethod = SubtitleButtonControllerFingerprint.result!!.mutableMethod // Due to previously applied patches, scanResult index cannot be used in this context - val igetBooleanIndex = subtitleButtonControllerMethod.implementation!!.instructions.indexOfFirst { + val insertIndex = subtitleButtonControllerMethod.implementation!!.instructions.indexOfFirst { it.opcode == Opcode.IGET_BOOLEAN - } + } + 1 subtitleButtonControllerMethod.addInstruction( - igetBooleanIndex + 1, + insertIndex, """ invoke-static {v0}, Lapp/revanced/integrations/patches/HideCaptionsButtonPatch;->hideCaptionsButton(Landroid/widget/ImageView;)V """ diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/loadmorebutton/bytecode/fingerprints/HideLoadMoreButtonFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/loadmorebutton/bytecode/fingerprints/HideLoadMoreButtonFingerprint.kt index 6ba8b0ab7..258ba7d9e 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/loadmorebutton/bytecode/fingerprints/HideLoadMoreButtonFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/loadmorebutton/bytecode/fingerprints/HideLoadMoreButtonFingerprint.kt @@ -1,15 +1,10 @@ package app.revanced.patches.youtube.layout.hide.loadmorebutton.bytecode.fingerprints -import app.revanced.patcher.extensions.or -import app.revanced.util.patch.LiteralValueFingerprint import app.revanced.patches.youtube.layout.hide.loadmorebutton.resource.patch.HideLoadMoreButtonResourcePatch -import com.android.tools.smali.dexlib2.AccessFlags +import app.revanced.util.patch.LiteralValueFingerprint import com.android.tools.smali.dexlib2.Opcode object HideLoadMoreButtonFingerprint : LiteralValueFingerprint( - returnType = "V", - accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR, - parameters = listOf("L", "L", "L", "L"), opcodes = listOf( Opcode.CONST, Opcode.CONST_4, diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/player/overlay/bytecode/fingerprints/CreatePlayerOverviewFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/player/overlay/bytecode/fingerprints/CreatePlayerOverviewFingerprint.kt index 5b25eb704..785577eac 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/player/overlay/bytecode/fingerprints/CreatePlayerOverviewFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/player/overlay/bytecode/fingerprints/CreatePlayerOverviewFingerprint.kt @@ -17,7 +17,6 @@ object CreatePlayerOverviewFingerprint : MethodFingerprint( Opcode.CHECK_CAST ), customFingerprint = { methodDef, _ -> - methodDef.definingClass.endsWith("YouTubeControlsOverlay;") - && methodDef.containsConstantInstructionValue(HidePlayerOverlayResourcePatch.scrimOverlayId) + methodDef.containsConstantInstructionValue(HidePlayerOverlayResourcePatch.scrimOverlayId) } ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/time/fingerprints/TimeCounterFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/time/fingerprints/TimeCounterFingerprint.kt index 32712b920..cfc85b69d 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/time/fingerprints/TimeCounterFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/time/fingerprints/TimeCounterFingerprint.kt @@ -1,28 +1,24 @@ package app.revanced.patches.youtube.layout.hide.time.fingerprints import app.revanced.patcher.extensions.or +import app.revanced.patcher.fingerprint.method.annotation.FuzzyPatternScanMethod import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint import com.android.tools.smali.dexlib2.AccessFlags import com.android.tools.smali.dexlib2.Opcode +@FuzzyPatternScanMethod(1) object TimeCounterFingerprint : MethodFingerprint( - accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, - parameters = listOf(), - returnType = "V", - opcodes = listOf( - Opcode.SUB_LONG_2ADDR, - Opcode.INVOKE_STATIC, - Opcode.MOVE_RESULT_OBJECT, + "V", AccessFlags.PUBLIC or AccessFlags.FINAL, listOf(), listOf( Opcode.IGET_OBJECT, Opcode.IGET_WIDE, - Opcode.INVOKE_STATIC, - Opcode.MOVE_RESULT_OBJECT, - Opcode.INVOKE_INTERFACE, - Opcode.RETURN_VOID, - ), - customFingerprint = { _, classDef -> - // On older devices this fingerprint resolves very slowly. - // Speed this up by checking for the number of methods. - classDef.methods.count() == 14 - } + Opcode.CONST_WIDE_16, + Opcode.CMP_LONG, + Opcode.IF_LEZ, + Opcode.IGET_OBJECT, + Opcode.IF_EQZ, + Opcode.INVOKE_VIRTUAL, + Opcode.MOVE_RESULT, + Opcode.IF_EQZ, + Opcode.GOTO, + ) ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/panels/fullscreen/remove/annotations/FullscreenPanelsCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/panels/fullscreen/remove/annotations/FullscreenPanelsCompatibility.kt deleted file mode 100644 index 11dbf8842..000000000 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/panels/fullscreen/remove/annotations/FullscreenPanelsCompatibility.kt +++ /dev/null @@ -1,8 +0,0 @@ -package app.revanced.patches.youtube.layout.panels.fullscreen.remove.annotations - -import app.revanced.patcher.annotation.Compatibility -import app.revanced.patcher.annotation.Package - -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) -@Target(AnnotationTarget.CLASS) -internal annotation class FullscreenPanelsCompatibility diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/panels/fullscreen/remove/fingerprints/FullscreenViewAdderFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/panels/fullscreen/remove/fingerprints/FullscreenViewAdderFingerprint.kt index 521902732..e69de29bb 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/panels/fullscreen/remove/fingerprints/FullscreenViewAdderFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/panels/fullscreen/remove/fingerprints/FullscreenViewAdderFingerprint.kt @@ -1,11 +0,0 @@ -package app.revanced.patches.youtube.layout.panels.fullscreen.remove.fingerprints - - -import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import com.android.tools.smali.dexlib2.Opcode - -object FullscreenViewAdderFingerprint : MethodFingerprint( - opcodes = listOf( - Opcode.IGET_BOOLEAN - ) -) diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/panels/fullscreen/remove/fingerprints/FullscreenViewAdderParentFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/panels/fullscreen/remove/fingerprints/FullscreenViewAdderParentFingerprint.kt index a7b2565ba..e69de29bb 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/panels/fullscreen/remove/fingerprints/FullscreenViewAdderParentFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/panels/fullscreen/remove/fingerprints/FullscreenViewAdderParentFingerprint.kt @@ -1,20 +0,0 @@ -package app.revanced.patches.youtube.layout.panels.fullscreen.remove.fingerprints - -import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import com.android.tools.smali.dexlib2.Opcode - -object FullscreenViewAdderParentFingerprint : MethodFingerprint( - returnType = "V", - parameters = listOf("Landroid/content/Context;", "Landroid/view/View;"), - opcodes = listOf( - Opcode.GOTO, - Opcode.IGET_BOOLEAN, - Opcode.IF_EQ, - Opcode.GOTO, - Opcode.CONST_4, - Opcode.INVOKE_VIRTUAL, - ), - customFingerprint = { methodDef, _ -> - methodDef.definingClass.endsWith("FullscreenEngagementPanelOverlay;") - } -) diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/panels/fullscreen/remove/patch/FullscreenPanelsRemoverPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/panels/fullscreen/remove/patch/FullscreenPanelsRemoverPatch.kt deleted file mode 100644 index ab36bb885..000000000 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/panels/fullscreen/remove/patch/FullscreenPanelsRemoverPatch.kt +++ /dev/null @@ -1,63 +0,0 @@ -package app.revanced.patches.youtube.layout.panels.fullscreen.remove.patch - -import app.revanced.patcher.annotation.Description -import app.revanced.patcher.annotation.Name -import app.revanced.patcher.data.BytecodeContext -import app.revanced.patcher.extensions.InstructionExtensions.addInstructions -import app.revanced.patcher.extensions.InstructionExtensions.removeInstruction -import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint.Companion.resolve -import app.revanced.patcher.patch.BytecodePatch -import app.revanced.patcher.patch.PatchResult -import app.revanced.patcher.patch.PatchResultError -import app.revanced.patcher.patch.PatchResultSuccess -import app.revanced.patcher.patch.annotations.DependsOn -import app.revanced.patcher.patch.annotations.Patch -import app.revanced.patches.shared.settings.preference.impl.StringResource -import app.revanced.patches.shared.settings.preference.impl.SwitchPreference -import app.revanced.patches.youtube.layout.panels.fullscreen.remove.annotations.FullscreenPanelsCompatibility -import app.revanced.patches.youtube.layout.panels.fullscreen.remove.fingerprints.FullscreenViewAdderFingerprint -import app.revanced.patches.youtube.layout.panels.fullscreen.remove.fingerprints.FullscreenViewAdderParentFingerprint -import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch -import app.revanced.patches.youtube.misc.settings.bytecode.patch.SettingsPatch - -@Patch -@Name("Disable fullscreen panels") -@DependsOn([IntegrationsPatch::class, SettingsPatch::class]) -@Description("Disables video description and comments panel in fullscreen view.") -@FullscreenPanelsCompatibility -class FullscreenPanelsRemoverPatch : BytecodePatch( - listOf( - FullscreenViewAdderParentFingerprint - ) -) { - override fun execute(context: BytecodeContext): PatchResult { - SettingsPatch.PreferenceScreen.LAYOUT.addPreferences( - SwitchPreference( - "revanced_hide_fullscreen_panels", - StringResource("revanced_hide_fullscreen_panels_title", "Hide fullscreen panels"), - StringResource("revanced_hide_fullscreen_panels_summary_on", "Fullscreen panels are hidden"), - StringResource("revanced_hide_fullscreen_panels_summary_off", "Fullscreen panels are shown") - ) - ) - - val parentResult = FullscreenViewAdderParentFingerprint.result!! - FullscreenViewAdderFingerprint.resolve(context, parentResult.method, parentResult.classDef) - val result = FullscreenViewAdderParentFingerprint.result - ?: return PatchResultError("Fingerprint not resolved!") - - val method = result.mutableMethod - - val ifIndex = result.scanResult.patternScanResult!!.startIndex + 2 - - method.removeInstruction(ifIndex) - method.addInstructions( - ifIndex, - """ - invoke-static {}, Lapp/revanced/integrations/patches/FullscreenPanelsRemoverPatch;->getFullscreenPanelsVisibility()I - move-result p1 - """ - ) - - return PatchResultSuccess() - } -} diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/fingerprints/ShortsTextViewFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/fingerprints/ShortsTextViewFingerprint.kt index 283c8fb9c..1009acbd5 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/fingerprints/ShortsTextViewFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/fingerprints/ShortsTextViewFingerprint.kt @@ -1,12 +1,12 @@ package app.revanced.patches.youtube.layout.returnyoutubedislike.fingerprints -import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint import com.android.tools.smali.dexlib2.AccessFlags import com.android.tools.smali.dexlib2.Opcode object ShortsTextViewFingerprint : MethodFingerprint( - accessFlags = AccessFlags.PROTECTED or AccessFlags.FINAL, + // 18.29.38 method is public final visibility, but in 18.23.35 and older it's protected final. + // If 18.23.35 is dropped then accessFlags should be specified here. returnType = "V", parameters = listOf("L", "L"), opcodes = listOf( diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/fingerprints/TextComponentAtomicReferenceFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/fingerprints/TextComponentAtomicReferenceFingerprint.kt index a1b0858dd..0879f52ca 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/fingerprints/TextComponentAtomicReferenceFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/fingerprints/TextComponentAtomicReferenceFingerprint.kt @@ -15,7 +15,7 @@ object TextComponentAtomicReferenceFingerprint : MethodFingerprint( opcodes = listOf( Opcode.MOVE_OBJECT_FROM16, // available unused register Opcode.MOVE_OBJECT_FROM16, - Opcode.MOVE_OBJECT_FROM16, + null, // move-object/from16 or move/from16 Opcode.MOVE_OBJECT_FROM16, Opcode.INVOKE_VIRTUAL, // CharSequence atomic reference Opcode.MOVE_RESULT_OBJECT, diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/sponsorblock/bytecode/fingerprints/ControlsOverlayFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/sponsorblock/bytecode/fingerprints/ControlsOverlayFingerprint.kt index afd72b406..934386bc1 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/sponsorblock/bytecode/fingerprints/ControlsOverlayFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/sponsorblock/bytecode/fingerprints/ControlsOverlayFingerprint.kt @@ -19,9 +19,6 @@ object ControlsOverlayFingerprint : MethodFingerprint( Opcode.INVOKE_VIRTUAL, Opcode.MOVE_RESULT_OBJECT, Opcode.CHECK_CAST, - Opcode.NEW_INSTANCE, - ), - customFingerprint = { methodDef, _ -> - methodDef.definingClass == "Lcom/google/android/apps/youtube/app/player/overlay/YouTubeControlsOverlay;" - } + Opcode.NEW_INSTANCE + ) ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/sponsorblock/bytecode/patch/SponsorBlockBytecodePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/sponsorblock/bytecode/patch/SponsorBlockBytecodePatch.kt index 963a7008e..4f00ba5ba 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/sponsorblock/bytecode/patch/SponsorBlockBytecodePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/sponsorblock/bytecode/patch/SponsorBlockBytecodePatch.kt @@ -17,6 +17,7 @@ import app.revanced.patcher.patch.PatchResultSuccess import app.revanced.patcher.patch.annotations.DependsOn import app.revanced.patcher.patch.annotations.Patch import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod +import app.revanced.patches.shared.fingerprints.LayoutConstructorFingerprint import app.revanced.patches.shared.fingerprints.SeekbarFingerprint import app.revanced.patches.shared.fingerprints.SeekbarOnDrawFingerprint import app.revanced.patches.shared.mapping.misc.patch.ResourceMappingPatch @@ -59,23 +60,16 @@ class SponsorBlockBytecodePatch : BytecodePatch( listOf( SeekbarFingerprint, AppendTimeFingerprint, - ControlsOverlayFingerprint, + LayoutConstructorFingerprint, AutoRepeatParentFingerprint, ) ) { - - private companion object { - const val INTEGRATIONS_SEGMENT_PLAYBACK_CONTROLLER_CLASS_DESCRIPTOR = - "Lapp/revanced/integrations/sponsorblock/SegmentPlaybackController;" - const val INTEGRATIONS_CREATE_SEGMENT_BUTTON_CONTROLLER_CLASS_DESCRIPTOR = - "Lapp/revanced/integrations/sponsorblock/ui/CreateSegmentButtonController;" - const val INTEGRATIONS_VOTING_BUTTON_CONTROLLER_CLASS_DESCRIPTOR = - "Lapp/revanced/integrations/sponsorblock/ui/VotingButtonController;" - const val INTEGRATIONS_SPONSORBLOCK_VIEW_CONTROLLER_CLASS_DESCRIPTOR = - "Lapp/revanced/integrations/sponsorblock/ui/SponsorBlockViewController;" - } - override fun execute(context: BytecodeContext): PatchResult { + LayoutConstructorFingerprint.result?.let { + if (!ControlsOverlayFingerprint.resolve(context, it.classDef)) + throw ControlsOverlayFingerprint.toErrorResult() + } ?: return LayoutConstructorFingerprint.toErrorResult() + /* * Hook the video time methods */ @@ -279,4 +273,15 @@ class SponsorBlockBytecodePatch : BytecodePatch( return PatchResultSuccess() } + + private companion object { + const val INTEGRATIONS_SEGMENT_PLAYBACK_CONTROLLER_CLASS_DESCRIPTOR = + "Lapp/revanced/integrations/sponsorblock/SegmentPlaybackController;" + const val INTEGRATIONS_CREATE_SEGMENT_BUTTON_CONTROLLER_CLASS_DESCRIPTOR = + "Lapp/revanced/integrations/sponsorblock/ui/CreateSegmentButtonController;" + const val INTEGRATIONS_VOTING_BUTTON_CONTROLLER_CLASS_DESCRIPTOR = + "Lapp/revanced/integrations/sponsorblock/ui/VotingButtonController;" + const val INTEGRATIONS_SPONSORBLOCK_VIEW_CONTROLLER_CLASS_DESCRIPTOR = + "Lapp/revanced/integrations/sponsorblock/ui/SponsorBlockViewController;" + } } diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/tabletminiplayer/fingerprints/MiniPlayerOverrideFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/tabletminiplayer/fingerprints/MiniPlayerOverrideFingerprint.kt index ded121ec3..73f593506 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/tabletminiplayer/fingerprints/MiniPlayerOverrideFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/tabletminiplayer/fingerprints/MiniPlayerOverrideFingerprint.kt @@ -3,21 +3,10 @@ package app.revanced.patches.youtube.layout.tabletminiplayer.fingerprints import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint import com.android.tools.smali.dexlib2.AccessFlags -import com.android.tools.smali.dexlib2.Opcode object MiniPlayerOverrideFingerprint : MethodFingerprint( - "Z", AccessFlags.STATIC or AccessFlags.PUBLIC, - listOf("Landroid/content/Context;"), - opcodes = listOf( - Opcode.INVOKE_STATIC, - Opcode.MOVE_RESULT, - Opcode.CONST_4, - Opcode.IF_EQ, - Opcode.CONST_4, - Opcode.IF_EQ, - Opcode.CONST_4, // override this value - Opcode.RETURN, - Opcode.CONST_4, // override this value - Opcode.RETURN - ), + returnType = "L", + accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, + parameters = listOf("L"), + strings = listOf("appName") ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/tabletminiplayer/fingerprints/MiniPlayerOverrideParentFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/tabletminiplayer/fingerprints/MiniPlayerOverrideParentFingerprint.kt deleted file mode 100644 index df5352235..000000000 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/tabletminiplayer/fingerprints/MiniPlayerOverrideParentFingerprint.kt +++ /dev/null @@ -1,7 +0,0 @@ -package app.revanced.patches.youtube.layout.tabletminiplayer.fingerprints - -import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint - -object MiniPlayerOverrideParentFingerprint : MethodFingerprint( - strings = listOf("Unset or unknown Input OneOf case for dynamic input") -) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/tabletminiplayer/patch/TabletMiniPlayerPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/tabletminiplayer/patch/TabletMiniPlayerPatch.kt index b7961a69d..22d5c1228 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/tabletminiplayer/patch/TabletMiniPlayerPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/tabletminiplayer/patch/TabletMiniPlayerPatch.kt @@ -4,6 +4,7 @@ import app.revanced.extensions.toErrorResult import app.revanced.patcher.annotation.Description import app.revanced.patcher.annotation.Name import app.revanced.patcher.data.BytecodeContext +import app.revanced.patcher.data.toMethodWalker import app.revanced.patcher.extensions.InstructionExtensions.addInstructions import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint.Companion.resolve @@ -17,7 +18,10 @@ import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod import app.revanced.patches.shared.settings.preference.impl.StringResource import app.revanced.patches.shared.settings.preference.impl.SwitchPreference import app.revanced.patches.youtube.layout.tabletminiplayer.annotations.TabletMiniPlayerCompatibility -import app.revanced.patches.youtube.layout.tabletminiplayer.fingerprints.* +import app.revanced.patches.youtube.layout.tabletminiplayer.fingerprints.MiniPlayerDimensionsCalculatorParentFingerprint +import app.revanced.patches.youtube.layout.tabletminiplayer.fingerprints.MiniPlayerOverrideFingerprint +import app.revanced.patches.youtube.layout.tabletminiplayer.fingerprints.MiniPlayerOverrideNoContextFingerprint +import app.revanced.patches.youtube.layout.tabletminiplayer.fingerprints.MiniPlayerResponseModelSizeCheckFingerprint import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch import app.revanced.patches.youtube.misc.settings.bytecode.patch.SettingsPatch import com.android.tools.smali.dexlib2.Opcode @@ -32,7 +36,7 @@ class TabletMiniPlayerPatch : BytecodePatch( listOf( MiniPlayerDimensionsCalculatorParentFingerprint, MiniPlayerResponseModelSizeCheckFingerprint, - MiniPlayerOverrideParentFingerprint + MiniPlayerOverrideFingerprint ) ) { override fun execute(context: BytecodeContext): PatchResult { @@ -62,33 +66,33 @@ class TabletMiniPlayerPatch : BytecodePatch( /** same register used to return **/ ) - /* - * Method with context parameter. - */ - MiniPlayerOverrideParentFingerprint.result?.let { - if (!MiniPlayerOverrideFingerprint.resolve(context, it.classDef)) - throw MiniPlayerOverrideFingerprint.toErrorResult() - } ?: return MiniPlayerOverrideParentFingerprint.toErrorResult() - /* * Override every return instruction with the proxy call. */ - MiniPlayerOverrideFingerprint.result!!.mutableMethod.apply { - implementation!!.let { implementation -> - val returnIndices = implementation.instructions - .withIndex() - .filter { (_, instruction) -> instruction.opcode == Opcode.RETURN } - .map { (index, _) -> index } + MiniPlayerOverrideFingerprint.result?.let { result -> + result.mutableMethod.let { method -> + val appNameStringIndex = result.scanResult.stringsScanResult!!.matches.first().index + 2 + context.toMethodWalker(method).nextMethod(appNameStringIndex, true) + .getMethod() as MutableMethod + }.apply { + implementation!!.let { implementation -> + val returnIndices = implementation.instructions + .withIndex() + .filter { (_, instruction) -> instruction.opcode == Opcode.RETURN } + .map { (index, _) -> index } - if (returnIndices.isEmpty()) throw PatchResultError("No return instructions found.") + if (returnIndices.isEmpty()) throw PatchResultError("No return instructions found.") - // This method clobbers register p0 to return the value, calculate to override. - val returnedRegister = implementation.registerCount - parameters.size + // This method clobbers register p0 to return the value, calculate to override. + val returnedRegister = implementation.registerCount - parameters.size - // Hook the returned register on every return instruction. - returnIndices.forEach { index -> insertOverride(index, returnedRegister) } + // Hook the returned register on every return instruction. + returnIndices.forEach { index -> insertOverride(index, returnedRegister) } + } } - } + + return@let + } ?: return MiniPlayerOverrideFingerprint.toErrorResult() /* * Size check return value override. diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/minimizedplayback/fingerprints/KidsMinimizedPlaybackPolicyControllerFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/minimizedplayback/fingerprints/KidsMinimizedPlaybackPolicyControllerFingerprint.kt index 0b889561e..1a24e194a 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/minimizedplayback/fingerprints/KidsMinimizedPlaybackPolicyControllerFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/minimizedplayback/fingerprints/KidsMinimizedPlaybackPolicyControllerFingerprint.kt @@ -4,22 +4,31 @@ import app.revanced.patcher.extensions.or import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint import com.android.tools.smali.dexlib2.AccessFlags import com.android.tools.smali.dexlib2.Opcode +import com.android.tools.smali.dexlib2.iface.instruction.NarrowLiteralInstruction object KidsMinimizedPlaybackPolicyControllerFingerprint : MethodFingerprint( returnType = "V", accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, - parameters = listOf("I", "L", "L"), + parameters = listOf("I", "L", "L"), opcodes = listOf( - Opcode.IF_EQZ, + Opcode.CONST_4, + Opcode.IF_NE, Opcode.SGET_OBJECT, Opcode.IF_NE, - Opcode.CONST_4, - Opcode.IPUT_BOOLEAN, - Opcode.IF_EQZ, Opcode.IGET, - Opcode.INVOKE_STATIC + Opcode.CONST_4, + Opcode.IF_NE, + Opcode.IGET_OBJECT, + Opcode.SGET_OBJECT, + Opcode.IF_EQ, + Opcode.GOTO, + Opcode.IGET_OBJECT, + Opcode.INVOKE_VIRTUAL, + Opcode.RETURN_VOID ), customFingerprint = { methodDef, _ -> - methodDef.definingClass.endsWith("MinimizedPlaybackPolicyController;") + methodDef.implementation!!.instructions.any { + ((it as? NarrowLiteralInstruction)?.narrowLiteral == 5) + } } ) diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/playercontrols/bytecode/patch/PlayerControlsBytecodePatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/playercontrols/bytecode/patch/PlayerControlsBytecodePatch.kt index 2fef90c1c..41627635c 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/playercontrols/bytecode/patch/PlayerControlsBytecodePatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/playercontrols/bytecode/patch/PlayerControlsBytecodePatch.kt @@ -1,14 +1,17 @@ package app.revanced.patches.youtube.misc.playercontrols.bytecode.patch +import app.revanced.extensions.toErrorResult import app.revanced.patcher.annotation.Description import app.revanced.patcher.annotation.Name import app.revanced.patcher.data.BytecodeContext import app.revanced.patcher.extensions.InstructionExtensions.addInstruction +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint.Companion.resolve import app.revanced.patcher.fingerprint.method.impl.MethodFingerprintResult import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.PatchResult import app.revanced.patcher.patch.PatchResultSuccess import app.revanced.patcher.patch.annotations.DependsOn +import app.revanced.patches.shared.fingerprints.LayoutConstructorFingerprint import app.revanced.patches.youtube.misc.playercontrols.annotation.PlayerControlsCompatibility import app.revanced.patches.youtube.misc.playercontrols.fingerprints.BottomControlsInflateFingerprint import app.revanced.patches.youtube.misc.playercontrols.fingerprints.PlayerControlsVisibilityFingerprint @@ -20,9 +23,17 @@ import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction @Description("Manages the code for the player controls of the YouTube player.") @PlayerControlsCompatibility class PlayerControlsBytecodePatch : BytecodePatch( - listOf(PlayerControlsVisibilityFingerprint, BottomControlsInflateFingerprint) + listOf( + LayoutConstructorFingerprint, + BottomControlsInflateFingerprint + ) ) { override fun execute(context: BytecodeContext): PatchResult { + LayoutConstructorFingerprint.result?.let { + if (!PlayerControlsVisibilityFingerprint.resolve(context, it.classDef)) + throw LayoutConstructorFingerprint.toErrorResult() + } ?: return LayoutConstructorFingerprint.toErrorResult() + showPlayerControlsFingerprintResult = PlayerControlsVisibilityFingerprint.result!! inflateFingerprintResult = BottomControlsInflateFingerprint.result!! diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/playercontrols/fingerprints/PlayerControlsVisibilityFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/playercontrols/fingerprints/PlayerControlsVisibilityFingerprint.kt index 3d9a23720..1f6951a0b 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/playercontrols/fingerprints/PlayerControlsVisibilityFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/playercontrols/fingerprints/PlayerControlsVisibilityFingerprint.kt @@ -7,8 +7,5 @@ import com.android.tools.smali.dexlib2.AccessFlags object PlayerControlsVisibilityFingerprint : MethodFingerprint( accessFlags = AccessFlags.PRIVATE or AccessFlags.FINAL, returnType = "V", - parameters = listOf("Z", "Z"), - customFingerprint = { methodDef, _ -> - methodDef.definingClass.endsWith("YouTubeControlsOverlay;") - } + parameters = listOf("Z", "Z") ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/playertype/fingerprint/PlayerTypeFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/playertype/fingerprint/PlayerTypeFingerprint.kt index 477b63d96..dc252f97b 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/playertype/fingerprint/PlayerTypeFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/playertype/fingerprint/PlayerTypeFingerprint.kt @@ -10,26 +10,8 @@ object PlayerTypeFingerprint : MethodFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, parameters = listOf("L"), opcodes = listOf( - Opcode.INVOKE_VIRTUAL, - Opcode.IGET_OBJECT, Opcode.IF_NE, - Opcode.RETURN_VOID, - Opcode.IPUT_OBJECT, - Opcode.INVOKE_DIRECT, - Opcode.INVOKE_VIRTUAL, - Opcode.INVOKE_VIRTUAL, - Opcode.INVOKE_VIRTUAL, - Opcode.MOVE_RESULT, - Opcode.IF_EQZ, - Opcode.CONST_4, - Opcode.INVOKE_STATIC, - Opcode.RETURN_VOID, - Opcode.CONST_4, - Opcode.INVOKE_STATIC, - Opcode.INVOKE_VIRTUAL, Opcode.RETURN_VOID ), - customFingerprint = { methodDef, _ -> - methodDef.definingClass.endsWith("YouTubePlayerOverlaysLayout;") - } + customFingerprint = { methodDef, _ -> methodDef.definingClass.endsWith("/YouTubePlayerOverlaysLayout;") } ) diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/playertype/fingerprint/VideoStateFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/playertype/fingerprint/VideoStateFingerprint.kt index 5212f68a3..1fb9e7f0a 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/playertype/fingerprint/VideoStateFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/playertype/fingerprint/VideoStateFingerprint.kt @@ -17,8 +17,5 @@ object VideoStateFingerprint : MethodFingerprint( Opcode.IF_EQZ, Opcode.IF_EQZ, Opcode.IGET_OBJECT, // obfuscated parameter field name - ), - customFingerprint = { methodDef, _ -> - methodDef.definingClass.endsWith("YouTubeControlsOverlay;") - } + ) ) \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/playertype/patch/PlayerTypeHookPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/playertype/patch/PlayerTypeHookPatch.kt index 82f578da5..831482dcc 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/playertype/patch/PlayerTypeHookPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/playertype/patch/PlayerTypeHookPatch.kt @@ -12,33 +12,27 @@ import app.revanced.patcher.patch.PatchResult import app.revanced.patcher.patch.PatchResultSuccess import app.revanced.patcher.patch.annotations.DependsOn import app.revanced.patches.youtube.misc.integrations.patch.IntegrationsPatch -import app.revanced.patches.youtube.misc.playertype.annotation.PlayerTypeHookCompatibility import app.revanced.patches.youtube.misc.playertype.fingerprint.PlayerTypeFingerprint import app.revanced.patches.youtube.misc.playertype.fingerprint.VideoStateFingerprint import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction @Name("Player type hook") @Description("Hook to get the current player type and video playback state.") -@PlayerTypeHookCompatibility @DependsOn([IntegrationsPatch::class]) class PlayerTypeHookPatch : BytecodePatch( listOf(PlayerTypeFingerprint, VideoStateFingerprint) ) { override fun execute(context: BytecodeContext): PatchResult { - - PlayerTypeFingerprint.result?.let { - it.mutableMethod.apply { - addInstruction( - 0, - "invoke-static {p1}, $INTEGRATIONS_CLASS_DESCRIPTOR->setPlayerType(Ljava/lang/Enum;)V" - ) - } - } ?: return PlayerTypeFingerprint.toErrorResult() + PlayerTypeFingerprint.result?.mutableMethod?.addInstruction( + 0, + "invoke-static {p1}, $INTEGRATIONS_CLASS_DESCRIPTOR->setPlayerType(Ljava/lang/Enum;)V" + ) ?: return PlayerTypeFingerprint.toErrorResult() VideoStateFingerprint.result?.let { it.mutableMethod.apply { val endIndex = it.scanResult.patternScanResult!!.endIndex val videoStateFieldName = getInstruction(endIndex).reference + addInstructions( 0, """ diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/videoid/fingerprint/VideoIdFingerprint.kt b/src/main/kotlin/app/revanced/patches/youtube/video/videoid/fingerprint/VideoIdFingerprint.kt index ae8dfadc4..dcb8df5cb 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/videoid/fingerprint/VideoIdFingerprint.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/video/videoid/fingerprint/VideoIdFingerprint.kt @@ -10,6 +10,7 @@ object VideoIdFingerprint : MethodFingerprint( accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL, parameters = listOf("L"), opcodes = listOf( + Opcode.MOVE_RESULT_OBJECT, Opcode.IF_EQZ, Opcode.INVOKE_VIRTUAL, Opcode.MOVE_RESULT_OBJECT, @@ -23,8 +24,5 @@ object VideoIdFingerprint : MethodFingerprint( Opcode.MOVE_RESULT_OBJECT, Opcode.INVOKE_INTERFACE, Opcode.MOVE_RESULT_OBJECT - ), - customFingerprint = { methodDef, _ -> - methodDef.definingClass.endsWith("SubtitlesOverlayPresenter;") - } + ) ) diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/videoid/fingerprint/VideoIdFingerprintBackgroundPlay.kt b/src/main/kotlin/app/revanced/patches/youtube/video/videoid/fingerprint/VideoIdFingerprintBackgroundPlay.kt index 1556a600f..23de434cf 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/videoid/fingerprint/VideoIdFingerprintBackgroundPlay.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/video/videoid/fingerprint/VideoIdFingerprintBackgroundPlay.kt @@ -9,8 +9,21 @@ object VideoIdFingerprintBackgroundPlay : MethodFingerprint( returnType = "V", accessFlags = AccessFlags.DECLARED_SYNCHRONIZED or AccessFlags.FINAL or AccessFlags.PUBLIC, parameters = listOf("L"), - opcodes = listOf(Opcode.INVOKE_INTERFACE), - customFingerprint = { methodDef, _ -> - methodDef.definingClass.endsWith("PlaybackLifecycleMonitor;") - } + opcodes = listOf( + Opcode.MONITOR_EXIT, + Opcode.RETURN_VOID, + Opcode.INVOKE_VIRTUAL, + Opcode.MOVE_RESULT_OBJECT, + Opcode.NEW_ARRAY, + Opcode.SGET_OBJECT, + Opcode.APUT_OBJECT, + Opcode.INVOKE_VIRTUAL, + Opcode.MOVE_RESULT, + Opcode.IF_EQZ, + Opcode.INVOKE_VIRTUAL, + Opcode.MOVE_RESULT_OBJECT, + Opcode.IF_EQZ, + Opcode.INVOKE_INTERFACE, + Opcode.MOVE_RESULT_OBJECT, + ), ) diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/videoid/patch/VideoIdPatch.kt b/src/main/kotlin/app/revanced/patches/youtube/video/videoid/patch/VideoIdPatch.kt index 92ed1f390..6a178cb96 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/videoid/patch/VideoIdPatch.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/video/videoid/patch/VideoIdPatch.kt @@ -6,6 +6,7 @@ import app.revanced.patcher.annotation.Name import app.revanced.patcher.data.BytecodeContext import app.revanced.patcher.extensions.InstructionExtensions.addInstruction import app.revanced.patcher.extensions.InstructionExtensions.getInstruction +import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint import app.revanced.patcher.patch.BytecodePatch import app.revanced.patcher.patch.PatchResult import app.revanced.patcher.patch.PatchResultSuccess @@ -25,27 +26,33 @@ class VideoIdPatch : BytecodePatch( listOf(VideoIdFingerprint, VideoIdFingerprintBackgroundPlay) ) { override fun execute(context: BytecodeContext): PatchResult { - VideoIdFingerprint.result?.let { result -> - val videoIdRegisterInstructionIndex = result.scanResult.patternScanResult!!.endIndex + /** + * Supplies the method and register index of the video id register. + * + * @param consumer Consumer that receives the method, insert index and video id register index. + */ + fun MethodFingerprint.setFields(consumer: (MutableMethod, Int, Int) -> Unit) = result?.let { result -> + val videoIdRegisterIndex = result.scanResult.patternScanResult!!.endIndex + + result.mutableMethod.let { + val videoIdRegister = it.getInstruction(videoIdRegisterIndex).registerA + val insertIndex = videoIdRegisterIndex + 1 + consumer(it, insertIndex, videoIdRegister) - result.mutableMethod.also { - insertMethod = it - }.apply { - videoIdRegister = getInstruction(videoIdRegisterInstructionIndex).registerA - insertIndex = videoIdRegisterInstructionIndex + 1 } - } ?: return VideoIdFingerprint.toErrorResult() + } ?: throw VideoIdFingerprint.toErrorResult() - VideoIdFingerprintBackgroundPlay.result?.let { result -> - val endIndex = result.scanResult.patternScanResult!!.endIndex + VideoIdFingerprint.setFields { method, insertIndex, videoIdRegister -> + insertMethod = method + VideoIdPatch.insertIndex = insertIndex + VideoIdPatch.videoIdRegister = videoIdRegister + } - result.mutableMethod.also { - backgroundPlaybackMethod = it - }.apply { - backgroundPlaybackVideoIdRegister = getInstruction(endIndex + 1).registerA - backgroundPlaybackInsertIndex = endIndex + 2 - } - } ?: return VideoIdFingerprintBackgroundPlay.toErrorResult() + VideoIdFingerprintBackgroundPlay.setFields { method, insertIndex, videoIdRegister -> + backgroundPlaybackMethod = method + backgroundPlaybackInsertIndex = insertIndex + backgroundPlaybackVideoIdRegister = videoIdRegister + } return PatchResultSuccess() } From c0a13bbb7883ec8c66e8e4376c3bde9d3a4d679f Mon Sep 17 00:00:00 2001 From: oSumAtrIX Date: Wed, 23 Aug 2023 04:49:15 +0200 Subject: [PATCH 42/67] chore(YouTube): Bump compatibility to `18.29.38` --- .../youtube/ad/general/annotation/HideAdsCompatibility.kt | 2 +- .../ad/getpremium/annotations/HideGetPremiumCompatibility.kt | 2 +- .../youtube/ad/video/annotations/VideoAdsCompatibility.kt | 2 +- .../copyvideourl/annotation/CopyVideoUrlCompatibility.kt | 2 +- .../downloads/annotation/ExternalDownloadsCompatibility.kt | 2 +- .../seekbar/annotation/SeekbarTappingCompatibility.kt | 2 +- .../swipecontrols/annotation/SwipeControlsCompatibility.kt | 2 +- .../annotations/AlternativeThumbnailsCompatibility.kt | 2 +- .../autocaptions/annotations/AutoCaptionsCompatibility.kt | 2 +- .../buttons/action/annotations/HideButtonsCompatibility.kt | 2 +- .../buttons/autoplay/annotations/AutoplayButtonCompatibility.kt | 2 +- .../captions/annotations/HideCaptionsButtonCompatibility.kt | 2 +- .../navigation/annotations/NavigationButtonsCompatibility.kt | 2 +- .../player/hide/annotations/HidePlayerButtonsCompatibility.kt | 2 +- .../hide/albumcards/annotations/AlbumCardsCompatibility.kt | 2 +- .../hide/breakingnews/annotations/BreakingNewsCompatibility.kt | 2 +- .../hide/comments/annotations/HideCommentsCompatibility.kt | 2 +- .../crowdfundingbox/annotations/CrowdfundingBoxCompatibility.kt | 2 +- .../annotations/HideEndscreenCardsCompatibility.kt | 2 +- .../youtube/layout/hide/filterbar/annotations/HideFilterBar.kt | 2 +- .../annotations/HideFloatingMicrophoneButtonCompatibility.kt | 2 +- .../general/annotations/HideLayoutComponentsCompatibility.kt | 2 +- .../hide/infocards/annotations/HideInfocardsCompatibility.kt | 2 +- .../annotations/HideLoadMoreButtonCompatibility.kt | 2 +- .../annotations/HideEmailAddressCompatibility.kt | 2 +- .../annotations/HidePlayerFlyoutMenuItemsCompatibility.kt | 2 +- .../layout/hide/seekbar/annotations/HideSeekbarCompatibility.kt | 2 +- .../shorts/annotations/HideShortsComponentsCompatibility.kt | 2 +- .../layout/hide/time/annotations/HideTimeCompatibility.kt | 2 +- .../hide/watermark/annotations/HideWatermarkCompatibility.kt | 2 +- .../panels/popup/annotations/PlayerPopupPanelsCompatibility.kt | 2 +- .../annotations/PlayerControlsBackgroundCompatibility.kt | 2 +- .../annotations/ReturnYouTubeDislikeCompatibility.kt | 2 +- .../layout/searchbar/annotations/WideSearchbarCompatibility.kt | 2 +- .../sponsorblock/annotations/SponsorBlockCompatibility.kt | 2 +- .../spoofappversion/annotations/SpoofAppVersionCompatibility.kt | 2 +- .../annotations/StartupShortsResetCompatibility.kt | 2 +- .../annotations/TabletMiniPlayerCompatibility.kt | 2 +- .../misc/autorepeat/annotations/AutoRepeatCompatibility.kt | 2 +- .../annotation/FixBackToExitGestureCompatibility.kt | 2 +- .../misc/fix/playback/annotations/ClientSpoofCompatibility.kt | 2 +- .../misc/integrations/annotations/IntegrationsCompatibility.kt | 2 +- .../links/open/annotations/OpenLinksExternallyCompatibility.kt | 2 +- .../youtube/misc/microg/annotations/MicroGPatchCompatibility.kt | 2 +- .../annotations/MinimizedPlaybackCompatibility.kt | 2 +- .../playercontrols/annotation/PlayerControlsCompatibility.kt | 2 +- .../playeroverlay/annotation/PlayerOverlaysHookCompatibility.kt | 2 +- .../misc/playertype/annotation/PlayerTypeHookCompatibility.kt | 2 +- .../hdrbrightness/annotations/HDRBrightnessCompatibility.kt | 2 +- .../information/annotation/VideoInformationCompatibility.kt | 2 +- .../quality/annotations/RememberVideoQualityCompatibility.kt | 2 +- .../patches/youtube/video/speed/PlaybackSpeedCompatibility.kt | 2 +- .../youtube/video/videoid/annotation/VideoIdCompatibility.kt | 2 +- .../annotations/OldVideoQualityMenuCompatibility.kt | 2 +- 54 files changed, 54 insertions(+), 54 deletions(-) diff --git a/src/main/kotlin/app/revanced/patches/youtube/ad/general/annotation/HideAdsCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/ad/general/annotation/HideAdsCompatibility.kt index 5f90c5019..bd29e6b65 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/ad/general/annotation/HideAdsCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/ad/general/annotation/HideAdsCompatibility.kt @@ -3,7 +3,7 @@ package app.revanced.patches.youtube.ad.general.annotation import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class HideAdsCompatibility diff --git a/src/main/kotlin/app/revanced/patches/youtube/ad/getpremium/annotations/HideGetPremiumCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/ad/getpremium/annotations/HideGetPremiumCompatibility.kt index f17ebada9..ab47ce705 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/ad/getpremium/annotations/HideGetPremiumCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/ad/getpremium/annotations/HideGetPremiumCompatibility.kt @@ -3,6 +3,6 @@ package app.revanced.patches.youtube.ad.getpremium.annotations import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class HideGetPremiumCompatibility diff --git a/src/main/kotlin/app/revanced/patches/youtube/ad/video/annotations/VideoAdsCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/ad/video/annotations/VideoAdsCompatibility.kt index 9226b6f44..82f465ccf 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/ad/video/annotations/VideoAdsCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/ad/video/annotations/VideoAdsCompatibility.kt @@ -3,7 +3,7 @@ package app.revanced.patches.youtube.ad.video.annotations import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class VideoAdsCompatibility diff --git a/src/main/kotlin/app/revanced/patches/youtube/interaction/copyvideourl/annotation/CopyVideoUrlCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/interaction/copyvideourl/annotation/CopyVideoUrlCompatibility.kt index 93058c896..08059a5c6 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/interaction/copyvideourl/annotation/CopyVideoUrlCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/interaction/copyvideourl/annotation/CopyVideoUrlCompatibility.kt @@ -3,6 +3,6 @@ package app.revanced.patches.youtube.interaction.copyvideourl.annotation import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class CopyVideoUrlCompatibility \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/interaction/downloads/annotation/ExternalDownloadsCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/interaction/downloads/annotation/ExternalDownloadsCompatibility.kt index be32f73c8..32dcf7895 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/interaction/downloads/annotation/ExternalDownloadsCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/interaction/downloads/annotation/ExternalDownloadsCompatibility.kt @@ -3,7 +3,7 @@ package app.revanced.patches.youtube.interaction.downloads.annotation import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class ExternalDownloadsCompatibility diff --git a/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/annotation/SeekbarTappingCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/annotation/SeekbarTappingCompatibility.kt index cd1b8ca07..1620ba1d9 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/annotation/SeekbarTappingCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/interaction/seekbar/annotation/SeekbarTappingCompatibility.kt @@ -3,7 +3,7 @@ package app.revanced.patches.youtube.interaction.seekbar.annotation import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class SeekbarTappingCompatibility diff --git a/src/main/kotlin/app/revanced/patches/youtube/interaction/swipecontrols/annotation/SwipeControlsCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/interaction/swipecontrols/annotation/SwipeControlsCompatibility.kt index ad2ec1770..f9c0e21df 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/interaction/swipecontrols/annotation/SwipeControlsCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/interaction/swipecontrols/annotation/SwipeControlsCompatibility.kt @@ -3,6 +3,6 @@ package app.revanced.patches.youtube.interaction.swipecontrols.annotation import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class SwipeControlsCompatibility diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/alternativethumbnails/annotations/AlternativeThumbnailsCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/alternativethumbnails/annotations/AlternativeThumbnailsCompatibility.kt index 1809f7571..fb59218d1 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/alternativethumbnails/annotations/AlternativeThumbnailsCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/alternativethumbnails/annotations/AlternativeThumbnailsCompatibility.kt @@ -3,6 +3,6 @@ package app.revanced.patches.youtube.layout.alternativethumbnails.annotations import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class AlternativeThumbnailsCompatibility diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/autocaptions/annotations/AutoCaptionsCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/autocaptions/annotations/AutoCaptionsCompatibility.kt index 81fb60d32..6e03a64cd 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/autocaptions/annotations/AutoCaptionsCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/autocaptions/annotations/AutoCaptionsCompatibility.kt @@ -3,6 +3,6 @@ package app.revanced.patches.youtube.layout.autocaptions.annotations import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class AutoCaptionsCompatibility diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/action/annotations/HideButtonsCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/action/annotations/HideButtonsCompatibility.kt index 1c521c547..f89eec401 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/action/annotations/HideButtonsCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/action/annotations/HideButtonsCompatibility.kt @@ -3,6 +3,6 @@ package app.revanced.patches.youtube.layout.buttons.action.annotations import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class HideButtonsCompatibility diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/autoplay/annotations/AutoplayButtonCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/autoplay/annotations/AutoplayButtonCompatibility.kt index bb95ff038..f9c4f273f 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/autoplay/annotations/AutoplayButtonCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/autoplay/annotations/AutoplayButtonCompatibility.kt @@ -3,6 +3,6 @@ package app.revanced.patches.youtube.layout.buttons.autoplay.annotations import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class AutoplayButtonCompatibility diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/captions/annotations/HideCaptionsButtonCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/captions/annotations/HideCaptionsButtonCompatibility.kt index fc1e112a0..13f506a50 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/captions/annotations/HideCaptionsButtonCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/captions/annotations/HideCaptionsButtonCompatibility.kt @@ -3,6 +3,6 @@ package app.revanced.patches.youtube.layout.buttons.captions.annotations import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class HideCaptionsButtonCompatibility diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/annotations/NavigationButtonsCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/annotations/NavigationButtonsCompatibility.kt index 393ac1366..a670b440b 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/annotations/NavigationButtonsCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/navigation/annotations/NavigationButtonsCompatibility.kt @@ -3,6 +3,6 @@ package app.revanced.patches.youtube.layout.buttons.navigation.annotations import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class NavigationButtonsCompatibility \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/player/hide/annotations/HidePlayerButtonsCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/player/hide/annotations/HidePlayerButtonsCompatibility.kt index 15330096c..56cff42a3 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/player/hide/annotations/HidePlayerButtonsCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/buttons/player/hide/annotations/HidePlayerButtonsCompatibility.kt @@ -3,6 +3,6 @@ package app.revanced.patches.youtube.layout.buttons.player.hide.annotations import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class HidePlayerButtonsCompatibility \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/albumcards/annotations/AlbumCardsCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/albumcards/annotations/AlbumCardsCompatibility.kt index 889695eaa..f88e4d6ab 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/albumcards/annotations/AlbumCardsCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/albumcards/annotations/AlbumCardsCompatibility.kt @@ -3,6 +3,6 @@ package app.revanced.patches.youtube.layout.hide.albumcards.annotations import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class AlbumCardsCompatibility diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/breakingnews/annotations/BreakingNewsCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/breakingnews/annotations/BreakingNewsCompatibility.kt index 635820ab5..83a719a6a 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/breakingnews/annotations/BreakingNewsCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/breakingnews/annotations/BreakingNewsCompatibility.kt @@ -3,6 +3,6 @@ package app.revanced.patches.youtube.layout.hide.breakingnews.annotations import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class BreakingNewsCompatibility diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/comments/annotations/HideCommentsCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/comments/annotations/HideCommentsCompatibility.kt index 6d8b3b3e3..c7592af36 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/comments/annotations/HideCommentsCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/comments/annotations/HideCommentsCompatibility.kt @@ -3,6 +3,6 @@ package app.revanced.patches.youtube.layout.hide.comments.annotations import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class HideCommentsCompatibility diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/crowdfundingbox/annotations/CrowdfundingBoxCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/crowdfundingbox/annotations/CrowdfundingBoxCompatibility.kt index fe6894aa3..878b804c2 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/crowdfundingbox/annotations/CrowdfundingBoxCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/crowdfundingbox/annotations/CrowdfundingBoxCompatibility.kt @@ -3,6 +3,6 @@ package app.revanced.patches.youtube.layout.hide.crowdfundingbox.annotations import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class CrowdfundingBoxCompatibility diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/endscreencards/annotations/HideEndscreenCardsCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/endscreencards/annotations/HideEndscreenCardsCompatibility.kt index 206275896..b3ee8f340 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/endscreencards/annotations/HideEndscreenCardsCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/endscreencards/annotations/HideEndscreenCardsCompatibility.kt @@ -3,6 +3,6 @@ package app.revanced.patches.youtube.layout.hide.endscreencards.annotations import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class HideEndscreenCardsCompatibility diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/filterbar/annotations/HideFilterBar.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/filterbar/annotations/HideFilterBar.kt index 95aa29f64..2503c47c4 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/filterbar/annotations/HideFilterBar.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/filterbar/annotations/HideFilterBar.kt @@ -3,6 +3,6 @@ package app.revanced.patches.youtube.layout.hide.filterbar.annotations import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class HideFilterBar \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/floatingmicrophone/annotations/HideFloatingMicrophoneButtonCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/floatingmicrophone/annotations/HideFloatingMicrophoneButtonCompatibility.kt index b5f04f78a..9f7e8d362 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/floatingmicrophone/annotations/HideFloatingMicrophoneButtonCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/floatingmicrophone/annotations/HideFloatingMicrophoneButtonCompatibility.kt @@ -3,6 +3,6 @@ package app.revanced.patches.youtube.layout.hide.floatingmicrophone.annotations import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class HideFloatingMicrophoneButtonCompatibility diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/general/annotations/HideLayoutComponentsCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/general/annotations/HideLayoutComponentsCompatibility.kt index a685bf3ee..464cfbad5 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/general/annotations/HideLayoutComponentsCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/general/annotations/HideLayoutComponentsCompatibility.kt @@ -3,7 +3,7 @@ package app.revanced.patches.youtube.layout.hide.general.annotations import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class HideLayoutComponentsCompatibility diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/infocards/annotations/HideInfocardsCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/infocards/annotations/HideInfocardsCompatibility.kt index 520f038f6..b42ccbe21 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/infocards/annotations/HideInfocardsCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/infocards/annotations/HideInfocardsCompatibility.kt @@ -3,6 +3,6 @@ package app.revanced.patches.youtube.layout.hide.infocards.annotations import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class HideInfocardsCompatibility diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/loadmorebutton/annotations/HideLoadMoreButtonCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/loadmorebutton/annotations/HideLoadMoreButtonCompatibility.kt index a9c4bcea7..2d567f24f 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/loadmorebutton/annotations/HideLoadMoreButtonCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/loadmorebutton/annotations/HideLoadMoreButtonCompatibility.kt @@ -3,7 +3,7 @@ package app.revanced.patches.youtube.layout.hide.loadmorebutton.annotations import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class HideLoadMoreButtonCompatibility diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/personalinformation/annotations/HideEmailAddressCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/personalinformation/annotations/HideEmailAddressCompatibility.kt index 3d7193394..db0303d2e 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/personalinformation/annotations/HideEmailAddressCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/personalinformation/annotations/HideEmailAddressCompatibility.kt @@ -3,6 +3,6 @@ package app.revanced.patches.youtube.layout.hide.personalinformation.annotations import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class HideEmailAddressCompatibility diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/player/flyoutmenupanel/annotations/HidePlayerFlyoutMenuItemsCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/player/flyoutmenupanel/annotations/HidePlayerFlyoutMenuItemsCompatibility.kt index c9dcebc19..b988fce96 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/player/flyoutmenupanel/annotations/HidePlayerFlyoutMenuItemsCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/player/flyoutmenupanel/annotations/HidePlayerFlyoutMenuItemsCompatibility.kt @@ -3,6 +3,6 @@ package app.revanced.patches.youtube.layout.hide.player.flyoutmenupanel.annotati import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class HidePlayerFlyoutMenuItemsCompatibility diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/seekbar/annotations/HideSeekbarCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/seekbar/annotations/HideSeekbarCompatibility.kt index 784fa8611..6cff26102 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/seekbar/annotations/HideSeekbarCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/seekbar/annotations/HideSeekbarCompatibility.kt @@ -3,6 +3,6 @@ package app.revanced.patches.youtube.layout.hide.seekbar.annotations import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class HideSeekbarCompatibility \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/annotations/HideShortsComponentsCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/annotations/HideShortsComponentsCompatibility.kt index e434846d0..4987edc8c 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/annotations/HideShortsComponentsCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/shorts/annotations/HideShortsComponentsCompatibility.kt @@ -3,6 +3,6 @@ package app.revanced.patches.youtube.layout.hide.shorts.annotations import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class HideShortsComponentsCompatibility diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/time/annotations/HideTimeCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/time/annotations/HideTimeCompatibility.kt index baa9be5ff..269c67cc0 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/time/annotations/HideTimeCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/time/annotations/HideTimeCompatibility.kt @@ -3,6 +3,6 @@ package app.revanced.patches.youtube.layout.hide.time.annotations import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class HideTimeCompatibility \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/watermark/annotations/HideWatermarkCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/watermark/annotations/HideWatermarkCompatibility.kt index 687b50654..72614b825 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/hide/watermark/annotations/HideWatermarkCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/hide/watermark/annotations/HideWatermarkCompatibility.kt @@ -3,6 +3,6 @@ package app.revanced.patches.youtube.layout.hide.watermark.annotations import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class HideWatermarkCompatibility diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/panels/popup/annotations/PlayerPopupPanelsCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/panels/popup/annotations/PlayerPopupPanelsCompatibility.kt index e6da79902..241cbbad1 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/panels/popup/annotations/PlayerPopupPanelsCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/panels/popup/annotations/PlayerPopupPanelsCompatibility.kt @@ -3,6 +3,6 @@ package app.revanced.patches.youtube.layout.panels.popup.annotations import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class PlayerPopupPanelsCompatibility diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/player/background/annotations/PlayerControlsBackgroundCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/player/background/annotations/PlayerControlsBackgroundCompatibility.kt index d7e6490f9..8b0ebe14a 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/player/background/annotations/PlayerControlsBackgroundCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/player/background/annotations/PlayerControlsBackgroundCompatibility.kt @@ -2,6 +2,6 @@ package app.revanced.patches.youtube.layout.player.background.annotations import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class PlayerControlsBackgroundCompatibility diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/annotations/ReturnYouTubeDislikeCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/annotations/ReturnYouTubeDislikeCompatibility.kt index 5f3dd157e..4d12fe227 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/annotations/ReturnYouTubeDislikeCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/returnyoutubedislike/annotations/ReturnYouTubeDislikeCompatibility.kt @@ -3,6 +3,6 @@ package app.revanced.patches.youtube.layout.returnyoutubedislike.annotations import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class ReturnYouTubeDislikeCompatibility \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/searchbar/annotations/WideSearchbarCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/searchbar/annotations/WideSearchbarCompatibility.kt index 1fe97fe00..a9b3ffd4c 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/searchbar/annotations/WideSearchbarCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/searchbar/annotations/WideSearchbarCompatibility.kt @@ -3,6 +3,6 @@ package app.revanced.patches.youtube.layout.searchbar.annotations import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class WideSearchbarCompatibility \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/sponsorblock/annotations/SponsorBlockCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/sponsorblock/annotations/SponsorBlockCompatibility.kt index 7eefbbd53..02686a334 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/sponsorblock/annotations/SponsorBlockCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/sponsorblock/annotations/SponsorBlockCompatibility.kt @@ -3,6 +3,6 @@ package app.revanced.patches.youtube.layout.sponsorblock.annotations import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class SponsorBlockCompatibility \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/spoofappversion/annotations/SpoofAppVersionCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/spoofappversion/annotations/SpoofAppVersionCompatibility.kt index 04740e6fb..902d31fd6 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/spoofappversion/annotations/SpoofAppVersionCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/spoofappversion/annotations/SpoofAppVersionCompatibility.kt @@ -3,7 +3,7 @@ package app.revanced.patches.youtube.layout.spoofappversion.annotations import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class SpoofAppVersionCompatibility diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/startupshortsreset/annotations/StartupShortsResetCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/startupshortsreset/annotations/StartupShortsResetCompatibility.kt index 9b2022792..5f678f4a1 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/startupshortsreset/annotations/StartupShortsResetCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/startupshortsreset/annotations/StartupShortsResetCompatibility.kt @@ -3,6 +3,6 @@ package app.revanced.patches.youtube.layout.startupshortsreset.annotations import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class StartupShortsResetCompatibility diff --git a/src/main/kotlin/app/revanced/patches/youtube/layout/tabletminiplayer/annotations/TabletMiniPlayerCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/layout/tabletminiplayer/annotations/TabletMiniPlayerCompatibility.kt index 4284c94d0..e7786f084 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/layout/tabletminiplayer/annotations/TabletMiniPlayerCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/layout/tabletminiplayer/annotations/TabletMiniPlayerCompatibility.kt @@ -3,6 +3,6 @@ package app.revanced.patches.youtube.layout.tabletminiplayer.annotations import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class TabletMiniPlayerCompatibility diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/autorepeat/annotations/AutoRepeatCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/autorepeat/annotations/AutoRepeatCompatibility.kt index b4b62674c..a3af8bde7 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/autorepeat/annotations/AutoRepeatCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/autorepeat/annotations/AutoRepeatCompatibility.kt @@ -3,6 +3,6 @@ package app.revanced.patches.youtube.misc.autorepeat.annotations import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class AutoRepeatCompatibility \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/fix/backtoexitgesture/annotation/FixBackToExitGestureCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/fix/backtoexitgesture/annotation/FixBackToExitGestureCompatibility.kt index bce548f11..1d957c6cc 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/fix/backtoexitgesture/annotation/FixBackToExitGestureCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/fix/backtoexitgesture/annotation/FixBackToExitGestureCompatibility.kt @@ -3,6 +3,6 @@ package app.revanced.patches.youtube.misc.fix.backtoexitgesture.annotation import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class FixBackToExitGestureCompatibility \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/annotations/ClientSpoofCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/annotations/ClientSpoofCompatibility.kt index 24c49518a..1976a2ad8 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/annotations/ClientSpoofCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/fix/playback/annotations/ClientSpoofCompatibility.kt @@ -3,6 +3,6 @@ package app.revanced.patches.youtube.misc.fix.playback.annotations import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class ClientSpoofCompatibility diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/integrations/annotations/IntegrationsCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/integrations/annotations/IntegrationsCompatibility.kt index 9de9f53c3..3ce5ea428 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/integrations/annotations/IntegrationsCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/integrations/annotations/IntegrationsCompatibility.kt @@ -3,6 +3,6 @@ package app.revanced.patches.youtube.misc.integrations.annotations import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class IntegrationsCompatibility \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/links/open/annotations/OpenLinksExternallyCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/links/open/annotations/OpenLinksExternallyCompatibility.kt index 233b8ce6a..2a241e89d 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/links/open/annotations/OpenLinksExternallyCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/links/open/annotations/OpenLinksExternallyCompatibility.kt @@ -3,6 +3,6 @@ package app.revanced.patches.youtube.misc.links.open.annotations import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class OpenLinksExternallyCompatibility diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/microg/annotations/MicroGPatchCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/microg/annotations/MicroGPatchCompatibility.kt index 30383fbf3..462c02ae3 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/microg/annotations/MicroGPatchCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/microg/annotations/MicroGPatchCompatibility.kt @@ -3,6 +3,6 @@ package app.revanced.patches.youtube.misc.microg.annotations import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class MicroGPatchCompatibility \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/minimizedplayback/annotations/MinimizedPlaybackCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/minimizedplayback/annotations/MinimizedPlaybackCompatibility.kt index 782a7709c..8ebb74654 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/minimizedplayback/annotations/MinimizedPlaybackCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/minimizedplayback/annotations/MinimizedPlaybackCompatibility.kt @@ -3,6 +3,6 @@ package app.revanced.patches.youtube.misc.minimizedplayback.annotations import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class MinimizedPlaybackCompatibility \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/playercontrols/annotation/PlayerControlsCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/playercontrols/annotation/PlayerControlsCompatibility.kt index 311f48506..8df52bb48 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/playercontrols/annotation/PlayerControlsCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/playercontrols/annotation/PlayerControlsCompatibility.kt @@ -3,6 +3,6 @@ package app.revanced.patches.youtube.misc.playercontrols.annotation import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class PlayerControlsCompatibility \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/playeroverlay/annotation/PlayerOverlaysHookCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/playeroverlay/annotation/PlayerOverlaysHookCompatibility.kt index f65f81708..ccdeb53d0 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/playeroverlay/annotation/PlayerOverlaysHookCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/playeroverlay/annotation/PlayerOverlaysHookCompatibility.kt @@ -3,6 +3,6 @@ package app.revanced.patches.youtube.misc.playeroverlay.annotation import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class PlayerOverlaysHookCompatibility diff --git a/src/main/kotlin/app/revanced/patches/youtube/misc/playertype/annotation/PlayerTypeHookCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/misc/playertype/annotation/PlayerTypeHookCompatibility.kt index 8630c376b..2b9636ebd 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/misc/playertype/annotation/PlayerTypeHookCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/misc/playertype/annotation/PlayerTypeHookCompatibility.kt @@ -3,6 +3,6 @@ package app.revanced.patches.youtube.misc.playertype.annotation import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class PlayerTypeHookCompatibility diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/hdrbrightness/annotations/HDRBrightnessCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/video/hdrbrightness/annotations/HDRBrightnessCompatibility.kt index 85bb22dcf..528cbb06a 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/hdrbrightness/annotations/HDRBrightnessCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/video/hdrbrightness/annotations/HDRBrightnessCompatibility.kt @@ -3,6 +3,6 @@ package app.revanced.patches.youtube.video.hdrbrightness.annotations import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class HDRBrightnessCompatibility diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/information/annotation/VideoInformationCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/video/information/annotation/VideoInformationCompatibility.kt index 1b52f4df0..4b98c6eed 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/information/annotation/VideoInformationCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/video/information/annotation/VideoInformationCompatibility.kt @@ -3,6 +3,6 @@ package app.revanced.patches.youtube.video.information.annotation import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class VideoInformationCompatibility diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/quality/annotations/RememberVideoQualityCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/video/quality/annotations/RememberVideoQualityCompatibility.kt index deb0185e9..3994b11b4 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/quality/annotations/RememberVideoQualityCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/video/quality/annotations/RememberVideoQualityCompatibility.kt @@ -3,6 +3,6 @@ package app.revanced.patches.youtube.video.quality.annotations import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class RememberVideoQualityCompatibility diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/speed/PlaybackSpeedCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/video/speed/PlaybackSpeedCompatibility.kt index 2181dc918..0dc7b8b35 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/speed/PlaybackSpeedCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/video/speed/PlaybackSpeedCompatibility.kt @@ -3,6 +3,6 @@ package app.revanced.patches.youtube.video.speed import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class PlaybackSpeedCompatibility diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/videoid/annotation/VideoIdCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/video/videoid/annotation/VideoIdCompatibility.kt index a5fa69c6f..fe28a8930 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/videoid/annotation/VideoIdCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/video/videoid/annotation/VideoIdCompatibility.kt @@ -3,6 +3,6 @@ package app.revanced.patches.youtube.video.videoid.annotation import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.16.37", "18.19.35", "18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class VideoIdCompatibility diff --git a/src/main/kotlin/app/revanced/patches/youtube/video/videoqualitymenu/annotations/OldVideoQualityMenuCompatibility.kt b/src/main/kotlin/app/revanced/patches/youtube/video/videoqualitymenu/annotations/OldVideoQualityMenuCompatibility.kt index 5fe280f94..c8f0f04ef 100644 --- a/src/main/kotlin/app/revanced/patches/youtube/video/videoqualitymenu/annotations/OldVideoQualityMenuCompatibility.kt +++ b/src/main/kotlin/app/revanced/patches/youtube/video/videoqualitymenu/annotations/OldVideoQualityMenuCompatibility.kt @@ -3,6 +3,6 @@ package app.revanced.patches.youtube.video.videoqualitymenu.annotations import app.revanced.patcher.annotation.Compatibility import app.revanced.patcher.annotation.Package -@Compatibility([Package("com.google.android.youtube", arrayOf("18.20.39", "18.23.35"))]) +@Compatibility([Package("com.google.android.youtube", arrayOf("18.20.39", "18.23.35", "18.29.38"))]) @Target(AnnotationTarget.CLASS) internal annotation class OldVideoQualityMenuCompatibility \ No newline at end of file From dba0d0c1ae354327e5c76477905e0619710a6d4c Mon Sep 17 00:00:00 2001 From: oSumAtrIX Date: Sat, 19 Aug 2023 01:50:29 +0200 Subject: [PATCH 43/67] build(Needs bump): Bump dependencies --- build.gradle.kts | 2 +- .../app/revanced/extensions/Extensions.kt | 25 ++++++++--- .../kotlin/app/revanced/meta/JsonGenerator.kt | 3 -- .../app/revanced/meta/PatchesFileGenerator.kt | 19 ++++---- .../patch/ExportAllActivitiesPatch.kt | 8 +--- .../patch/PredictiveBackGesturePatch.kt | 6 +-- .../patch/EnableAndroidDebuggingPatch.kt | 4 +- .../patch/OverrideCertificatePinningPatch.kt | 8 +--- .../patch/ChangePackageNamePatch.kt | 6 +-- .../RemoveCaptureRestrictionResourcePatch.kt | 6 +-- .../misc/pro/patch/ProUnlockPatch.kt | 8 +--- .../candylinkvpn/patch/UnlockProPatch.kt | 8 +--- .../patch/BootloaderDetectionPatch.kt | 8 +--- .../root/patch/RootDetectionPatch.kt | 8 +--- .../patch/RemoveDeviceRestrictions.kt | 8 +--- .../hexeditor/ad/patch/HexEditorAdsPatch.kt | 6 +-- .../misc/pro/patch/UnlockProPatch.kt | 6 +-- .../root/patch/RootDetectionPatch.kt | 6 +-- .../signature/patch/SpoofSignaturePatch.kt | 5 +-- .../inshorts/ad/patch/InshortsAdsPatch.kt | 8 +--- .../timeline/patch/HideTimelineAdsPatch.kt | 12 ++---- .../patches/irplus/ad/patch/IrplusAdsPatch.kt | 6 +-- .../login/patch/DisableMandatoryLoginPatch.kt | 6 +-- .../misc/premium/patch/UnlockPremiumPatch.kt | 6 +-- .../license/patch/LicenseValidationPatch.kt | 6 +-- .../patch/SignatureVerificationPatch.kt | 6 +-- .../misc/pro/patch/UnlockProVersionPatch.kt | 6 +-- .../ads/inbox/patch/HideInboxAdsPatch.kt | 8 +--- ...tchingEmojiToStickerInMessageInputField.kt | 6 +-- .../patch/DisableTypingIndicator.kt | 6 +-- .../moneymanager/patch/UnlockProPatch.kt | 5 +-- .../ad/video/patch/MusicVideoAdsPatch.kt | 6 +-- .../audio/codecs/patch/CodecsUnlockPatch.kt | 7 +-- .../patch/ExclusiveAudioPatch.kt | 6 +-- .../patch/PermanentRepeatPatch.kt | 8 +--- .../patch/PermanentShufflePatch.kt | 8 +--- .../compactheader/patch/CompactHeaderPatch.kt | 6 +-- .../patch/MinimizedPlaybackPatch.kt | 6 +-- .../premium/patch/HideGetPremiumPatch.kt | 6 +-- .../patch/RemoveUpgradeButtonPatch.kt | 5 +-- .../patch/BypassCertificateChecksPatch.kt | 8 +--- .../patch/bytecode/MicroGBytecodePatch.kt | 43 +++++++++---------- .../patch/resource/MicroGResourcePatch.kt | 5 +-- .../patch/BackgroundPlayPatch.kt | 6 +-- .../misc/pro/patch/UnlockProPatch.kt | 6 +-- .../patch/RemoveBroadcastsRestrictionPatch.kt | 6 +-- .../misc/pro/patch/UnlockProPatch.kt | 8 +--- .../nyx/misc/pro/patch/UnlockProPatch.kt | 6 +-- .../patch/SignatureDetectionPatch.kt | 6 +-- .../misc/unlockplus/patch/UnlockPlusPatch.kt | 8 +--- .../patches/pixiv/ads/patch/HideAdsPatch.kt | 8 +--- .../reddit/ad/banner/patch/HideBannerPatch.kt | 6 +-- .../ad/comments/patch/HideCommentAdsPatch.kt | 5 +-- .../reddit/ad/general/patch/HideAdsPatch.kt | 6 +-- .../customclients/AbstractSpoofClientPatch.kt | 26 +++++------ .../baconreader/api/patch/SpoofClientPatch.kt | 6 +-- .../api/patch/SpoofClientPatch.kt | 6 +-- .../api/patch/SpoofClientPatch.kt | 6 +-- .../ads/patch/DisableAdsPatch.kt | 8 +--- .../api/patch/SpoofClientPatch.kt | 6 +-- .../patch/DisablePiracyDetectionPatch.kt | 8 +--- .../redditisfun/api/patch/SpoofClientPatch.kt | 10 +---- .../api/patch/SpoofClientPatch.kt | 6 +-- .../slide/api/patch/SpoofClientPatch.kt | 6 +-- .../ads/patch/DisableAdsPatch.kt | 8 +--- .../DisableSyncForLemmyBottomSheetPatch.kt | 6 +-- .../api/patch/SpoofClientPatch.kt | 8 +--- .../patch/DisablePiracyDetectionPatch.kt | 6 +-- .../patch/DisableScreenshotPopupPatch.kt | 8 +--- .../premiumicon/patch/PremiumIconPatch.kt | 5 +-- .../url/patch/SanitizeUrlQueryPatch.kt | 8 +--- .../patch/RemoveDebuggingDetectionPatch.kt | 5 +-- .../patch/AbstractIntegrationsPatch.kt | 29 ++++--------- .../misc/patch/ResourceMappingPatch.kt | 6 +-- .../patch/VerticalScrollPatch.kt | 8 +--- .../patch/AbstractSettingsResourcePatch.kt | 8 +--- .../songpal/badge/patch/BadgeTabPatch.kt | 8 +--- .../patch/RemoveNotificationBadgePatch.kt | 8 +--- .../spotify/layout/theme/patch/ThemePatch.kt | 8 ++-- .../lite/ondemand/patch/OnDemandPatch.kt | 7 +-- .../patch/PremiumNavbarTabPatch.kt | 6 +-- .../themeunlock/patch/UnlockThemePatch.kt | 6 +-- .../patches/tiktok/ad/patch/HideAdsPatch.kt | 9 ++-- .../feedfilter/patch/FeedFilterPatch.kt | 5 +-- .../downloads/patch/DownloadsPatch.kt | 10 ++--- .../seekbar/patch/ShowSeekbarPatch.kt | 7 +-- .../speed/patch/PlaybackSpeedPatch.kt | 6 +-- .../patch/DisableLoginRequirementPatch.kt | 5 +-- .../fixgoogle/patch/FixGoogleLoginPatch.kt | 5 +-- .../misc/settings/patch/SettingsPatch.kt | 14 +++--- .../misc/spoof/sim/patch/SpoofSimPatch.kt | 6 +-- .../patches/trakt/patch/UnlockProPatch.kt | 10 ++--- .../unlock/patch/UnlockPaidWidgetsPatch.kt | 8 +--- .../twitch/ad/audio/patch/AudioAdsPatch.kt | 6 +-- .../ad/embedded/patch/EmbeddedAdsPatch.kt | 10 ++--- .../twitch/ad/video/patch/VideoAdsPatch.kt | 12 ++---- .../patch/ShowDeletedMessagesPatch.kt | 12 ++---- .../patch/AutoClaimChannelPointsPatch.kt | 8 +--- .../twitch/debug/patch/DebugModePatch.kt | 8 +--- .../settings/bytecode/patch/SettingsPatch.kt | 14 +++--- .../dynamiccolor/patch/DynamicColorPatch.kt | 10 ++--- .../misc/hook/json/patch/JsonHookPatch.kt | 16 +++---- .../misc/hook/patch/BaseHookPatchPatch.kt | 9 +--- .../vsco/misc/pro/patch/UnlockProPatch.kt | 8 +--- .../patch/FirebaseGetCertPatch.kt | 6 +-- .../promocode/patch/PromoCodeUnlockPatch.kt | 6 +-- .../misc/unlockpro/patch/UnlockProPatch.kt | 6 +-- .../ad/general/bytecode/patch/HideAdsPatch.kt | 6 +-- .../resource/patch/HideAdsResourcePatch.kt | 6 +-- .../HideGetPremiumVideoAdvertisementPatch.kt | 8 +--- .../youtube/ad/video/patch/VideoAdsPatch.kt | 6 +-- .../patch/CopyVideoUrlBytecodePatch.kt | 6 +-- .../patch/CopyVideoUrlResourcePatch.kt | 6 +-- .../patch/ExternalDownloadsBytecodePatch.kt | 6 +-- .../patch/ExternalDownloadsResourcePatch.kt | 6 +-- .../patch/EnableSeekbarTappingPatch.kt | 10 ++--- .../EnableSeekbarTappingResourcePatch.kt | 5 +-- .../bytecode/SwipeControlsBytecodePatch.kt | 7 +-- .../resource/SwipeControlsResourcePatch.kt | 5 +-- .../autocaptions/patch/AutoCaptionsPatch.kt | 6 +-- .../header/patch/PremiumHeadingPatch.kt | 12 ++---- .../icon/patch/CustomBrandingPatch.kt | 4 +- .../buttons/action/patch/HideButtonsPatch.kt | 6 +-- .../autoplay/patch/HideAutoplayButtonPatch.kt | 8 +--- .../captions/patch/HideCaptionsButtonPatch.kt | 6 +-- .../buttons/cast/patch/HideCastButtonPatch.kt | 12 ++---- .../patch/NavigationButtonsPatch.kt | 11 ++--- .../patch/ResolvePivotBarFingerprintsPatch.kt | 13 +++--- .../hide/patch/HidePlayerButtonsPatch.kt | 7 +-- .../bytecode/patch/AlbumCardsPatch.kt | 8 +--- .../resource/patch/AlbumCardsResourcePatch.kt | 6 +-- .../bytecode/patch/BreakingNewsPatch.kt | 8 +--- .../patch/BreakingNewsResourcePatch.kt | 6 +-- .../hide/comments/patch/CommentsPatch.kt | 6 +-- .../bytecode/patch/CrowdfundingBoxPatch.kt | 8 +--- .../patch/CrowdfundingBoxResourcePatch.kt | 6 +-- .../bytecode/patch/HideEndscreenCardsPatch.kt | 6 +-- .../patch/HideEndscreenCardsResourcePatch.kt | 6 +-- .../filterbar/patch/HideFilterBarPatch.kt | 6 +-- .../patch/HideFilterBarResourcePatch.kt | 6 +-- .../HideFloatingMicrophoneButtonPatch.kt | 8 +--- ...deFloatingMicrophoneButtonResourcePatch.kt | 9 ++-- .../patch/HideLayoutComponentsPatch.kt | 8 +--- .../infocards/patch/HideInfoCardsPatch.kt | 6 +-- .../patch/HideInfocardsResourcePatch.kt | 6 +-- .../bytecode/patch/HideLoadMoreButtonPatch.kt | 8 +--- .../patch/HideLoadMoreButtonResourcePatch.kt | 6 +-- .../bytecode/patch/HideEmailAddressPatch.kt | 8 +--- .../patch/HideEmailAddressResourcePatch.kt | 6 +-- .../patch/HidePlayerFlyoutMenuPatch.kt | 6 +-- .../bytecode/patch/HidePlayerOverlayPatch.kt | 8 +--- .../patch/HidePlayerOverlayResourcePatch.kt | 6 +-- .../hide/seekbar/patch/HideSeekbarPatch.kt | 6 +-- .../patch/HideShortsComponentsPatch.kt | 16 +++---- .../HideShortsComponentsResourcePatch.kt | 6 +-- .../hide/time/patch/HideTimestampPatch.kt | 8 +--- .../watermark/patch/HideWatermarkPatch.kt | 10 ++--- .../popup/patch/PlayerPopupPanelsPatch.kt | 8 +--- .../patch/PlayerControlsBackgroundPatch.kt | 6 +-- .../patch/ReturnYouTubeDislikePatch.kt | 16 +++---- .../ReturnYouTubeDislikeResourcePatch.kt | 6 +-- .../searchbar/patch/WideSearchbarPatch.kt | 9 +--- .../patch/SeekbarColorBytecodePatch.kt | 13 ++---- .../resource/SeekbarColorResourcePatch.kt | 11 +++-- .../resource/SeekbarPreferencesPatch.kt | 4 +- .../patch/SponsorBlockBytecodePatch.kt | 19 +++----- .../patch/SponsorBlockResourcePatch.kt | 6 +-- .../bytecode/patch/SpoofAppVersionPatch.kt | 8 +--- .../patch/DisableShortsOnStartupPatch.kt | 6 +-- .../patch/TabletMiniPlayerPatch.kt | 15 +++---- .../bytecode/patch/LithoColorHookPatch.kt | 8 +--- .../bytecode/patch/ThemeBytecodePatch.kt | 4 +- .../theme/resource/ThemeResourcePatch.kt | 10 ++--- .../AlternativeThumbnailsCompatibility.kt | 2 +- ...tURLRequestCallbackOnFailureFingerprint.kt | 2 +- ...estCallbackOnResponseStartedFingerprint.kt | 2 +- ...RLRequestCallbackOnSucceededFingerprint.kt | 2 +- .../MessageDigestImageUrlFingerprint.kt | 2 +- .../MessageDigestImageUrlParentFingerprint.kt | 2 +- .../patch/AlternativeThumbnailsPatch.kt | 36 +++++----------- .../misc/autorepeat/patch/AutoRepeatPatch.kt | 13 +++--- .../hook/patch/BottomSheetHookPatch.kt | 8 +--- .../patch/BottomSheetHookResourcePatch.kt | 10 ++--- .../misc/debugging/patch/DebuggingPatch.kt | 6 +-- .../patch/FixBackToExitGesturePatch.kt | 17 ++------ .../fix/playback/patch/ClientSpoofPatch.kt | 8 +--- .../patch/SpoofSignatureVerificationPatch.kt | 15 +++---- ...SpoofSignatureVerificationResourcePatch.kt | 6 +-- .../open/patch/OpenLinksExternallyPatch.kt | 8 +--- .../litho/filter/patch/LithoFilterPatch.kt | 14 +++--- .../patch/bytecode/MicroGBytecodePatch.kt | 6 +-- .../patch/resource/MicroGResourcePatch.kt | 6 +-- .../patch/MinimizedPlaybackPatch.kt | 15 +++---- .../patch/PlayerControlsBytecodePatch.kt | 8 +--- .../patch/BottomControlsResourcePatch.kt | 8 +--- .../patch/PlayerOverlaysHookPatch.kt | 5 +-- .../playertype/patch/PlayerTypeHookPatch.kt | 10 ++--- .../settings/bytecode/patch/SettingsPatch.kt | 8 +--- .../resource/patch/SettingsResourcePatch.kt | 8 +--- .../zoomhaptics/patch/ZoomHapticsPatch.kt | 6 +-- .../hdrbrightness/patch/HDRBrightnessPatch.kt | 6 +-- .../patch/VideoInformationPatch.kt | 9 +--- .../patch/RememberVideoQualityPatch.kt | 20 ++++----- .../youtube/video/speed/PlaybackSpeed.kt | 5 +-- .../custom/patch/CustomPlaybackSpeedPatch.kt | 14 +++--- .../patch/RememberPlaybackSpeedPatch.kt | 8 +--- .../video/videoid/patch/VideoIdPatch.kt | 6 +-- .../patch/OldVideoQualityMenuPatch.kt | 6 +-- .../patch/OldVideoQualityMenuResourcePatch.kt | 10 ++--- .../ad/general/patch/HideAdsPatch.kt | 8 +--- .../unlockpremium/patch/UnlockPremiunPatch.kt | 5 +-- .../util/microg/MicroGBytecodeHelper.kt | 24 +++++------ .../AbstractTransformInstructionsPatch.kt | 6 +-- .../revanced/util/resources/ResourceUtils.kt | 2 +- 214 files changed, 473 insertions(+), 1271 deletions(-) rename src/main/kotlin/app/revanced/patches/all/activity/{exportAll => exportall}/patch/ExportAllActivitiesPatch.kt (84%) rename src/main/kotlin/app/revanced/patches/youtube/layout/{alternativethumbnails => thumbnails}/annotations/AlternativeThumbnailsCompatibility.kt (79%) rename src/main/kotlin/app/revanced/patches/youtube/layout/{alternativethumbnails/bytecode => thumbnails}/fingerprints/CronetURLRequestCallbackOnFailureFingerprint.kt (85%) rename src/main/kotlin/app/revanced/patches/youtube/layout/{alternativethumbnails/bytecode => thumbnails}/fingerprints/CronetURLRequestCallbackOnResponseStartedFingerprint.kt (88%) rename src/main/kotlin/app/revanced/patches/youtube/layout/{alternativethumbnails/bytecode => thumbnails}/fingerprints/CronetURLRequestCallbackOnSucceededFingerprint.kt (85%) rename src/main/kotlin/app/revanced/patches/youtube/layout/{alternativethumbnails/bytecode => thumbnails}/fingerprints/MessageDigestImageUrlFingerprint.kt (79%) rename src/main/kotlin/app/revanced/patches/youtube/layout/{alternativethumbnails/bytecode => thumbnails}/fingerprints/MessageDigestImageUrlParentFingerprint.kt (82%) rename src/main/kotlin/app/revanced/patches/youtube/layout/{alternativethumbnails/bytecode => thumbnails}/patch/AlternativeThumbnailsPatch.kt (78%) diff --git a/build.gradle.kts b/build.gradle.kts index 7b7933524..88bcaec7b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -25,7 +25,7 @@ repositories { } dependencies { - implementation("app.revanced:revanced-patcher:13.0.0") + implementation("app.revanced:revanced-patcher:14.0.0") implementation("com.android.tools.smali:smali:3.0.3") // Required because build fails without it. // TODO: Find a way to remove this dependency. diff --git a/src/main/kotlin/app/revanced/extensions/Extensions.kt b/src/main/kotlin/app/revanced/extensions/Extensions.kt index 1998cf1d0..649cf6c28 100644 --- a/src/main/kotlin/app/revanced/extensions/Extensions.kt +++ b/src/main/kotlin/app/revanced/extensions/Extensions.kt @@ -1,9 +1,10 @@ package app.revanced.extensions -import app.revanced.patcher.extensions.MethodFingerprintExtensions.name +import app.revanced.patcher.data.BytecodeContext import app.revanced.patcher.extensions.InstructionExtensions.addInstruction +import app.revanced.patcher.extensions.MethodFingerprintExtensions.name import app.revanced.patcher.fingerprint.method.impl.MethodFingerprint -import app.revanced.patcher.patch.PatchResultError +import app.revanced.patcher.patch.PatchException import app.revanced.patcher.util.proxy.mutableTypes.MutableClass import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod import app.revanced.patches.shared.mapping.misc.patch.ResourceMappingPatch @@ -13,13 +14,12 @@ import com.android.tools.smali.dexlib2.iface.instruction.WideLiteralInstruction import com.android.tools.smali.dexlib2.util.MethodUtil import org.w3c.dom.Node -// TODO: populate this to all patches /** - * Convert a [MethodFingerprint] to a [PatchResultError]. + * Return [PatchException] from a [MethodFingerprint]. * - * @return A [PatchResultError] for the [MethodFingerprint]. + * @return The [PatchException] for the [MethodFingerprint]. */ -internal fun MethodFingerprint.toErrorResult() = PatchResultError("Failed to resolve $name") +internal fun MethodFingerprint.toErrorResult() = PatchException("Failed to resolve $name") /** * Find the [MutableMethod] from a given [Method] in a [MutableClass]. @@ -82,3 +82,16 @@ fun Method.indexOfFirstConstantInstructionValue(constantValue: Long): Int { fun Method.containsConstantInstructionValue(constantValue: Long): Boolean { return indexOfFirstConstantInstructionValue(constantValue) >= 0 } + +/** + * traverse the class hierarchy starting from the given root class + * + * @param targetClass the class to start traversing the class hierarchy from + * @param callback function that is called for every class in the hierarchy + */ +fun BytecodeContext.traverseClassHierarchy(targetClass: MutableClass, callback: MutableClass.() -> Unit) { + callback(targetClass) + this.findClass(targetClass.superclass ?: return)?.mutableClass?.let { + traverseClassHierarchy(it, callback) + } +} \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/meta/JsonGenerator.kt b/src/main/kotlin/app/revanced/meta/JsonGenerator.kt index cebf57d91..3be7793f8 100644 --- a/src/main/kotlin/app/revanced/meta/JsonGenerator.kt +++ b/src/main/kotlin/app/revanced/meta/JsonGenerator.kt @@ -6,7 +6,6 @@ import app.revanced.patcher.extensions.PatchExtensions.description import app.revanced.patcher.extensions.PatchExtensions.include import app.revanced.patcher.extensions.PatchExtensions.options import app.revanced.patcher.extensions.PatchExtensions.patchName -import app.revanced.patcher.extensions.PatchExtensions.version import app.revanced.patcher.patch.PatchOption import com.google.gson.GsonBuilder import java.io.File @@ -17,7 +16,6 @@ internal class JsonGenerator : PatchesFileGenerator { JsonPatch( it.patchName, it.description ?: "This patch has no description.", - it.version ?: "0.0.0", !it.include, it.options?.map { option -> JsonPatch.Option( @@ -48,7 +46,6 @@ internal class JsonGenerator : PatchesFileGenerator { private class JsonPatch( val name: String, val description: String, - val version: String, val excluded: Boolean, val options: Array