├── .editorconfig
├── .gitattributes
├── .github
├── ISSUE_TEMPLATE
│ ├── bug_report.yml
│ ├── config.yml
│ └── feature_request.yml
├── config.yml
├── dependabot.yml
└── workflows
│ ├── build_pull_request.yml
│ ├── open_pull_request.yml
│ ├── pull_strings.yml
│ ├── push_strings.yml
│ ├── release.yml
│ └── update-gradle-wrapper.yml
├── .gitignore
├── .idea
├── .gitignore
├── discord.xml
├── git_toolbox_prj.xml
├── misc.xml
└── vcs.xml
├── .releaserc
├── CHANGELOG.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── assets
├── revanced-headline
│ ├── revanced-headline-vertical-dark.svg
│ └── revanced-headline-vertical-light.svg
└── revanced-logo
│ └── revanced-logo.svg
├── crowdin.yml
├── extensions
├── all
│ └── misc
│ │ ├── adb
│ │ └── hide-adb
│ │ │ ├── build.gradle.kts
│ │ │ └── src
│ │ │ └── main
│ │ │ ├── AndroidManifest.xml
│ │ │ └── java
│ │ │ └── app
│ │ │ └── revanced
│ │ │ └── extension
│ │ │ └── all
│ │ │ └── misc
│ │ │ └── hide
│ │ │ └── adb
│ │ │ └── HideAdbPatch.java
│ │ ├── connectivity
│ │ └── wifi
│ │ │ └── spoof
│ │ │ └── spoof-wifi
│ │ │ ├── build.gradle.kts
│ │ │ └── src
│ │ │ └── main
│ │ │ ├── AndroidManifest.xml
│ │ │ └── java
│ │ │ └── app
│ │ │ └── revanced
│ │ │ └── extension
│ │ │ └── all
│ │ │ └── misc
│ │ │ └── connectivity
│ │ │ └── wifi
│ │ │ └── spoof
│ │ │ └── SpoofWifiPatch.java
│ │ ├── directory
│ │ └── documentsprovider
│ │ │ └── export-internal-data-documents-provider
│ │ │ ├── build.gradle.kts
│ │ │ └── src
│ │ │ └── main
│ │ │ ├── AndroidManifest.xml
│ │ │ └── java
│ │ │ └── app
│ │ │ └── revanced
│ │ │ └── extension
│ │ │ └── all
│ │ │ └── misc
│ │ │ └── directory
│ │ │ └── documentsprovider
│ │ │ └── InternalDataDocumentsProvider.java
│ │ ├── screencapture
│ │ └── remove-screen-capture-restriction
│ │ │ ├── build.gradle.kts
│ │ │ └── src
│ │ │ └── main
│ │ │ ├── AndroidManifest.xml
│ │ │ └── java
│ │ │ └── app
│ │ │ └── revanced
│ │ │ └── extension
│ │ │ └── all
│ │ │ └── misc
│ │ │ └── screencapture
│ │ │ └── removerestriction
│ │ │ └── RemoveScreenCaptureRestrictionPatch.java
│ │ └── screenshot
│ │ └── remove-screenshot-restriction
│ │ ├── build.gradle.kts
│ │ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ └── app
│ │ └── revanced
│ │ └── extension
│ │ └── all
│ │ └── misc
│ │ └── screenshot
│ │ └── removerestriction
│ │ └── RemoveScreenshotRestrictionPatch.java
├── boostforreddit
│ ├── build.gradle.kts
│ ├── src
│ │ └── main
│ │ │ ├── AndroidManifest.xml
│ │ │ └── java
│ │ │ └── app
│ │ │ └── revanced
│ │ │ └── extension
│ │ │ └── boostforreddit
│ │ │ └── FixSLinksPatch.java
│ └── stub
│ │ ├── build.gradle.kts
│ │ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ └── com
│ │ └── rubenmayayo
│ │ └── reddit
│ │ └── ui
│ │ └── activities
│ │ └── WebViewActivity.java
├── messenger
│ ├── build.gradle.kts
│ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ └── app
│ │ └── revanced
│ │ └── extension
│ │ └── messenger
│ │ └── metaai
│ │ └── RemoveMetaAIPatch.java
├── music
│ ├── build.gradle.kts
│ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ └── app
│ │ └── revanced
│ │ └── extension
│ │ └── music
│ │ └── spoof
│ │ └── SpoofClientPatch.java
├── nunl
│ ├── build.gradle.kts
│ ├── src
│ │ └── main
│ │ │ ├── AndroidManifest.xml
│ │ │ └── java
│ │ │ └── app
│ │ │ └── revanced
│ │ │ └── extension
│ │ │ └── nunl
│ │ │ └── ads
│ │ │ └── HideAdsPatch.java
│ └── stub
│ │ ├── build.gradle.kts
│ │ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ └── nl
│ │ └── nu
│ │ └── performance
│ │ └── api
│ │ └── client
│ │ ├── interfaces
│ │ └── Block.java
│ │ ├── objects
│ │ ├── DividerBlock.java
│ │ ├── DpgBannerBlock.java
│ │ ├── HeaderBlock.java
│ │ ├── Link.java
│ │ ├── LinkBlock.java
│ │ └── StyledText.java
│ │ └── unions
│ │ ├── LinkFlavor.java
│ │ └── SmallArticleLinkFlavor.java
├── primevideo
│ ├── build.gradle.kts
│ ├── src
│ │ └── main
│ │ │ ├── AndroidManifest.xml
│ │ │ └── java
│ │ │ └── app
│ │ │ └── revanced
│ │ │ └── extension
│ │ │ └── primevideo
│ │ │ └── ads
│ │ │ └── SkipAdsPatch.java
│ └── stub
│ │ ├── build.gradle.kts
│ │ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ └── com
│ │ └── amazon
│ │ └── avod
│ │ ├── fsm
│ │ ├── SimpleTrigger.java
│ │ ├── StateBase.java
│ │ └── Trigger.java
│ │ └── media
│ │ ├── TimeSpan.java
│ │ ├── ads
│ │ ├── AdBreak.java
│ │ └── internal
│ │ │ └── state
│ │ │ ├── AdBreakState.java
│ │ │ ├── AdBreakTrigger.java
│ │ │ ├── AdEnabledPlaybackState.java
│ │ │ ├── AdEnabledPlayerTriggerType.java
│ │ │ └── ServerInsertedAdBreakState.java
│ │ └── playback
│ │ ├── VideoPlayer.java
│ │ └── state
│ │ ├── PlayerStateType.java
│ │ └── trigger
│ │ └── PlayerTriggerType.java
├── proguard-rules.pro
├── reddit
│ ├── build.gradle.kts
│ ├── src
│ │ └── main
│ │ │ ├── AndroidManifest.xml
│ │ │ └── java
│ │ │ └── app
│ │ │ └── revanced
│ │ │ └── extension
│ │ │ └── reddit
│ │ │ └── patches
│ │ │ └── FilterPromotedLinksPatch.java
│ └── stub
│ │ ├── build.gradle.kts
│ │ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ └── com
│ │ └── reddit
│ │ └── domain
│ │ └── model
│ │ └── ILink.java
├── shared
│ ├── build.gradle.kts
│ ├── library
│ │ ├── build.gradle.kts
│ │ └── src
│ │ │ └── main
│ │ │ └── java
│ │ │ └── app
│ │ │ └── revanced
│ │ │ └── extension
│ │ │ └── shared
│ │ │ ├── GmsCoreSupport.java
│ │ │ ├── Logger.java
│ │ │ ├── StringRef.java
│ │ │ ├── Utils.java
│ │ │ ├── checks
│ │ │ ├── Check.java
│ │ │ ├── CheckEnvironmentPatch.java
│ │ │ └── PatchInfo.java
│ │ │ ├── fixes
│ │ │ └── slink
│ │ │ │ ├── BaseFixSLinksPatch.java
│ │ │ │ └── ResolveResult.java
│ │ │ ├── requests
│ │ │ ├── Requester.java
│ │ │ └── Route.java
│ │ │ ├── settings
│ │ │ ├── AppLanguage.java
│ │ │ ├── BaseSettings.java
│ │ │ ├── BooleanSetting.java
│ │ │ ├── EnumSetting.java
│ │ │ ├── FloatSetting.java
│ │ │ ├── IntegerSetting.java
│ │ │ ├── LongSetting.java
│ │ │ ├── Setting.java
│ │ │ ├── StringSetting.java
│ │ │ └── preference
│ │ │ │ ├── AbstractPreferenceFragment.java
│ │ │ │ ├── ColorPickerPreference.java
│ │ │ │ ├── ColorPickerView.java
│ │ │ │ ├── ImportExportPreference.java
│ │ │ │ ├── LogBufferManager.java
│ │ │ │ ├── NoTitlePreferenceCategory.java
│ │ │ │ ├── ReVancedAboutPreference.java
│ │ │ │ ├── ResettableEditTextPreference.java
│ │ │ │ ├── SharedPrefCategory.java
│ │ │ │ └── SortedListPreference.java
│ │ │ └── spoof
│ │ │ ├── ClientType.java
│ │ │ ├── SpoofVideoStreamsPatch.java
│ │ │ └── requests
│ │ │ ├── PlayerRoutes.java
│ │ │ └── StreamingDataRequest.java
│ └── src
│ │ └── main
│ │ └── AndroidManifest.xml
├── spotify
│ ├── build.gradle.kts
│ ├── src
│ │ └── main
│ │ │ ├── AndroidManifest.xml
│ │ │ └── java
│ │ │ └── app
│ │ │ └── revanced
│ │ │ └── extension
│ │ │ └── spotify
│ │ │ ├── layout
│ │ │ └── theme
│ │ │ │ └── CustomThemePatch.java
│ │ │ └── misc
│ │ │ ├── UnlockPremiumPatch.java
│ │ │ └── privacy
│ │ │ └── SanitizeSharingLinksPatch.java
│ └── stub
│ │ ├── build.gradle.kts
│ │ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ └── com
│ │ └── spotify
│ │ ├── home
│ │ └── evopage
│ │ │ └── homeapi
│ │ │ └── proto
│ │ │ └── Section.java
│ │ ├── remoteconfig
│ │ └── internal
│ │ │ └── AccountAttribute.java
│ │ └── useraccount
│ │ └── v1
│ │ └── AccountAttribute.java
├── syncforreddit
│ ├── build.gradle.kts
│ ├── src
│ │ └── main
│ │ │ ├── AndroidManifest.xml
│ │ │ └── java
│ │ │ └── app
│ │ │ └── revanced
│ │ │ └── extension
│ │ │ └── syncforreddit
│ │ │ ├── FixRedditVideoDownloadPatch.java
│ │ │ └── FixSLinksPatch.java
│ └── stub
│ │ ├── build.gradle.kts
│ │ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ └── com
│ │ └── laurencedawson
│ │ └── reddit_sync
│ │ └── ui
│ │ └── activities
│ │ └── WebViewActivity.java
├── tiktok
│ ├── build.gradle.kts
│ ├── src
│ │ └── main
│ │ │ ├── AndroidManifest.xml
│ │ │ └── java
│ │ │ └── app
│ │ │ └── revanced
│ │ │ └── extension
│ │ │ └── tiktok
│ │ │ ├── Utils.java
│ │ │ ├── cleardisplay
│ │ │ └── RememberClearDisplayPatch.java
│ │ │ ├── download
│ │ │ └── DownloadsPatch.java
│ │ │ ├── feedfilter
│ │ │ ├── AdsFilter.java
│ │ │ ├── FeedItemsFilter.java
│ │ │ ├── IFilter.java
│ │ │ ├── ImageVideoFilter.java
│ │ │ ├── LikeCountFilter.java
│ │ │ ├── LiveFilter.java
│ │ │ ├── ShopFilter.java
│ │ │ ├── StoryFilter.java
│ │ │ └── ViewCountFilter.java
│ │ │ ├── settings
│ │ │ ├── AdPersonalizationActivityHook.java
│ │ │ ├── Settings.java
│ │ │ ├── SettingsStatus.java
│ │ │ └── preference
│ │ │ │ ├── DownloadPathPreference.java
│ │ │ │ ├── InputTextPreference.java
│ │ │ │ ├── RangeValuePreference.java
│ │ │ │ ├── ReVancedPreferenceFragment.java
│ │ │ │ ├── ReVancedTikTokAboutPreference.java
│ │ │ │ ├── TogglePreference.java
│ │ │ │ └── categories
│ │ │ │ ├── ConditionalPreferenceCategory.java
│ │ │ │ ├── DownloadsPreferenceCategory.java
│ │ │ │ ├── ExtensionPreferenceCategory.java
│ │ │ │ ├── FeedFilterPreferenceCategory.java
│ │ │ │ └── SimSpoofPreferenceCategory.java
│ │ │ ├── speed
│ │ │ └── PlaybackSpeedPatch.java
│ │ │ └── spoof
│ │ │ └── sim
│ │ │ └── SpoofSimPatch.java
│ └── stub
│ │ ├── build.gradle.kts
│ │ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ └── com
│ │ ├── bytedance
│ │ └── ies
│ │ │ └── ugc
│ │ │ └── aweme
│ │ │ └── commercialize
│ │ │ └── compliance
│ │ │ └── personalization
│ │ │ └── AdPersonalizationActivity.java
│ │ └── ss
│ │ └── android
│ │ └── ugc
│ │ └── aweme
│ │ ├── feed
│ │ └── model
│ │ │ ├── Aweme.java
│ │ │ ├── AwemeStatistics.java
│ │ │ └── FeedItemList.java
│ │ └── follow
│ │ └── presenter
│ │ ├── FollowFeed.java
│ │ └── FollowFeedList.java
├── tudortmund
│ ├── build.gradle.kts
│ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ └── app
│ │ └── revanced
│ │ └── extension
│ │ └── tudortmund
│ │ └── lockscreen
│ │ └── ShowOnLockscreenPatch.java
├── tumblr
│ ├── build.gradle.kts
│ ├── src
│ │ └── main
│ │ │ ├── AndroidManifest.xml
│ │ │ └── java
│ │ │ └── app
│ │ │ └── revanced
│ │ │ └── extension
│ │ │ └── tumblr
│ │ │ └── patches
│ │ │ └── TimelineFilterPatch.java
│ └── stub
│ │ ├── build.gradle.kts
│ │ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ └── com
│ │ └── tumblr
│ │ └── rumblr
│ │ └── model
│ │ ├── TimelineObject.java
│ │ ├── TimelineObjectType.java
│ │ └── Timelineable.java
├── twitch
│ ├── build.gradle.kts
│ ├── src
│ │ └── main
│ │ │ ├── AndroidManifest.xml
│ │ │ └── java
│ │ │ └── app
│ │ │ └── revanced
│ │ │ └── extension
│ │ │ └── twitch
│ │ │ ├── Utils.java
│ │ │ ├── adblock
│ │ │ ├── IAdblockService.java
│ │ │ ├── LuminousService.java
│ │ │ └── PurpleAdblockService.java
│ │ │ ├── api
│ │ │ ├── PurpleAdblockApi.java
│ │ │ ├── RequestInterceptor.java
│ │ │ └── RetrofitClient.java
│ │ │ ├── patches
│ │ │ ├── AudioAdsPatch.java
│ │ │ ├── AutoClaimChannelPointsPatch.java
│ │ │ ├── DebugModePatch.java
│ │ │ ├── EmbeddedAdsPatch.java
│ │ │ ├── ShowDeletedMessagesPatch.java
│ │ │ └── VideoAdsPatch.java
│ │ │ └── settings
│ │ │ ├── AppCompatActivityHook.java
│ │ │ ├── Settings.java
│ │ │ └── preference
│ │ │ ├── CustomPreferenceCategory.java
│ │ │ └── ReVancedPreferenceFragment.java
│ └── stub
│ │ ├── build.gradle.kts
│ │ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ └── tv
│ │ └── twitch
│ │ └── android
│ │ ├── feature
│ │ └── settings
│ │ │ └── menu
│ │ │ └── SettingsMenuGroup.java
│ │ ├── settings
│ │ └── SettingsActivity.java
│ │ └── shared
│ │ └── chat
│ │ └── util
│ │ └── ClickableUsernameSpan.java
├── twitter
│ ├── build.gradle.kts
│ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ └── app
│ │ └── revanced
│ │ └── twitter
│ │ ├── patches
│ │ ├── hook
│ │ │ ├── json
│ │ │ │ ├── BaseJsonHook.kt
│ │ │ │ ├── JsonHook.kt
│ │ │ │ └── JsonHookPatch.kt
│ │ │ ├── patch
│ │ │ │ ├── Hook.kt
│ │ │ │ ├── ads
│ │ │ │ │ └── HideAdsHook.kt
│ │ │ │ ├── dummy
│ │ │ │ │ └── DummyHook.kt
│ │ │ │ └── recommendation
│ │ │ │ │ └── RecommendedUsersHook.kt
│ │ │ └── twifucker
│ │ │ │ ├── TwiFucker.kt
│ │ │ │ └── TwiFuckerUtils.kt
│ │ └── links
│ │ │ ├── ChangeLinkSharingDomainPatch.java
│ │ │ └── OpenLinksWithAppChooserPatch.java
│ │ └── utils
│ │ ├── json
│ │ └── JsonUtils.kt
│ │ └── stream
│ │ └── StreamUtils.kt
└── youtube
│ ├── build.gradle.kts
│ ├── src
│ └── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ └── app
│ │ └── revanced
│ │ └── extension
│ │ └── youtube
│ │ ├── ByteTrieSearch.java
│ │ ├── Event.kt
│ │ ├── StringTrieSearch.java
│ │ ├── ThemeHelper.java
│ │ ├── TrieSearch.java
│ │ ├── patches
│ │ ├── AccountCredentialsInvalidTextPatch.java
│ │ ├── AlternativeThumbnailsPatch.java
│ │ ├── AutoRepeatPatch.java
│ │ ├── BackgroundPlaybackPatch.java
│ │ ├── BypassImageRegionRestrictionsPatch.java
│ │ ├── BypassURLRedirectsPatch.java
│ │ ├── ChangeFormFactorPatch.java
│ │ ├── ChangeStartPagePatch.java
│ │ ├── CheckWatchHistoryDomainNameResolutionPatch.java
│ │ ├── CopyVideoUrlPatch.java
│ │ ├── CustomPlayerOverlayOpacityPatch.java
│ │ ├── DisableAutoCaptionsPatch.java
│ │ ├── DisableFullscreenAmbientModePatch.java
│ │ ├── DisableHapticFeedbackPatch.java
│ │ ├── DisableHdrPatch.java
│ │ ├── DisablePlayerPopupPanelsPatch.java
│ │ ├── DisablePreciseSeekingGesturePatch.java
│ │ ├── DisableResumingStartupShortsPlayerPatch.java
│ │ ├── DisableRollingNumberAnimationsPatch.java
│ │ ├── DownloadsPatch.java
│ │ ├── EnableDebuggingPatch.java
│ │ ├── ExitFullscreenPatch.java
│ │ ├── FixBackToExitGesturePatch.java
│ │ ├── FixPlaybackSpeedWhilePlayingPatch.java
│ │ ├── ForceOriginalAudioPatch.java
│ │ ├── HideEndScreenSuggestedVideoPatch.java
│ │ ├── HideEndscreenCardsPatch.java
│ │ ├── HideGetPremiumPatch.java
│ │ ├── HideInfoCardsPatch.java
│ │ ├── HidePlayerOverlayButtonsPatch.java
│ │ ├── HideRelatedVideoOverlayPatch.java
│ │ ├── HideSeekbarPatch.java
│ │ ├── HideTimestampPatch.java
│ │ ├── MiniplayerPatch.java
│ │ ├── NavigationButtonsPatch.java
│ │ ├── OpenLinksExternallyPatch.java
│ │ ├── OpenShortsInRegularPlayerPatch.java
│ │ ├── OpenVideosFullscreenHookPatch.java
│ │ ├── PlayerControlsPatch.java
│ │ ├── PlayerOverlaysHookPatch.java
│ │ ├── PlayerTypeHookPatch.java
│ │ ├── RemoveTrackingQueryParameterPatch.java
│ │ ├── RemoveViewerDiscretionDialogPatch.java
│ │ ├── ReturnYouTubeDislikePatch.java
│ │ ├── SeekbarTappingPatch.java
│ │ ├── SeekbarThumbnailsPatch.java
│ │ ├── ShortsAutoplayPatch.java
│ │ ├── SlideToSeekPatch.java
│ │ ├── VersionCheckPatch.java
│ │ ├── VideoAdsPatch.java
│ │ ├── VideoInformation.java
│ │ ├── WideSearchbarPatch.java
│ │ ├── announcements
│ │ │ ├── AnnouncementsPatch.java
│ │ │ └── requests
│ │ │ │ └── AnnouncementsRoutes.java
│ │ ├── components
│ │ │ ├── AdsFilter.java
│ │ │ ├── AdvancedVideoQualityMenuFilter.java
│ │ │ ├── ButtonsFilter.java
│ │ │ ├── CommentsFilter.java
│ │ │ ├── CustomFilter.java
│ │ │ ├── DescriptionComponentsFilter.java
│ │ │ ├── Filter.java
│ │ │ ├── FilterGroup.java
│ │ │ ├── FilterGroupList.java
│ │ │ ├── HideInfoCardsFilterPatch.java
│ │ │ ├── KeywordContentFilter.java
│ │ │ ├── LayoutComponentsFilter.java
│ │ │ ├── LithoFilterPatch.java
│ │ │ ├── PlaybackSpeedMenuFilterPatch.java
│ │ │ ├── PlayerFlyoutMenuItemsFilter.java
│ │ │ ├── ReturnYouTubeDislikeFilterPatch.java
│ │ │ └── ShortsFilter.java
│ │ ├── playback
│ │ │ ├── quality
│ │ │ │ ├── AdvancedVideoQualityMenuPatch.java
│ │ │ │ └── RememberVideoQualityPatch.java
│ │ │ └── speed
│ │ │ │ ├── CustomPlaybackSpeedPatch.java
│ │ │ │ └── RememberPlaybackSpeedPatch.java
│ │ ├── spoof
│ │ │ ├── SpoofAppVersionPatch.java
│ │ │ └── SpoofDeviceDimensionsPatch.java
│ │ └── theme
│ │ │ ├── ProgressBarDrawable.java
│ │ │ ├── SeekbarColorPatch.java
│ │ │ └── ThemePatch.java
│ │ ├── returnyoutubedislike
│ │ ├── ReturnYouTubeDislike.java
│ │ ├── requests
│ │ │ ├── RYDVoteData.java
│ │ │ ├── ReturnYouTubeDislikeApi.java
│ │ │ └── ReturnYouTubeDislikeRoutes.java
│ │ └── ui
│ │ │ ├── ReturnYouTubeDislikeAboutPreference.java
│ │ │ └── ReturnYouTubeDislikeDebugStatsPreferenceCategory.java
│ │ ├── settings
│ │ ├── LicenseActivityHook.java
│ │ ├── SearchViewController.java
│ │ ├── Settings.java
│ │ └── preference
│ │ │ ├── AlternativeThumbnailsAboutDeArrowPreference.java
│ │ │ ├── ClearLogBufferPreference.java
│ │ │ ├── CustomVideoSpeedListPreference.java
│ │ │ ├── ExportLogToClipboardPreference.java
│ │ │ ├── ForceOriginalAudioSwitchPreference.java
│ │ │ ├── HideAudioFlyoutMenuPreference.java
│ │ │ ├── HtmlPreference.java
│ │ │ ├── ReVancedPreferenceFragment.java
│ │ │ ├── ReVancedYouTubeAboutPreference.java
│ │ │ ├── SpoofStreamingDataSideEffectsPreference.java
│ │ │ └── UrlLinkPreference.java
│ │ ├── shared
│ │ ├── NavigationBar.java
│ │ ├── PlayerControlsVisibilityObserver.kt
│ │ ├── PlayerOverlays.kt
│ │ ├── PlayerType.kt
│ │ ├── ShortsPlayerState.kt
│ │ └── VideoState.kt
│ │ ├── sponsorblock
│ │ ├── SegmentPlaybackController.java
│ │ ├── SponsorBlockSettings.java
│ │ ├── SponsorBlockUtils.java
│ │ ├── objects
│ │ │ ├── CategoryBehaviour.java
│ │ │ ├── SegmentCategory.java
│ │ │ ├── SegmentCategoryListPreference.java
│ │ │ ├── SponsorSegment.java
│ │ │ └── UserStats.java
│ │ ├── requests
│ │ │ ├── SBRequester.java
│ │ │ └── SBRoutes.java
│ │ └── ui
│ │ │ ├── CreateSegmentButton.java
│ │ │ ├── NewSegmentLayout.java
│ │ │ ├── SkipSponsorButton.java
│ │ │ ├── SponsorBlockAboutPreference.java
│ │ │ ├── SponsorBlockPreferenceGroup.java
│ │ │ ├── SponsorBlockStatsPreferenceCategory.java
│ │ │ ├── SponsorBlockViewController.java
│ │ │ └── VotingButton.java
│ │ ├── swipecontrols
│ │ ├── SwipeControlsConfigurationProvider.kt
│ │ ├── SwipeControlsHostActivity.kt
│ │ ├── controller
│ │ │ ├── AudioVolumeController.kt
│ │ │ ├── ScreenBrightnessController.kt
│ │ │ ├── SwipeZonesController.kt
│ │ │ ├── VolumeKeysController.kt
│ │ │ └── gesture
│ │ │ │ ├── ClassicSwipeController.kt
│ │ │ │ ├── PressToSwipeController.kt
│ │ │ │ └── core
│ │ │ │ ├── BaseGestureController.kt
│ │ │ │ ├── GestureController.kt
│ │ │ │ ├── SwipeDetector.kt
│ │ │ │ └── VolumeAndBrightnessScroller.kt
│ │ ├── misc
│ │ │ ├── Point.kt
│ │ │ ├── Rectangle.kt
│ │ │ ├── ScrollDistanceHelper.kt
│ │ │ ├── SwipeControlsOverlay.kt
│ │ │ └── SwipeControlsUtils.kt
│ │ └── views
│ │ │ └── SwipeControlsOverlayLayout.kt
│ │ └── videoplayer
│ │ ├── CopyVideoUrlButton.java
│ │ ├── CopyVideoUrlTimestampButton.java
│ │ ├── ExternalDownloadButton.java
│ │ ├── PlaybackSpeedDialogButton.java
│ │ └── PlayerControlButton.java
│ └── stub
│ ├── build.gradle.kts
│ └── src
│ └── main
│ ├── AndroidManifest.xml
│ └── java
│ ├── android
│ └── support
│ │ └── v7
│ │ └── widget
│ │ └── RecyclerView.java
│ ├── com
│ ├── airbnb
│ │ └── lottie
│ │ │ └── LottieAnimationView.java
│ └── google
│ │ └── android
│ │ ├── android
│ │ └── support
│ │ │ └── constraint
│ │ │ └── ConstraintLayout.java
│ │ ├── apps
│ │ └── youtube
│ │ │ └── app
│ │ │ └── ui
│ │ │ └── SlimMetadataScrollableButtonContainerLayout.java
│ │ └── libraries
│ │ └── youtube
│ │ └── rendering
│ │ └── ui
│ │ └── pivotbar
│ │ └── PivotBar.java
│ └── org
│ └── chromium
│ └── net
│ ├── UrlRequest.java
│ ├── UrlResponseInfo.java
│ └── impl
│ └── CronetUrlRequest.java
├── gradle.properties
├── gradle
├── libs.versions.toml
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── package-lock.json
├── package.json
├── patches
├── api
│ └── patches.api
├── build.gradle.kts
├── src
│ └── main
│ │ ├── kotlin
│ │ └── app
│ │ │ └── revanced
│ │ │ ├── patches
│ │ │ ├── all
│ │ │ │ └── misc
│ │ │ │ │ ├── activity
│ │ │ │ │ └── exportall
│ │ │ │ │ │ └── ExportAllActivitiesPatch.kt
│ │ │ │ │ ├── adb
│ │ │ │ │ └── HideAdbPatch.kt
│ │ │ │ │ ├── build
│ │ │ │ │ ├── BaseSpoofBuildInfoPatch.kt
│ │ │ │ │ └── SpoofBuildInfoPatch.kt
│ │ │ │ │ ├── connectivity
│ │ │ │ │ ├── location
│ │ │ │ │ │ └── hide
│ │ │ │ │ │ │ └── HideMockLocationPatch.kt
│ │ │ │ │ ├── telephony
│ │ │ │ │ │ └── sim
│ │ │ │ │ │ │ └── spoof
│ │ │ │ │ │ │ └── SpoofSimCountryPatch.kt
│ │ │ │ │ └── wifi
│ │ │ │ │ │ └── spoof
│ │ │ │ │ │ └── SpoofWifiPatch.kt
│ │ │ │ │ ├── debugging
│ │ │ │ │ └── EnableAndroidDebuggingPatch.kt
│ │ │ │ │ ├── directory
│ │ │ │ │ ├── ChangeDataDirectoryLocationPatch.kt
│ │ │ │ │ └── documentsprovider
│ │ │ │ │ │ └── ExportInternalDataDocumentsProviderPatch.kt
│ │ │ │ │ ├── hex
│ │ │ │ │ └── HexPatch.kt
│ │ │ │ │ ├── interaction
│ │ │ │ │ └── gestures
│ │ │ │ │ │ └── PredictiveBackGesturePatch.kt
│ │ │ │ │ ├── network
│ │ │ │ │ └── OverrideCertificatePinningPatch.kt
│ │ │ │ │ ├── packagename
│ │ │ │ │ └── ChangePackageNamePatch.kt
│ │ │ │ │ ├── resources
│ │ │ │ │ └── AddResourcesPatch.kt
│ │ │ │ │ ├── screencapture
│ │ │ │ │ └── RemoveScreenCaptureRestrictionPatch.kt
│ │ │ │ │ ├── screenshot
│ │ │ │ │ └── RemoveScreenshotRestrictionPatch.kt
│ │ │ │ │ ├── shortcut
│ │ │ │ │ └── sharetargets
│ │ │ │ │ │ └── RemoveShareTargetsPatch.kt
│ │ │ │ │ ├── targetSdk
│ │ │ │ │ └── SetTargetSdkVersion34.kt
│ │ │ │ │ ├── transformation
│ │ │ │ │ ├── MethodCall.kt
│ │ │ │ │ └── TransformInstructionsPatch.kt
│ │ │ │ │ └── versioncode
│ │ │ │ │ └── ChangeVersionCodePatch.kt
│ │ │ ├── amazon
│ │ │ │ ├── DeepLinkingPatch.kt
│ │ │ │ └── Fingerprints.kt
│ │ │ ├── angulus
│ │ │ │ └── ads
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── RemoveAdsPatch.kt
│ │ │ ├── backdrops
│ │ │ │ └── misc
│ │ │ │ │ └── pro
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── ProUnlockPatch.kt
│ │ │ ├── bandcamp
│ │ │ │ └── limitations
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── RemovePlayLimitsPatch.kt
│ │ │ ├── cieid
│ │ │ │ └── restrictions
│ │ │ │ │ └── root
│ │ │ │ │ ├── BypassRootChecksPatch.kt
│ │ │ │ │ └── Fingerprints.kt
│ │ │ ├── duolingo
│ │ │ │ ├── ad
│ │ │ │ │ ├── DisableAdsPatch.kt
│ │ │ │ │ └── Fingerprints.kt
│ │ │ │ └── debug
│ │ │ │ │ ├── EnableDebugMenuPatch.kt
│ │ │ │ │ └── Fingerprints.kt
│ │ │ ├── facebook
│ │ │ │ └── ads
│ │ │ │ │ ├── mainfeed
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── HideSponsoredStoriesPatch.kt
│ │ │ │ │ └── story
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── HideStoryAdsPatch.kt
│ │ │ ├── finanzonline
│ │ │ │ └── detection
│ │ │ │ │ ├── bootloader
│ │ │ │ │ ├── BootloaderDetectionPatch.kt
│ │ │ │ │ └── Fingerprints.kt
│ │ │ │ │ └── root
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── RootDetectionPatch.kt
│ │ │ ├── googlenews
│ │ │ │ ├── customtabs
│ │ │ │ │ ├── EnableCustomTabsPatch.kt
│ │ │ │ │ └── Fingerprints.kt
│ │ │ │ └── misc
│ │ │ │ │ ├── extension
│ │ │ │ │ ├── ExtensionPatch.kt
│ │ │ │ │ └── hooks
│ │ │ │ │ │ └── StartActivityInitHook.kt
│ │ │ │ │ └── gms
│ │ │ │ │ ├── Constants.kt
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── GmsCoreSupportPatch.kt
│ │ │ ├── googlephotos
│ │ │ │ └── misc
│ │ │ │ │ ├── extension
│ │ │ │ │ ├── ExtensionPatch.kt
│ │ │ │ │ └── Hooks.kt
│ │ │ │ │ ├── features
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ ├── SpoofBuildInfoPatch.kt
│ │ │ │ │ └── SpoofFeaturesPatch.kt
│ │ │ │ │ ├── gms
│ │ │ │ │ ├── Constants.kt
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── GmsCoreSupportPatch.kt
│ │ │ │ │ └── preferences
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── RestoreHiddenBackUpWhileChargingTogglePatch.kt
│ │ │ ├── googlerecorder
│ │ │ │ └── restrictions
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── RemoveDeviceRestrictions.kt
│ │ │ ├── hexeditor
│ │ │ │ └── ad
│ │ │ │ │ ├── DisableAdsPatch.kt
│ │ │ │ │ └── Fingerprints.kt
│ │ │ ├── iconpackstudio
│ │ │ │ └── misc
│ │ │ │ │ └── pro
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── UnlockProPatch.kt
│ │ │ ├── idaustria
│ │ │ │ └── detection
│ │ │ │ │ ├── root
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── RootDetectionPatch.kt
│ │ │ │ │ └── signature
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── SpoofSignaturePatch.kt
│ │ │ ├── inshorts
│ │ │ │ └── ad
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── InshortsAdsPatch.kt
│ │ │ ├── instagram
│ │ │ │ ├── ads
│ │ │ │ │ └── HideAdsPatch.kt
│ │ │ │ └── misc
│ │ │ │ │ └── signature
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── SignatureCheckPatch.kt
│ │ │ ├── irplus
│ │ │ │ └── ad
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── RemoveAdsPatch.kt
│ │ │ ├── lightroom
│ │ │ │ └── misc
│ │ │ │ │ ├── login
│ │ │ │ │ ├── DisableMandatoryLoginPatch.kt
│ │ │ │ │ └── Fingerprints.kt
│ │ │ │ │ └── premium
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── UnlockPremiumPatch.kt
│ │ │ ├── memegenerator
│ │ │ │ ├── detection
│ │ │ │ │ ├── license
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ └── LicenseValidationPatch.kt
│ │ │ │ │ └── signature
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ └── SignatureVerificationPatch.kt
│ │ │ │ └── misc
│ │ │ │ │ └── pro
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── UnlockProVersionPatch.kt
│ │ │ ├── messenger
│ │ │ │ ├── inbox
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ ├── HideInboxAdsPatch.kt
│ │ │ │ │ └── HideInboxSubtabsPatch.kt
│ │ │ │ ├── inputfield
│ │ │ │ │ ├── DisableSwitchingEmojiToStickerPatch.kt
│ │ │ │ │ ├── DisableTypingIndicatorPatch.kt
│ │ │ │ │ └── Fingerprints.kt
│ │ │ │ ├── metaai
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── RemoveMetaAIPatch.kt
│ │ │ │ ├── misc
│ │ │ │ │ └── extension
│ │ │ │ │ │ ├── ExtensionPatch.kt
│ │ │ │ │ │ └── Hooks.kt
│ │ │ │ └── navbar
│ │ │ │ │ └── RemoveMetaAITabPatch.kt
│ │ │ ├── meta
│ │ │ │ └── ads
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── HideAdsPatch.kt
│ │ │ ├── mifitness
│ │ │ │ └── misc
│ │ │ │ │ ├── locale
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── ForceEnglishLocalePatch.kt
│ │ │ │ │ └── login
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── FixLoginPatch.kt
│ │ │ ├── music
│ │ │ │ ├── ad
│ │ │ │ │ └── video
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ └── HideVideoAds.kt
│ │ │ │ ├── audio
│ │ │ │ │ └── exclusiveaudio
│ │ │ │ │ │ ├── EnableExclusiveAudioPlayback.kt
│ │ │ │ │ │ └── Fingerprints.kt
│ │ │ │ ├── interaction
│ │ │ │ │ ├── permanentrepeat
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ └── PermanentRepeatPatch.kt
│ │ │ │ │ └── permanentshuffle
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ └── PermanentShufflePatch.kt
│ │ │ │ ├── layout
│ │ │ │ │ ├── compactheader
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ └── HideCategoryBar.kt
│ │ │ │ │ ├── premium
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ └── HideGetPremiumPatch.kt
│ │ │ │ │ └── upgradebutton
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ └── RemoveUpgradeButtonPatch.kt
│ │ │ │ └── misc
│ │ │ │ │ ├── androidauto
│ │ │ │ │ ├── BypassCertificateChecksPatch.kt
│ │ │ │ │ └── Fingerprints.kt
│ │ │ │ │ ├── backgroundplayback
│ │ │ │ │ ├── BackgroundPlaybackPatch.kt
│ │ │ │ │ └── Fingerprints.kt
│ │ │ │ │ ├── extension
│ │ │ │ │ ├── SharedExtensionPatch.kt
│ │ │ │ │ └── hooks
│ │ │ │ │ │ └── ApplicationInitHook.kt
│ │ │ │ │ ├── gms
│ │ │ │ │ ├── Constants.kt
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── GmsCoreSupportPatch.kt
│ │ │ │ │ └── spoof
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ ├── SpoofClientPatch.kt
│ │ │ │ │ └── UserAgentClientSpoofPatch.kt
│ │ │ ├── myexpenses
│ │ │ │ └── misc
│ │ │ │ │ └── pro
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── UnlockProPatch.kt
│ │ │ ├── myfitnesspal
│ │ │ │ └── ads
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── HideAdsPatch.kt
│ │ │ ├── netguard
│ │ │ │ └── broadcasts
│ │ │ │ │ └── removerestriction
│ │ │ │ │ └── RemoveBroadcastsRestrictionPatch.kt
│ │ │ ├── nfctoolsse
│ │ │ │ └── misc
│ │ │ │ │ └── pro
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── UnlockProPatch.kt
│ │ │ ├── nunl
│ │ │ │ ├── ads
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ ├── HideAdsPatch.kt
│ │ │ │ │ └── Hooks.kt
│ │ │ │ └── firebase
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── SpoofCertificatePatch.kt
│ │ │ ├── nyx
│ │ │ │ └── misc
│ │ │ │ │ └── pro
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── UnlockProPatch.kt
│ │ │ ├── openinghours
│ │ │ │ └── misc
│ │ │ │ │ └── fix
│ │ │ │ │ └── crash
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── FixCrashPatch.kt
│ │ │ ├── pandora
│ │ │ │ ├── ads
│ │ │ │ │ └── DisableAudioAdsPatch.kt
│ │ │ │ ├── misc
│ │ │ │ │ └── EnableUnlimitedSkipsPatch.kt
│ │ │ │ └── shared
│ │ │ │ │ └── Fingerprints.kt
│ │ │ ├── photomath
│ │ │ │ ├── detection
│ │ │ │ │ ├── deviceid
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ └── SpoofDeviceIdPatch.kt
│ │ │ │ │ └── signature
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ └── SignatureDetectionPatch.kt
│ │ │ │ └── misc
│ │ │ │ │ ├── annoyances
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── HideUpdatePopupPatch.kt
│ │ │ │ │ └── unlock
│ │ │ │ │ ├── bookpoint
│ │ │ │ │ ├── EnableBookpointPatch.kt
│ │ │ │ │ └── Fingerprints.kt
│ │ │ │ │ └── plus
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── UnlockPlusPatch.kt
│ │ │ ├── piccomafr
│ │ │ │ ├── misc
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── SpoofAndroidDeviceIdPatch.kt
│ │ │ │ └── tracking
│ │ │ │ │ ├── DisableTrackingPatch.kt
│ │ │ │ │ └── Fingerprints.kt
│ │ │ ├── pixiv
│ │ │ │ └── ads
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── HideAdsPatch.kt
│ │ │ ├── primevideo
│ │ │ │ ├── ads
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── SkipAdsPatch.kt
│ │ │ │ └── misc
│ │ │ │ │ ├── extension
│ │ │ │ │ ├── ExtensionPatch.kt
│ │ │ │ │ └── Hooks.kt
│ │ │ │ │ └── permissions
│ │ │ │ │ └── RenamePermissionsPatch.kt
│ │ │ ├── protonmail
│ │ │ │ └── signature
│ │ │ │ │ └── RemoveSentFromSignaturePatch.kt
│ │ │ ├── rar
│ │ │ │ └── misc
│ │ │ │ │ └── annoyances
│ │ │ │ │ └── purchasereminder
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── HidePurchaseReminderPatch.kt
│ │ │ ├── reddit
│ │ │ │ ├── ad
│ │ │ │ │ ├── banner
│ │ │ │ │ │ └── HideBannerPatch.kt
│ │ │ │ │ ├── comments
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ └── HideCommentAdsPatch.kt
│ │ │ │ │ └── general
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ └── HideAdsPatch.kt
│ │ │ │ ├── customclients
│ │ │ │ │ ├── FixSLinksPatch.kt
│ │ │ │ │ ├── SpoofClientPatch.kt
│ │ │ │ │ ├── baconreader
│ │ │ │ │ │ └── api
│ │ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ │ └── SpoofClientPatch.kt
│ │ │ │ │ ├── boostforreddit
│ │ │ │ │ │ ├── ads
│ │ │ │ │ │ │ ├── DisableAdsPatch.kt
│ │ │ │ │ │ │ └── Fingerprints.kt
│ │ │ │ │ │ ├── api
│ │ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ │ └── SpoofClientPatch.kt
│ │ │ │ │ │ ├── fix
│ │ │ │ │ │ │ ├── downloads
│ │ │ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ │ │ └── FixAudioMissingInDownloadsPatch.kt
│ │ │ │ │ │ │ └── slink
│ │ │ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ │ │ └── FixSLinksPatch.kt
│ │ │ │ │ │ └── misc
│ │ │ │ │ │ │ └── extension
│ │ │ │ │ │ │ ├── SharedExtensionPatch.kt
│ │ │ │ │ │ │ └── hooks
│ │ │ │ │ │ │ └── InitHook.kt
│ │ │ │ │ ├── infinityforreddit
│ │ │ │ │ │ ├── api
│ │ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ │ └── SpoofClientPatch.kt
│ │ │ │ │ │ └── subscription
│ │ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ │ └── UnlockSubscriptionPatch.kt
│ │ │ │ │ ├── joeyforreddit
│ │ │ │ │ │ ├── ads
│ │ │ │ │ │ │ ├── DisableAdsPatch.kt
│ │ │ │ │ │ │ └── Fingerprints.kt
│ │ │ │ │ │ ├── api
│ │ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ │ └── SpoofClientPatch.kt
│ │ │ │ │ │ └── detection
│ │ │ │ │ │ │ └── piracy
│ │ │ │ │ │ │ ├── DisablePiracyDetectionPatch.kt
│ │ │ │ │ │ │ └── Fingerprints.kt
│ │ │ │ │ ├── redditisfun
│ │ │ │ │ │ └── api
│ │ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ │ └── SpoofClientPatch.kt
│ │ │ │ │ ├── relayforreddit
│ │ │ │ │ │ └── api
│ │ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ │ └── SpoofClientPatch.kt
│ │ │ │ │ ├── slide
│ │ │ │ │ │ └── api
│ │ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ │ └── SpoofClientPatch.kt
│ │ │ │ │ ├── sync
│ │ │ │ │ │ ├── ads
│ │ │ │ │ │ │ ├── DisableAdsPatch.kt
│ │ │ │ │ │ │ └── Fingerprints.kt
│ │ │ │ │ │ ├── detection
│ │ │ │ │ │ │ └── piracy
│ │ │ │ │ │ │ │ ├── DisablePiracyDetectionPatch.kt
│ │ │ │ │ │ │ │ └── Fingerprints.kt
│ │ │ │ │ │ ├── syncforlemmy
│ │ │ │ │ │ │ └── ads
│ │ │ │ │ │ │ │ └── DisableAdsPatch.kt
│ │ │ │ │ │ └── syncforreddit
│ │ │ │ │ │ │ ├── ads
│ │ │ │ │ │ │ └── DisableAdsPatch.kt
│ │ │ │ │ │ │ ├── annoyances
│ │ │ │ │ │ │ └── startup
│ │ │ │ │ │ │ │ ├── DisableSyncForLemmyBottomSheetPatch.kt
│ │ │ │ │ │ │ │ └── Fingerprints.kt
│ │ │ │ │ │ │ ├── api
│ │ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ │ └── SpoofClientPatch.kt
│ │ │ │ │ │ │ ├── extension
│ │ │ │ │ │ │ ├── SharedExtensionPatch.kt
│ │ │ │ │ │ │ └── hooks
│ │ │ │ │ │ │ │ └── InitHook.kt
│ │ │ │ │ │ │ └── fix
│ │ │ │ │ │ │ ├── slink
│ │ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ │ └── FixSLinksPatch.kt
│ │ │ │ │ │ │ ├── user
│ │ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ │ └── UseUserEndpointPatch.kt
│ │ │ │ │ │ │ └── video
│ │ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ │ └── FixVideoDownloadsPatch.kt
│ │ │ │ │ └── syncforreddit
│ │ │ │ │ │ └── fix
│ │ │ │ │ │ └── video
│ │ │ │ │ │ └── FixVideoDownloadsPatch.kt
│ │ │ │ ├── layout
│ │ │ │ │ ├── disablescreenshotpopup
│ │ │ │ │ │ ├── DisableScreenshotPopupPatch.kt
│ │ │ │ │ │ └── Fingerprints.kt
│ │ │ │ │ └── premiumicon
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ └── UnlockPremiumIconPatch.kt
│ │ │ │ └── misc
│ │ │ │ │ ├── extension
│ │ │ │ │ └── ExtensionPatch.kt
│ │ │ │ │ └── tracking
│ │ │ │ │ └── url
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── SanitizeUrlQueryPatch.kt
│ │ │ ├── serviceportalbund
│ │ │ │ └── detection
│ │ │ │ │ └── root
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── RootDetectionPatch.kt
│ │ │ ├── shared
│ │ │ │ ├── Fingerprints.kt
│ │ │ │ └── misc
│ │ │ │ │ ├── checks
│ │ │ │ │ ├── BaseCheckEnvironmentPatch.kt
│ │ │ │ │ └── Fingerprints.kt
│ │ │ │ │ ├── extension
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── SharedExtensionPatch.kt
│ │ │ │ │ ├── fix
│ │ │ │ │ └── verticalscroll
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ └── VerticalScrollPatch.kt
│ │ │ │ │ ├── gms
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── GmsCoreSupportPatch.kt
│ │ │ │ │ ├── hex
│ │ │ │ │ └── HexPatch.kt
│ │ │ │ │ ├── mapping
│ │ │ │ │ └── ResourceMappingPatch.kt
│ │ │ │ │ ├── pairip
│ │ │ │ │ └── license
│ │ │ │ │ │ ├── DisableLicenseCheckPatch.kt
│ │ │ │ │ │ └── Fingerprints.kt
│ │ │ │ │ ├── settings
│ │ │ │ │ ├── SettingsPatch.kt
│ │ │ │ │ └── preference
│ │ │ │ │ │ ├── BasePreference.kt
│ │ │ │ │ │ ├── BasePreferenceScreen.kt
│ │ │ │ │ │ ├── InputType.kt
│ │ │ │ │ │ ├── IntentPreference.kt
│ │ │ │ │ │ ├── ListPreference.kt
│ │ │ │ │ │ ├── NonInteractivePreference.kt
│ │ │ │ │ │ ├── PreferenceCategory.kt
│ │ │ │ │ │ ├── PreferenceScreenPreference.kt
│ │ │ │ │ │ ├── SummaryType.kt
│ │ │ │ │ │ ├── SwitchPreference.kt
│ │ │ │ │ │ └── TextPreference.kt
│ │ │ │ │ └── spoof
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ ├── SpoofVideoStreamsPatch.kt
│ │ │ │ │ └── UserAgentClientSpoofPatch.kt
│ │ │ ├── solidexplorer2
│ │ │ │ └── functionality
│ │ │ │ │ └── filesize
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── RemoveFileSizeLimitPatch.kt
│ │ │ ├── songpal
│ │ │ │ └── badge
│ │ │ │ │ ├── BadgeTabPatch.kt
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── RemoveNotificationBadgePatch.kt
│ │ │ ├── soundcloud
│ │ │ │ ├── ad
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── HideAdsPatch.kt
│ │ │ │ ├── analytics
│ │ │ │ │ ├── DisableTelemetryPatch.kt
│ │ │ │ │ └── Fingerprints.kt
│ │ │ │ ├── offlinesync
│ │ │ │ │ ├── EnableOfflineSyncPatch.kt
│ │ │ │ │ └── Fingerprints.kt
│ │ │ │ └── shared
│ │ │ │ │ └── Fingerprints.kt
│ │ │ ├── spotify
│ │ │ │ ├── layout
│ │ │ │ │ └── theme
│ │ │ │ │ │ ├── CustomThemePatch.kt
│ │ │ │ │ │ └── Fingerprints.kt
│ │ │ │ ├── lite
│ │ │ │ │ └── ondemand
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ └── OnDemandPatch.kt
│ │ │ │ ├── misc
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ ├── UnlockPremiumPatch.kt
│ │ │ │ │ ├── check
│ │ │ │ │ │ └── CheckEnvironmentPatch.kt
│ │ │ │ │ ├── extension
│ │ │ │ │ │ ├── ExtensionPatch.kt
│ │ │ │ │ │ └── Hooks.kt
│ │ │ │ │ ├── fix
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ ├── SpoofPackageInfoPatch.kt
│ │ │ │ │ │ ├── SpoofSignaturePatch.kt
│ │ │ │ │ │ └── login
│ │ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ │ └── FixFacebookLoginPatch.kt
│ │ │ │ │ ├── privacy
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ └── SanitizeSharingLinksPatch.kt
│ │ │ │ │ └── widgets
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ └── FixThirdPartyLaunchersWidgets.kt
│ │ │ │ ├── navbar
│ │ │ │ │ └── PremiumNavbarTabPatch.kt
│ │ │ │ └── shared
│ │ │ │ │ └── Fingerprints.kt
│ │ │ ├── stocard
│ │ │ │ └── layout
│ │ │ │ │ ├── HideOffersTabPatch.kt
│ │ │ │ │ └── HideStoryBubblesPatch.kt
│ │ │ ├── strava
│ │ │ │ ├── subscription
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── UnlockSubscriptionPatch.kt
│ │ │ │ └── upselling
│ │ │ │ │ ├── DisableSubscriptionSuggestionsPatch.kt
│ │ │ │ │ └── Fingerprints.kt
│ │ │ ├── swissid
│ │ │ │ └── integritycheck
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── RemoveGooglePlayIntegrityCheckPatch.kt
│ │ │ ├── ticktick
│ │ │ │ └── misc
│ │ │ │ │ └── themeunlock
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── UnlockThemePatch.kt
│ │ │ ├── tiktok
│ │ │ │ ├── feedfilter
│ │ │ │ │ ├── FeedFilterPatch.kt
│ │ │ │ │ └── Fingerprints.kt
│ │ │ │ ├── interaction
│ │ │ │ │ ├── cleardisplay
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ └── RememberClearDisplayPatch.kt
│ │ │ │ │ ├── downloads
│ │ │ │ │ │ ├── DownloadsPatch.kt
│ │ │ │ │ │ └── Fingerprints.kt
│ │ │ │ │ ├── seekbar
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ └── ShowSeekbarPatch.kt
│ │ │ │ │ └── speed
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ └── PlaybackSpeedPatch.kt
│ │ │ │ ├── misc
│ │ │ │ │ ├── extension
│ │ │ │ │ │ ├── ExtensionPatch.kt
│ │ │ │ │ │ └── Hooks.kt
│ │ │ │ │ ├── login
│ │ │ │ │ │ ├── disablerequirement
│ │ │ │ │ │ │ ├── DisableLoginRequirementPatch.kt
│ │ │ │ │ │ │ └── Fingerprints.kt
│ │ │ │ │ │ └── fixgoogle
│ │ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ │ └── FixGoogleLoginPatch.kt
│ │ │ │ │ ├── settings
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ └── SettingsPatch.kt
│ │ │ │ │ └── spoof
│ │ │ │ │ │ └── sim
│ │ │ │ │ │ └── SpoofSimPatch.kt
│ │ │ │ └── shared
│ │ │ │ │ └── Fingerprints.kt
│ │ │ ├── trakt
│ │ │ │ ├── Fingerprints.kt
│ │ │ │ └── UnlockProPatch.kt
│ │ │ ├── tudortmund
│ │ │ │ ├── lockscreen
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── ShowOnLockscreenPatch.kt
│ │ │ │ └── misc
│ │ │ │ │ └── extension
│ │ │ │ │ └── ExtensionPatch.kt
│ │ │ ├── tumblr
│ │ │ │ ├── ads
│ │ │ │ │ └── DisableDashboardAds.kt
│ │ │ │ ├── annoyances
│ │ │ │ │ ├── adfree
│ │ │ │ │ │ └── DisableAdFreeBannerPatch.kt
│ │ │ │ │ ├── inappupdate
│ │ │ │ │ │ └── DisableInAppUpdatePatch.kt
│ │ │ │ │ ├── notifications
│ │ │ │ │ │ ├── DisableBlogNotificationReminderPatch.kt
│ │ │ │ │ │ └── Fingerprints.kt
│ │ │ │ │ └── popups
│ │ │ │ │ │ ├── DisableGiftMessagePopupPatch.kt
│ │ │ │ │ │ └── Fingerprints.kt
│ │ │ │ ├── featureflags
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── OverrideFeatureFlagsPatch.kt
│ │ │ │ ├── fixes
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── FixOldVersionsPatch.kt
│ │ │ │ ├── misc
│ │ │ │ │ └── extension
│ │ │ │ │ │ └── ExtensionPatch.kt
│ │ │ │ └── timelinefilter
│ │ │ │ │ ├── FilterTimelineObjectsPatch.kt
│ │ │ │ │ └── Fingerprints.kt
│ │ │ ├── twitch
│ │ │ │ ├── ad
│ │ │ │ │ ├── audio
│ │ │ │ │ │ ├── AudioAdsPatch.kt
│ │ │ │ │ │ └── Fingerprints.kt
│ │ │ │ │ ├── embedded
│ │ │ │ │ │ ├── EmbeddedAdsPatch.kt
│ │ │ │ │ │ └── Fingerprints.kt
│ │ │ │ │ ├── shared
│ │ │ │ │ │ └── util
│ │ │ │ │ │ │ └── AdPatch.kt
│ │ │ │ │ └── video
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ └── VideoAdsPatch.kt
│ │ │ │ ├── chat
│ │ │ │ │ ├── antidelete
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ └── ShowDeletedMessagesPatch.kt
│ │ │ │ │ └── autoclaim
│ │ │ │ │ │ ├── AutoClaimChannelPointsPatch.kt
│ │ │ │ │ │ └── Fingerprints.kt
│ │ │ │ ├── debug
│ │ │ │ │ ├── DebugModePatch.kt
│ │ │ │ │ └── Fingerprints.kt
│ │ │ │ └── misc
│ │ │ │ │ ├── extension
│ │ │ │ │ ├── Hooks.kt
│ │ │ │ │ └── SharedExtensionPatch.kt
│ │ │ │ │ └── settings
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── SettingsPatch.kt
│ │ │ ├── twitter
│ │ │ │ ├── interaction
│ │ │ │ │ └── downloads
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ └── UnlockDownloadsPatch.kt
│ │ │ │ ├── layout
│ │ │ │ │ └── viewcount
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ └── HideViewCountPatch.kt
│ │ │ │ └── misc
│ │ │ │ │ ├── dynamiccolor
│ │ │ │ │ └── DynamicColorPatch.kt
│ │ │ │ │ ├── extension
│ │ │ │ │ └── ExtensionPatch.kt
│ │ │ │ │ ├── hook
│ │ │ │ │ ├── HideAdsHookPatch.kt
│ │ │ │ │ ├── HideRecommendedUsersPatch.kt
│ │ │ │ │ ├── HookPatch.kt
│ │ │ │ │ └── json
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ └── JsonHookPatch.kt
│ │ │ │ │ └── links
│ │ │ │ │ ├── ChangeLinkSharingDomainPatch.kt
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ ├── OpenLinksWithAppChooserPatch.kt
│ │ │ │ │ └── SanitizeSharingLinksPatch.kt
│ │ │ ├── vsco
│ │ │ │ └── misc
│ │ │ │ │ └── pro
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── UnlockProPatch.kt
│ │ │ ├── warnwetter
│ │ │ │ └── misc
│ │ │ │ │ ├── firebasegetcert
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── FirebaseGetCertPatch.kt
│ │ │ │ │ └── promocode
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── PromoCodeUnlockPatch.kt
│ │ │ ├── willhaben
│ │ │ │ └── ads
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── HideAdsPatch.kt
│ │ │ ├── windyapp
│ │ │ │ └── misc
│ │ │ │ │ └── unlockpro
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── UnlockProPatch.kt
│ │ │ ├── youtube
│ │ │ │ ├── ad
│ │ │ │ │ ├── general
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ └── HideAdsPatch.kt
│ │ │ │ │ ├── getpremium
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ └── HideGetPremiumPatch.kt
│ │ │ │ │ └── video
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ └── VideoAdsPatch.kt
│ │ │ │ ├── interaction
│ │ │ │ │ ├── copyvideourl
│ │ │ │ │ │ └── CopyVideoUrlPatch.kt
│ │ │ │ │ ├── dialog
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ └── RemoveViewerDiscretionDialogPatch.kt
│ │ │ │ │ ├── downloads
│ │ │ │ │ │ ├── DownloadsPatch.kt
│ │ │ │ │ │ └── Fingerprints.kt
│ │ │ │ │ ├── seekbar
│ │ │ │ │ │ ├── DisablePreciseSeekingGesturePatch.kt
│ │ │ │ │ │ ├── EnableSeekbarTappingPatch.kt
│ │ │ │ │ │ ├── EnableSlideToSeekPatch.kt
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ ├── HideSeekbarPatch.kt
│ │ │ │ │ │ ├── SeekbarPatch.kt
│ │ │ │ │ │ └── SeekbarThumbnailsPatch.kt
│ │ │ │ │ └── swipecontrols
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ └── SwipeControlsPatch.kt
│ │ │ │ ├── layout
│ │ │ │ │ ├── autocaptions
│ │ │ │ │ │ ├── AutoCaptionsPatch.kt
│ │ │ │ │ │ └── Fingerprints.kt
│ │ │ │ │ ├── branding
│ │ │ │ │ │ ├── CustomBrandingPatch.kt
│ │ │ │ │ │ └── header
│ │ │ │ │ │ │ └── ChangeHeaderPatch.kt
│ │ │ │ │ ├── buttons
│ │ │ │ │ │ ├── action
│ │ │ │ │ │ │ └── HideButtonsPatch.kt
│ │ │ │ │ │ ├── navigation
│ │ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ │ └── NavigationButtonsPatch.kt
│ │ │ │ │ │ └── overlay
│ │ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ │ └── HidePlayerOverlayButtonsPatch.kt
│ │ │ │ │ ├── formfactor
│ │ │ │ │ │ ├── ChangeFormFactorPatch.kt
│ │ │ │ │ │ └── Fingerprints.kt
│ │ │ │ │ ├── hide
│ │ │ │ │ │ ├── endscreencards
│ │ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ │ └── HideEndscreenCardsPatch.kt
│ │ │ │ │ │ ├── endscreensuggestion
│ │ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ │ └── HideEndScreenSuggestedVideoPatch.kt
│ │ │ │ │ │ ├── fullscreenambientmode
│ │ │ │ │ │ │ ├── DisableFullscreenAmbientModePatch.kt
│ │ │ │ │ │ │ └── Fingerprints.kt
│ │ │ │ │ │ ├── general
│ │ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ │ └── HideLayoutComponentsPatch.kt
│ │ │ │ │ │ ├── infocards
│ │ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ │ └── HideInfoCardsPatch.kt
│ │ │ │ │ │ ├── player
│ │ │ │ │ │ │ └── flyoutmenupanel
│ │ │ │ │ │ │ │ └── HidePlayerFlyoutMenuPatch.kt
│ │ │ │ │ │ ├── relatedvideooverlay
│ │ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ │ └── HideRelatedVideoOverlayPatch.kt
│ │ │ │ │ │ ├── rollingnumber
│ │ │ │ │ │ │ └── DisableRollingNumberAnimationPatch.kt
│ │ │ │ │ │ ├── seekbar
│ │ │ │ │ │ │ └── HideSeekbarPatch.kt
│ │ │ │ │ │ ├── shorts
│ │ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ │ └── HideShortsComponentsPatch.kt
│ │ │ │ │ │ ├── suggestedvideoendscreen
│ │ │ │ │ │ │ └── DisableSuggestedVideoEndScreenPatch.kt
│ │ │ │ │ │ └── time
│ │ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ │ └── HideTimestampPatch.kt
│ │ │ │ │ ├── miniplayer
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ └── MiniplayerPatch.kt
│ │ │ │ │ ├── panels
│ │ │ │ │ │ └── popup
│ │ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ │ └── PlayerPopupPanelsPatch.kt
│ │ │ │ │ ├── player
│ │ │ │ │ │ ├── background
│ │ │ │ │ │ │ └── PlayerControlsBackgroundPatch.kt
│ │ │ │ │ │ ├── fullscreen
│ │ │ │ │ │ │ ├── ExitFullscreenPatch.kt
│ │ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ │ ├── OpenVideosFullscreen.kt
│ │ │ │ │ │ │ ├── OpenVideosFullscreenHookPatch.kt
│ │ │ │ │ │ │ └── OpenVideosFullscreenPatch.kt
│ │ │ │ │ │ └── overlay
│ │ │ │ │ │ │ ├── CustomPlayerOverlayOpacityPatch.kt
│ │ │ │ │ │ │ └── Fingerprints.kt
│ │ │ │ │ ├── returnyoutubedislike
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ └── ReturnYouTubeDislikePatch.kt
│ │ │ │ │ ├── searchbar
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ └── WideSearchbarPatch.kt
│ │ │ │ │ ├── seekbar
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ ├── RestoreOldSeekbarThumbnailsPatch.kt
│ │ │ │ │ │ └── SeekbarColorPatch.kt
│ │ │ │ │ ├── shortsautoplay
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ └── ShortsAutoplayPatch.kt
│ │ │ │ │ ├── shortsplayer
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ └── OpenShortsInRegularPlayerPatch.kt
│ │ │ │ │ ├── sponsorblock
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ └── SponsorBlockPatch.kt
│ │ │ │ │ ├── spoofappversion
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ └── SpoofAppVersionPatch.kt
│ │ │ │ │ ├── startpage
│ │ │ │ │ │ ├── ChangeStartPagePatch.kt
│ │ │ │ │ │ └── Fingerprints.kt
│ │ │ │ │ ├── startupshortsreset
│ │ │ │ │ │ ├── DisableResumingShortsOnStartupPatch.kt
│ │ │ │ │ │ └── Fingerprints.kt
│ │ │ │ │ ├── tablet
│ │ │ │ │ │ └── EnableTabletLayoutPatch.kt
│ │ │ │ │ ├── theme
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ ├── LithoColorHookPatch.kt
│ │ │ │ │ │ └── ThemePatch.kt
│ │ │ │ │ └── thumbnails
│ │ │ │ │ │ ├── AlternativeThumbnailsPatch.kt
│ │ │ │ │ │ └── BypassImageRegionRestrictionsPatch.kt
│ │ │ │ ├── misc
│ │ │ │ │ ├── announcements
│ │ │ │ │ │ └── AnnouncementsPatch.kt
│ │ │ │ │ ├── autorepeat
│ │ │ │ │ │ └── AutoRepeatPatch.kt
│ │ │ │ │ ├── backgroundplayback
│ │ │ │ │ │ ├── BackgroundPlaybackPatch.kt
│ │ │ │ │ │ └── Fingerprints.kt
│ │ │ │ │ ├── check
│ │ │ │ │ │ └── CheckEnvironmentPatch.kt
│ │ │ │ │ ├── debugging
│ │ │ │ │ │ ├── EnableDebuggingPatch.kt
│ │ │ │ │ │ └── Fingerprints.kt
│ │ │ │ │ ├── dimensions
│ │ │ │ │ │ └── spoof
│ │ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ │ └── SpoofDeviceDimensionsPatch.kt
│ │ │ │ │ ├── dns
│ │ │ │ │ │ └── CheckWatchHistoryDomainNameResolutionPatch.kt
│ │ │ │ │ ├── extension
│ │ │ │ │ │ ├── SharedExtensionPatch.kt
│ │ │ │ │ │ └── hooks
│ │ │ │ │ │ │ └── ApplicationInitHook.kt
│ │ │ │ │ ├── fix
│ │ │ │ │ │ ├── backtoexitgesture
│ │ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ │ └── FixBackToExitGesturePatch.kt
│ │ │ │ │ │ ├── playback
│ │ │ │ │ │ │ ├── SpoofVideoStreamsPatch.kt
│ │ │ │ │ │ │ └── UserAgentClientSpoofPatch.kt
│ │ │ │ │ │ └── playbackspeed
│ │ │ │ │ │ │ ├── FIxPlaybackSpeedWhilePlayingPatch.kt
│ │ │ │ │ │ │ └── Fingerprints.kt
│ │ │ │ │ ├── gms
│ │ │ │ │ │ ├── AccountCredentialsInvalidTextPatch.kt
│ │ │ │ │ │ ├── Constants.kt
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ └── GmsCoreSupportPatch.kt
│ │ │ │ │ ├── hapticfeedback
│ │ │ │ │ │ ├── DisableHapticFeedbackPatch.kt
│ │ │ │ │ │ └── Fingerprints.kt
│ │ │ │ │ ├── imageurlhook
│ │ │ │ │ │ ├── CronetImageUrlHook.kt
│ │ │ │ │ │ └── Fingerprints.kt
│ │ │ │ │ ├── links
│ │ │ │ │ │ ├── BypassURLRedirectsPatch.kt
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ └── OpenLinksExternallyPatch.kt
│ │ │ │ │ ├── litho
│ │ │ │ │ │ └── filter
│ │ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ │ └── LithoFilterPatch.kt
│ │ │ │ │ ├── navigation
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ └── NavigationBarHookPatch.kt
│ │ │ │ │ ├── playercontrols
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ └── PlayerControlsPatch.kt
│ │ │ │ │ ├── playertype
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ └── PlayerTypeHookPatch.kt
│ │ │ │ │ ├── playservice
│ │ │ │ │ │ └── VersionCheckPatch.kt
│ │ │ │ │ ├── privacy
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ └── RemoveTrackingQueryParameterPatch.kt
│ │ │ │ │ ├── recyclerviewtree
│ │ │ │ │ │ └── hook
│ │ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ │ └── RecyclerViewTreeHookPatch.kt
│ │ │ │ │ ├── settings
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ └── SettingsPatch.kt
│ │ │ │ │ ├── spoof
│ │ │ │ │ │ ├── SpoofVideoStreamsPatch.kt
│ │ │ │ │ │ └── UserAgentClientSpoofPatch.kt
│ │ │ │ │ └── zoomhaptics
│ │ │ │ │ │ └── ZoomHapticsPatch.kt
│ │ │ │ ├── shared
│ │ │ │ │ └── Fingerprints.kt
│ │ │ │ └── video
│ │ │ │ │ ├── audio
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── ForceOriginalAudioPatch.kt
│ │ │ │ │ ├── hdr
│ │ │ │ │ ├── DisableHdrPatch.kt
│ │ │ │ │ └── Fingerprints.kt
│ │ │ │ │ ├── information
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── VideoInformationPatch.kt
│ │ │ │ │ ├── playerresponse
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── PlayerResponseMethodHookPatch.kt
│ │ │ │ │ ├── quality
│ │ │ │ │ ├── AdvancedVideoQualityMenuPatch.kt
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ ├── RememberVideoQualityPatch.kt
│ │ │ │ │ └── VideoQualityPatch.kt
│ │ │ │ │ ├── speed
│ │ │ │ │ ├── PlaybackSpeedPatch.kt
│ │ │ │ │ ├── button
│ │ │ │ │ │ └── PlaybackSpeedButtonPatch.kt
│ │ │ │ │ ├── custom
│ │ │ │ │ │ ├── CustomPlaybackSpeedPatch.kt
│ │ │ │ │ │ └── Fingerprints.kt
│ │ │ │ │ └── remember
│ │ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ │ └── RememberPlaybackSpeedPatch.kt
│ │ │ │ │ ├── videoid
│ │ │ │ │ ├── Fingerprints.kt
│ │ │ │ │ └── VideoIdPatch.kt
│ │ │ │ │ └── videoqualitymenu
│ │ │ │ │ └── RestoreOldVideoQualityMenuPatch.kt
│ │ │ └── yuka
│ │ │ │ └── misc
│ │ │ │ └── unlockpremium
│ │ │ │ ├── Fingerprints.kt
│ │ │ │ └── UnlockPremiumPatch.kt
│ │ │ └── util
│ │ │ ├── BytecodeUtils.kt
│ │ │ ├── CrowdinPreprocessor.kt
│ │ │ ├── ResourceUtils.kt
│ │ │ ├── Utils.kt
│ │ │ └── resource
│ │ │ ├── ArrayResource.kt
│ │ │ ├── BaseResource.kt
│ │ │ └── StringResource.kt
│ │ └── resources
│ │ ├── addresources
│ │ ├── values-af-rZA
│ │ │ └── strings.xml
│ │ ├── values-am-rET
│ │ │ └── strings.xml
│ │ ├── values-ar-rSA
│ │ │ └── strings.xml
│ │ ├── values-as-rIN
│ │ │ └── strings.xml
│ │ ├── values-az-rAZ
│ │ │ └── strings.xml
│ │ ├── values-be-rBY
│ │ │ └── strings.xml
│ │ ├── values-bg-rBG
│ │ │ └── strings.xml
│ │ ├── values-bn-rBD
│ │ │ └── strings.xml
│ │ ├── values-bs-rBA
│ │ │ └── strings.xml
│ │ ├── values-ca-rES
│ │ │ └── strings.xml
│ │ ├── values-cs-rCZ
│ │ │ └── strings.xml
│ │ ├── values-da-rDK
│ │ │ └── strings.xml
│ │ ├── values-de-rDE
│ │ │ └── strings.xml
│ │ ├── values-el-rGR
│ │ │ └── strings.xml
│ │ ├── values-es-rES
│ │ │ └── strings.xml
│ │ ├── values-et-rEE
│ │ │ └── strings.xml
│ │ ├── values-eu-rES
│ │ │ └── strings.xml
│ │ ├── values-fa-rIR
│ │ │ └── strings.xml
│ │ ├── values-fi-rFI
│ │ │ └── strings.xml
│ │ ├── values-fil-rPH
│ │ │ └── strings.xml
│ │ ├── values-fr-rFR
│ │ │ └── strings.xml
│ │ ├── values-ga-rIE
│ │ │ └── strings.xml
│ │ ├── values-gl-rES
│ │ │ └── strings.xml
│ │ ├── values-gu-rIN
│ │ │ └── strings.xml
│ │ ├── values-hi-rIN
│ │ │ └── strings.xml
│ │ ├── values-hr-rHR
│ │ │ └── strings.xml
│ │ ├── values-hu-rHU
│ │ │ └── strings.xml
│ │ ├── values-hy-rAM
│ │ │ └── strings.xml
│ │ ├── values-in-rID
│ │ │ └── strings.xml
│ │ ├── values-is-rIS
│ │ │ └── strings.xml
│ │ ├── values-it-rIT
│ │ │ └── strings.xml
│ │ ├── values-iw-rIL
│ │ │ └── strings.xml
│ │ ├── values-ja-rJP
│ │ │ └── strings.xml
│ │ ├── values-ka-rGE
│ │ │ └── strings.xml
│ │ ├── values-kk-rKZ
│ │ │ └── strings.xml
│ │ ├── values-km-rKH
│ │ │ └── strings.xml
│ │ ├── values-kn-rIN
│ │ │ └── strings.xml
│ │ ├── values-ko-rKR
│ │ │ └── strings.xml
│ │ ├── values-ky-rKG
│ │ │ └── strings.xml
│ │ ├── values-lo-rLA
│ │ │ └── strings.xml
│ │ ├── values-lt-rLT
│ │ │ └── strings.xml
│ │ ├── values-lv-rLV
│ │ │ └── strings.xml
│ │ ├── values-mk-rMK
│ │ │ └── strings.xml
│ │ ├── values-ml-rIN
│ │ │ └── strings.xml
│ │ ├── values-mn-rMN
│ │ │ └── strings.xml
│ │ ├── values-mr-rIN
│ │ │ └── strings.xml
│ │ ├── values-ms-rMY
│ │ │ └── strings.xml
│ │ ├── values-my-rMM
│ │ │ └── strings.xml
│ │ ├── values-nb-rNO
│ │ │ └── strings.xml
│ │ ├── values-ne-rIN
│ │ │ └── strings.xml
│ │ ├── values-nl-rNL
│ │ │ └── strings.xml
│ │ ├── values-or-rIN
│ │ │ └── strings.xml
│ │ ├── values-pa-rIN
│ │ │ └── strings.xml
│ │ ├── values-pl-rPL
│ │ │ └── strings.xml
│ │ ├── values-pt-rBR
│ │ │ └── strings.xml
│ │ ├── values-pt-rPT
│ │ │ └── strings.xml
│ │ ├── values-ro-rRO
│ │ │ └── strings.xml
│ │ ├── values-ru-rRU
│ │ │ └── strings.xml
│ │ ├── values-si-rLK
│ │ │ └── strings.xml
│ │ ├── values-sk-rSK
│ │ │ └── strings.xml
│ │ ├── values-sl-rSI
│ │ │ └── strings.xml
│ │ ├── values-sq-rAL
│ │ │ └── strings.xml
│ │ ├── values-sr-rCS
│ │ │ └── strings.xml
│ │ ├── values-sr-rSP
│ │ │ └── strings.xml
│ │ ├── values-sv-rSE
│ │ │ └── strings.xml
│ │ ├── values-sw-rKE
│ │ │ └── strings.xml
│ │ ├── values-ta-rIN
│ │ │ └── strings.xml
│ │ ├── values-te-rIN
│ │ │ └── strings.xml
│ │ ├── values-th-rTH
│ │ │ └── strings.xml
│ │ ├── values-tr-rTR
│ │ │ └── strings.xml
│ │ ├── values-uk-rUA
│ │ │ └── strings.xml
│ │ ├── values-ur-rIN
│ │ │ └── strings.xml
│ │ ├── values-uz-rUZ
│ │ │ └── strings.xml
│ │ ├── values-vi-rVN
│ │ │ └── strings.xml
│ │ ├── values-zh-rCN
│ │ │ └── strings.xml
│ │ ├── values-zh-rTW
│ │ │ └── strings.xml
│ │ ├── values-zu-rZA
│ │ │ └── strings.xml
│ │ └── values
│ │ │ ├── arrays.xml
│ │ │ └── strings.xml
│ │ ├── change-header
│ │ ├── revanced-borderless
│ │ │ ├── drawable-hdpi
│ │ │ │ ├── yt_wordmark_header_dark.png
│ │ │ │ └── yt_wordmark_header_light.png
│ │ │ ├── drawable-mdpi
│ │ │ │ ├── yt_wordmark_header_dark.png
│ │ │ │ └── yt_wordmark_header_light.png
│ │ │ ├── drawable-xhdpi
│ │ │ │ ├── yt_wordmark_header_dark.png
│ │ │ │ └── yt_wordmark_header_light.png
│ │ │ ├── drawable-xxhdpi
│ │ │ │ ├── yt_wordmark_header_dark.png
│ │ │ │ └── yt_wordmark_header_light.png
│ │ │ └── drawable-xxxhdpi
│ │ │ │ ├── yt_wordmark_header_dark.png
│ │ │ │ └── yt_wordmark_header_light.png
│ │ └── revanced
│ │ │ ├── drawable-hdpi
│ │ │ ├── yt_wordmark_header_dark.png
│ │ │ └── yt_wordmark_header_light.png
│ │ │ ├── drawable-mdpi
│ │ │ ├── yt_wordmark_header_dark.png
│ │ │ └── yt_wordmark_header_light.png
│ │ │ ├── drawable-xhdpi
│ │ │ ├── yt_wordmark_header_dark.png
│ │ │ └── yt_wordmark_header_light.png
│ │ │ ├── drawable-xxhdpi
│ │ │ ├── yt_wordmark_header_dark.png
│ │ │ └── yt_wordmark_header_light.png
│ │ │ └── drawable-xxxhdpi
│ │ │ ├── yt_wordmark_header_dark.png
│ │ │ └── yt_wordmark_header_light.png
│ │ ├── copyvideourl
│ │ ├── drawable
│ │ │ ├── revanced_yt_copy.xml
│ │ │ └── revanced_yt_copy_timestamp.xml
│ │ └── host
│ │ │ └── layout
│ │ │ └── youtube_controls_bottom_ui_container.xml
│ │ ├── custom-branding
│ │ ├── mipmap-hdpi
│ │ │ ├── adaptiveproduct_youtube_background_color_108.png
│ │ │ ├── adaptiveproduct_youtube_foreground_color_108.png
│ │ │ ├── ic_launcher.png
│ │ │ └── ic_launcher_round.png
│ │ ├── mipmap-mdpi
│ │ │ ├── adaptiveproduct_youtube_background_color_108.png
│ │ │ ├── adaptiveproduct_youtube_foreground_color_108.png
│ │ │ ├── ic_launcher.png
│ │ │ └── ic_launcher_round.png
│ │ ├── mipmap-xhdpi
│ │ │ ├── adaptiveproduct_youtube_background_color_108.png
│ │ │ ├── adaptiveproduct_youtube_foreground_color_108.png
│ │ │ ├── ic_launcher.png
│ │ │ └── ic_launcher_round.png
│ │ ├── mipmap-xxhdpi
│ │ │ ├── adaptiveproduct_youtube_background_color_108.png
│ │ │ ├── adaptiveproduct_youtube_foreground_color_108.png
│ │ │ ├── ic_launcher.png
│ │ │ └── ic_launcher_round.png
│ │ └── mipmap-xxxhdpi
│ │ │ ├── adaptiveproduct_youtube_background_color_108.png
│ │ │ ├── adaptiveproduct_youtube_foreground_color_108.png
│ │ │ ├── ic_launcher.png
│ │ │ └── ic_launcher_round.png
│ │ ├── downloads
│ │ ├── drawable
│ │ │ └── revanced_yt_download_button.xml
│ │ └── host
│ │ │ └── layout
│ │ │ └── youtube_controls_bottom_ui_container.xml
│ │ ├── seekbar
│ │ └── values
│ │ │ └── attrs.xml
│ │ ├── settings
│ │ ├── drawable
│ │ │ ├── revanced_settings_circle_background.xml
│ │ │ ├── revanced_settings_cursor.xml
│ │ │ ├── revanced_settings_icon.xml
│ │ │ ├── revanced_settings_screen_00_about.xml
│ │ │ ├── revanced_settings_screen_01_ads.xml
│ │ │ ├── revanced_settings_screen_02_alt_thumbnails.xml
│ │ │ ├── revanced_settings_screen_03_feed.xml
│ │ │ ├── revanced_settings_screen_04_general.xml
│ │ │ ├── revanced_settings_screen_05_player.xml
│ │ │ ├── revanced_settings_screen_06_shorts.xml
│ │ │ ├── revanced_settings_screen_07_seekbar.xml
│ │ │ ├── revanced_settings_screen_08_swipe_controls.xml
│ │ │ ├── revanced_settings_screen_09_return_youtube_dislike.xml
│ │ │ ├── revanced_settings_screen_10_sponsorblock.xml
│ │ │ ├── revanced_settings_screen_11_misc.xml
│ │ │ └── revanced_settings_screen_12_video.xml
│ │ ├── host
│ │ │ └── values
│ │ │ │ └── styles.xml
│ │ ├── layout
│ │ │ ├── revanced_color_dot_widget.xml
│ │ │ ├── revanced_color_picker.xml
│ │ │ ├── revanced_preference_with_icon_no_search_result.xml
│ │ │ ├── revanced_search_suggestion_item.xml
│ │ │ └── revanced_settings_with_toolbar.xml
│ │ ├── menu
│ │ │ └── revanced_search_menu.xml
│ │ └── xml
│ │ │ ├── revanced_prefs.xml
│ │ │ └── revanced_prefs_icons.xml
│ │ ├── speedbutton
│ │ ├── drawable
│ │ │ └── revanced_playback_speed_dialog_button.xml
│ │ └── host
│ │ │ └── layout
│ │ │ └── youtube_controls_bottom_ui_container.xml
│ │ ├── sponsorblock
│ │ ├── drawable
│ │ │ ├── revanced_sb_adjust.xml
│ │ │ ├── revanced_sb_backward.xml
│ │ │ ├── revanced_sb_compare.xml
│ │ │ ├── revanced_sb_edit.xml
│ │ │ ├── revanced_sb_forward.xml
│ │ │ ├── revanced_sb_logo.xml
│ │ │ ├── revanced_sb_publish.xml
│ │ │ └── revanced_sb_voting.xml
│ │ ├── host
│ │ │ └── layout
│ │ │ │ └── youtube_controls_layout.xml
│ │ └── layout
│ │ │ ├── revanced_sb_inline_sponsor_overlay.xml
│ │ │ ├── revanced_sb_new_segment.xml
│ │ │ └── revanced_sb_skip_sponsor_button.xml
│ │ └── swipecontrols
│ │ └── drawable
│ │ ├── revanced_ic_sc_brightness_auto.xml
│ │ ├── revanced_ic_sc_brightness_full.xml
│ │ ├── revanced_ic_sc_brightness_high.xml
│ │ ├── revanced_ic_sc_brightness_low.xml
│ │ ├── revanced_ic_sc_brightness_medium.xml
│ │ ├── revanced_ic_sc_volume_high.xml
│ │ ├── revanced_ic_sc_volume_low.xml
│ │ ├── revanced_ic_sc_volume_mute.xml
│ │ └── revanced_ic_sc_volume_normal.xml
└── stub
│ ├── build.gradle.kts
│ └── src
│ └── main
│ └── java
│ └── android
│ └── os
│ └── Build.java
└── settings.gradle.kts
/.editorconfig:
--------------------------------------------------------------------------------
1 | [*.{kt,kts}]
2 | ktlint_code_style = intellij_idea
3 | ktlint_standard_no-wildcard-imports = disabled
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | #
2 | # https://help.github.com/articles/dealing-with-line-endings/
3 | #
4 | # Linux start script should use lf
5 | /gradlew text eol=lf
6 |
7 | # These are Windows script files and should use crlf
8 | *.bat text eol=crlf
9 |
10 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/config.yml:
--------------------------------------------------------------------------------
1 | blank_issues_enabled: false
2 | contact_links:
3 | - name: 🗨 Discussions
4 | url: https://github.com/revanced/revanced-suggestions/discussions
5 | about: Have something unspecific to ReVanced Patches in mind? Search for or start a new discussion!
--------------------------------------------------------------------------------
/.github/config.yml:
--------------------------------------------------------------------------------
1 | firstPRMergeComment: >
2 | Thank you for contributing to ReVanced. Join us on [Discord](https://revanced.app/discord) to receive a role for your contribution.
3 |
--------------------------------------------------------------------------------
/.github/dependabot.yml:
--------------------------------------------------------------------------------
1 | version: 2
2 | updates:
3 | - package-ecosystem: github-actions
4 | labels: []
5 | directory: /
6 | target-branch: dev
7 | schedule:
8 | interval: monthly
9 |
10 | - package-ecosystem: npm
11 | labels: []
12 | directory: /
13 | target-branch: dev
14 | schedule:
15 | interval: monthly
16 |
17 | - package-ecosystem: gradle
18 | labels: []
19 | directory: /
20 | target-branch: dev
21 | schedule:
22 | interval: monthly
23 |
--------------------------------------------------------------------------------
/.github/workflows/update-gradle-wrapper.yml:
--------------------------------------------------------------------------------
1 | name: Update Gradle wrapper
2 |
3 | on:
4 | schedule:
5 | - cron: "0 0 1 * *"
6 | workflow_dispatch:
7 |
8 | jobs:
9 | update:
10 | runs-on: ubuntu-latest
11 | steps:
12 | - name: Checkout
13 | uses: actions/checkout@v4
14 |
15 | - name: Update Gradle Wrapper
16 | uses: gradle-update/update-gradle-wrapper-action@v1
17 | with:
18 | target-branch: dev
19 |
--------------------------------------------------------------------------------
/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /shelf/
3 | /workspace.xml
4 | # Datasource local storage ignored files
5 | /dataSources/
6 | /dataSources.local.xml
7 | # Editor-based HTTP Client requests
8 | /httpRequests/
9 | /kotlinc.xml
10 |
--------------------------------------------------------------------------------
/.idea/discord.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/.idea/git_toolbox_prj.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/crowdin.yml:
--------------------------------------------------------------------------------
1 | project_id_env: "CROWDIN_PROJECT_ID"
2 | api_token_env: "CROWDIN_PERSONAL_TOKEN"
3 |
4 | preserve_hierarchy: false
5 | files:
6 | - source: patches/src/main/resources/addresources/values/strings.xml
7 | translation: patches/src/main/resources/addresources/values-%android_code%/strings.xml
8 | skip_untranslated_strings: true
9 |
--------------------------------------------------------------------------------
/extensions/all/misc/adb/hide-adb/build.gradle.kts:
--------------------------------------------------------------------------------
1 | android {
2 | namespace = "app.revanced.extension"
3 |
4 | defaultConfig {
5 | minSdk = 21
6 | }
7 |
8 | compileOptions {
9 | sourceCompatibility = JavaVersion.VERSION_11
10 | targetCompatibility = JavaVersion.VERSION_11
11 | }
12 | }
13 |
14 | dependencies {
15 | compileOnly(libs.annotation)
16 | }
17 |
--------------------------------------------------------------------------------
/extensions/all/misc/adb/hide-adb/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/extensions/all/misc/connectivity/wifi/spoof/spoof-wifi/build.gradle.kts:
--------------------------------------------------------------------------------
1 | android {
2 | namespace = "app.revanced.extension"
3 |
4 | compileOptions {
5 | sourceCompatibility = JavaVersion.VERSION_11
6 | targetCompatibility = JavaVersion.VERSION_11
7 | }
8 | }
9 |
10 | dependencies {
11 | compileOnly(libs.annotation)
12 | }
13 |
--------------------------------------------------------------------------------
/extensions/all/misc/connectivity/wifi/spoof/spoof-wifi/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/extensions/all/misc/directory/documentsprovider/export-internal-data-documents-provider/build.gradle.kts:
--------------------------------------------------------------------------------
1 | android {
2 | namespace = "app.revanced.extension"
3 |
4 | defaultConfig {
5 | minSdk = 21
6 | }
7 |
8 | compileOptions {
9 | sourceCompatibility = JavaVersion.VERSION_11
10 | targetCompatibility = JavaVersion.VERSION_11
11 | }
12 | }
13 |
14 | dependencies {
15 | compileOnly(libs.annotation)
16 | }
17 |
--------------------------------------------------------------------------------
/extensions/all/misc/directory/documentsprovider/export-internal-data-documents-provider/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/extensions/all/misc/screencapture/remove-screen-capture-restriction/build.gradle.kts:
--------------------------------------------------------------------------------
1 | android {
2 | namespace = "app.revanced.extension"
3 |
4 | defaultConfig {
5 | minSdk = 21
6 | }
7 |
8 | compileOptions {
9 | sourceCompatibility = JavaVersion.VERSION_11
10 | targetCompatibility = JavaVersion.VERSION_11
11 | }
12 | }
13 |
14 | dependencies {
15 | compileOnly(libs.annotation)
16 | }
17 |
--------------------------------------------------------------------------------
/extensions/all/misc/screencapture/remove-screen-capture-restriction/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/extensions/all/misc/screenshot/remove-screenshot-restriction/build.gradle.kts:
--------------------------------------------------------------------------------
1 | android {
2 | namespace = "app.revanced.extension"
3 |
4 | defaultConfig {
5 | minSdk = 21
6 | }
7 |
8 | compileOptions {
9 | sourceCompatibility = JavaVersion.VERSION_11
10 | targetCompatibility = JavaVersion.VERSION_11
11 | }
12 | }
13 |
14 | dependencies {
15 | compileOnly(libs.annotation)
16 | }
17 |
--------------------------------------------------------------------------------
/extensions/all/misc/screenshot/remove-screenshot-restriction/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/extensions/boostforreddit/build.gradle.kts:
--------------------------------------------------------------------------------
1 | dependencies {
2 | compileOnly(project(":extensions:shared:library"))
3 | compileOnly(project(":extensions:boostforreddit:stub"))
4 | }
5 |
--------------------------------------------------------------------------------
/extensions/boostforreddit/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/extensions/boostforreddit/stub/build.gradle.kts:
--------------------------------------------------------------------------------
1 | plugins {
2 | id(libs.plugins.android.library.get().pluginId)
3 | }
4 |
5 | android {
6 | namespace = "app.revanced.extension"
7 | compileSdk = 34
8 |
9 | defaultConfig {
10 | minSdk = 24
11 | }
12 |
13 | compileOptions {
14 | sourceCompatibility = JavaVersion.VERSION_11
15 | targetCompatibility = JavaVersion.VERSION_11
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/extensions/boostforreddit/stub/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/extensions/boostforreddit/stub/src/main/java/com/rubenmayayo/reddit/ui/activities/WebViewActivity.java:
--------------------------------------------------------------------------------
1 | package com.rubenmayayo.reddit.ui.activities;
2 |
3 | import android.app.Activity;
4 |
5 | public class WebViewActivity extends Activity {
6 | }
7 |
--------------------------------------------------------------------------------
/extensions/messenger/build.gradle.kts:
--------------------------------------------------------------------------------
1 | dependencies {
2 | compileOnly(project(":extensions:shared:library"))
3 | }
4 |
--------------------------------------------------------------------------------
/extensions/messenger/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/extensions/messenger/src/main/java/app/revanced/extension/messenger/metaai/RemoveMetaAIPatch.java:
--------------------------------------------------------------------------------
1 | package app.revanced.extension.messenger.metaai;
2 |
3 | @SuppressWarnings("unused")
4 | public class RemoveMetaAIPatch {
5 | public static boolean overrideConfigBool(long id, boolean value) {
6 | // It seems like all configs starting with 363219 are related to Meta AI.
7 | // A list of specific ones that need disabling would probably be better,
8 | // but these config numbers seem to change slightly with each update.
9 | // These first 6 digits don't though.
10 | if (Long.toString(id).startsWith("363219"))
11 | return false;
12 |
13 | return value;
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/extensions/music/build.gradle.kts:
--------------------------------------------------------------------------------
1 | android {
2 | defaultConfig {
3 | minSdk = 26
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/extensions/music/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/extensions/nunl/build.gradle.kts:
--------------------------------------------------------------------------------
1 | dependencies {
2 | compileOnly(project(":extensions:shared:library"))
3 | compileOnly(project(":extensions:nunl:stub"))
4 | }
5 |
--------------------------------------------------------------------------------
/extensions/nunl/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/extensions/nunl/stub/build.gradle.kts:
--------------------------------------------------------------------------------
1 | plugins {
2 | id(libs.plugins.android.library.get().pluginId)
3 | }
4 |
5 | android {
6 | namespace = "app.revanced.extension"
7 | compileSdk = 34
8 |
9 | defaultConfig {
10 | minSdk = 26
11 | }
12 |
13 | compileOptions {
14 | sourceCompatibility = JavaVersion.VERSION_17
15 | targetCompatibility = JavaVersion.VERSION_17
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/extensions/nunl/stub/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/extensions/nunl/stub/src/main/java/nl/nu/performance/api/client/interfaces/Block.java:
--------------------------------------------------------------------------------
1 | package nl.nu.performance.api.client.interfaces;
2 |
3 | public class Block {
4 |
5 | }
6 |
--------------------------------------------------------------------------------
/extensions/nunl/stub/src/main/java/nl/nu/performance/api/client/objects/DividerBlock.java:
--------------------------------------------------------------------------------
1 | package nl.nu.performance.api.client.objects;
2 |
3 | import nl.nu.performance.api.client.interfaces.Block;
4 |
5 | public class DividerBlock extends Block {
6 |
7 | }
8 |
--------------------------------------------------------------------------------
/extensions/nunl/stub/src/main/java/nl/nu/performance/api/client/objects/DpgBannerBlock.java:
--------------------------------------------------------------------------------
1 | package nl.nu.performance.api.client.objects;
2 |
3 | import nl.nu.performance.api.client.interfaces.Block;
4 |
5 | public class DpgBannerBlock extends Block {
6 |
7 | }
8 |
--------------------------------------------------------------------------------
/extensions/nunl/stub/src/main/java/nl/nu/performance/api/client/objects/HeaderBlock.java:
--------------------------------------------------------------------------------
1 | package nl.nu.performance.api.client.objects;
2 |
3 | import nl.nu.performance.api.client.interfaces.Block;
4 |
5 | public class HeaderBlock extends Block {
6 | public final StyledText getTitle() {
7 | throw new UnsupportedOperationException("Stub");
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/extensions/nunl/stub/src/main/java/nl/nu/performance/api/client/objects/Link.java:
--------------------------------------------------------------------------------
1 | package nl.nu.performance.api.client.objects;
2 |
3 | import nl.nu.performance.api.client.unions.LinkFlavor;
4 |
5 | public class Link {
6 | public final StyledText getTitle() {
7 | throw new UnsupportedOperationException("Stub");
8 | }
9 |
10 | public final LinkFlavor getLinkFlavor() {
11 | throw new UnsupportedOperationException("Stub");
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/extensions/nunl/stub/src/main/java/nl/nu/performance/api/client/objects/LinkBlock.java:
--------------------------------------------------------------------------------
1 | package nl.nu.performance.api.client.objects;
2 |
3 | import android.os.Parcelable;
4 | import nl.nu.performance.api.client.interfaces.Block;
5 |
6 | public abstract class LinkBlock extends Block implements Parcelable {
7 | public final Link getLink() {
8 | throw new UnsupportedOperationException("Stub");
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/extensions/nunl/stub/src/main/java/nl/nu/performance/api/client/objects/StyledText.java:
--------------------------------------------------------------------------------
1 | package nl.nu.performance.api.client.objects;
2 |
3 | public class StyledText {
4 | public final String getText() {
5 | throw new UnsupportedOperationException("Stub");
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/extensions/nunl/stub/src/main/java/nl/nu/performance/api/client/unions/LinkFlavor.java:
--------------------------------------------------------------------------------
1 | package nl.nu.performance.api.client.unions;
2 |
3 | public interface LinkFlavor {
4 | }
5 |
--------------------------------------------------------------------------------
/extensions/nunl/stub/src/main/java/nl/nu/performance/api/client/unions/SmallArticleLinkFlavor.java:
--------------------------------------------------------------------------------
1 | package nl.nu.performance.api.client.unions;
2 |
3 | public class SmallArticleLinkFlavor implements LinkFlavor {
4 | public final Boolean isPartner() {
5 | throw new UnsupportedOperationException("Stub");
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/extensions/primevideo/build.gradle.kts:
--------------------------------------------------------------------------------
1 | dependencies {
2 | compileOnly(project(":extensions:shared:library"))
3 | compileOnly(project(":extensions:primevideo:stub"))
4 | }
5 |
--------------------------------------------------------------------------------
/extensions/primevideo/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/extensions/primevideo/stub/build.gradle.kts:
--------------------------------------------------------------------------------
1 | plugins {
2 | id(libs.plugins.android.library.get().pluginId)
3 | }
4 |
5 | android {
6 | namespace = "app.revanced.extension"
7 | compileSdk = 34
8 |
9 | defaultConfig {
10 | minSdk = 21
11 | }
12 |
13 | compileOptions {
14 | sourceCompatibility = JavaVersion.VERSION_11
15 | targetCompatibility = JavaVersion.VERSION_11
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/extensions/primevideo/stub/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/extensions/primevideo/stub/src/main/java/com/amazon/avod/fsm/SimpleTrigger.java:
--------------------------------------------------------------------------------
1 | package com.amazon.avod.fsm;
2 |
3 | public final class SimpleTrigger implements Trigger {
4 | public SimpleTrigger(T triggerType) {
5 | }
6 | }
--------------------------------------------------------------------------------
/extensions/primevideo/stub/src/main/java/com/amazon/avod/fsm/StateBase.java:
--------------------------------------------------------------------------------
1 | package com.amazon.avod.fsm;
2 |
3 | public abstract class StateBase {
4 | // This method orginally has protected access (modified in patch code).
5 | public void doTrigger(Trigger trigger) {
6 | }
7 | }
--------------------------------------------------------------------------------
/extensions/primevideo/stub/src/main/java/com/amazon/avod/fsm/Trigger.java:
--------------------------------------------------------------------------------
1 | package com.amazon.avod.fsm;
2 |
3 | public interface Trigger {
4 | }
--------------------------------------------------------------------------------
/extensions/primevideo/stub/src/main/java/com/amazon/avod/media/TimeSpan.java:
--------------------------------------------------------------------------------
1 | package com.amazon.avod.media;
2 |
3 | public final class TimeSpan {
4 | public long getTotalMilliseconds() {
5 | throw new UnsupportedOperationException();
6 | }
7 | }
--------------------------------------------------------------------------------
/extensions/primevideo/stub/src/main/java/com/amazon/avod/media/ads/AdBreak.java:
--------------------------------------------------------------------------------
1 | package com.amazon.avod.media.ads;
2 |
3 | import com.amazon.avod.media.TimeSpan;
4 |
5 | public interface AdBreak {
6 | TimeSpan getDurationExcludingAux();
7 | }
--------------------------------------------------------------------------------
/extensions/primevideo/stub/src/main/java/com/amazon/avod/media/ads/internal/state/AdBreakState.java:
--------------------------------------------------------------------------------
1 | package com.amazon.avod.media.ads.internal.state;
2 |
3 | public abstract class AdBreakState extends AdEnabledPlaybackState {
4 | }
--------------------------------------------------------------------------------
/extensions/primevideo/stub/src/main/java/com/amazon/avod/media/ads/internal/state/AdBreakTrigger.java:
--------------------------------------------------------------------------------
1 | package com.amazon.avod.media.ads.internal.state;
2 |
3 | import com.amazon.avod.media.ads.AdBreak;
4 | import com.amazon.avod.media.TimeSpan;
5 |
6 | public class AdBreakTrigger {
7 | public AdBreak getBreak() {
8 | throw new UnsupportedOperationException();
9 | }
10 |
11 | public TimeSpan getSeekTarget() {
12 | throw new UnsupportedOperationException();
13 | }
14 |
15 | public TimeSpan getSeekStartPosition() {
16 | throw new UnsupportedOperationException();
17 | }
18 | }
--------------------------------------------------------------------------------
/extensions/primevideo/stub/src/main/java/com/amazon/avod/media/ads/internal/state/AdEnabledPlaybackState.java:
--------------------------------------------------------------------------------
1 | package com.amazon.avod.media.ads.internal.state;
2 |
3 | import com.amazon.avod.fsm.StateBase;
4 | import com.amazon.avod.media.playback.state.PlayerStateType;
5 | import com.amazon.avod.media.playback.state.trigger.PlayerTriggerType;
6 |
7 | public class AdEnabledPlaybackState extends StateBase {
8 | }
--------------------------------------------------------------------------------
/extensions/primevideo/stub/src/main/java/com/amazon/avod/media/ads/internal/state/AdEnabledPlayerTriggerType.java:
--------------------------------------------------------------------------------
1 | package com.amazon.avod.media.ads.internal.state;
2 |
3 | public enum AdEnabledPlayerTriggerType {
4 | NO_MORE_ADS_SKIP_TRANSITION
5 | }
--------------------------------------------------------------------------------
/extensions/primevideo/stub/src/main/java/com/amazon/avod/media/ads/internal/state/ServerInsertedAdBreakState.java:
--------------------------------------------------------------------------------
1 | package com.amazon.avod.media.ads.internal.state;
2 |
3 | public class ServerInsertedAdBreakState extends AdBreakState {
4 | }
--------------------------------------------------------------------------------
/extensions/primevideo/stub/src/main/java/com/amazon/avod/media/playback/VideoPlayer.java:
--------------------------------------------------------------------------------
1 | package com.amazon.avod.media.playback;
2 |
3 | public interface VideoPlayer {
4 | long getCurrentPosition();
5 |
6 | void seekTo(long positionMs);
7 | }
--------------------------------------------------------------------------------
/extensions/primevideo/stub/src/main/java/com/amazon/avod/media/playback/state/PlayerStateType.java:
--------------------------------------------------------------------------------
1 | package com.amazon.avod.media.playback.state;
2 |
3 | public interface PlayerStateType {
4 | }
--------------------------------------------------------------------------------
/extensions/primevideo/stub/src/main/java/com/amazon/avod/media/playback/state/trigger/PlayerTriggerType.java:
--------------------------------------------------------------------------------
1 | package com.amazon.avod.media.playback.state.trigger;
2 |
3 | public interface PlayerTriggerType {
4 | }
--------------------------------------------------------------------------------
/extensions/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | -dontobfuscate
2 | -dontoptimize
3 | -keepattributes *
4 | -keep class app.revanced.** {
5 | *;
6 | }
7 | -keep class com.google.** {
8 | *;
9 | }
10 |
--------------------------------------------------------------------------------
/extensions/reddit/build.gradle.kts:
--------------------------------------------------------------------------------
1 | dependencies {
2 | compileOnly(project(":extensions:reddit:stub"))
3 | }
4 |
--------------------------------------------------------------------------------
/extensions/reddit/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/extensions/reddit/stub/build.gradle.kts:
--------------------------------------------------------------------------------
1 | plugins {
2 | id(libs.plugins.android.library.get().pluginId)
3 | }
4 |
5 | android {
6 | namespace = "app.revanced.extension"
7 | compileSdk = 34
8 |
9 | defaultConfig {
10 | minSdk = 24
11 | }
12 |
13 | compileOptions {
14 | sourceCompatibility = JavaVersion.VERSION_11
15 | targetCompatibility = JavaVersion.VERSION_11
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/extensions/reddit/stub/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/extensions/reddit/stub/src/main/java/com/reddit/domain/model/ILink.java:
--------------------------------------------------------------------------------
1 | package com.reddit.domain.model;
2 |
3 | public class ILink {
4 | public boolean getPromoted() {
5 | throw new UnsupportedOperationException("Stub");
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/extensions/shared/build.gradle.kts:
--------------------------------------------------------------------------------
1 | dependencies {
2 | implementation(project(":extensions:shared:library"))
3 | }
4 |
--------------------------------------------------------------------------------
/extensions/shared/library/build.gradle.kts:
--------------------------------------------------------------------------------
1 | plugins {
2 | id("com.android.library")
3 | }
4 |
5 | android {
6 | namespace = "app.revanced.extension"
7 | compileSdk = 34
8 |
9 | defaultConfig {
10 | minSdk = 23
11 | }
12 |
13 | compileOptions {
14 | sourceCompatibility = JavaVersion.VERSION_17
15 | targetCompatibility = JavaVersion.VERSION_17
16 | }
17 | }
18 |
19 | dependencies {
20 | compileOnly(libs.annotation)
21 | }
22 |
--------------------------------------------------------------------------------
/extensions/shared/library/src/main/java/app/revanced/extension/shared/fixes/slink/ResolveResult.java:
--------------------------------------------------------------------------------
1 | package app.revanced.extension.shared.fixes.slink;
2 |
3 | public enum ResolveResult {
4 | // Let app handle rest of stuff
5 | CONTINUE,
6 | // Start app, to make it cache its access_token
7 | ACCESS_TOKEN_START,
8 | // Don't do anything - we started resolving
9 | DO_NOTHING
10 | }
11 |
--------------------------------------------------------------------------------
/extensions/shared/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/extensions/spotify/build.gradle.kts:
--------------------------------------------------------------------------------
1 | dependencies {
2 | compileOnly(project(":extensions:shared:library"))
3 | compileOnly(project(":extensions:spotify:stub"))
4 | compileOnly(libs.annotation)
5 | }
6 |
7 | android {
8 | defaultConfig {
9 | minSdk = 24
10 | }
11 |
12 | compileOptions {
13 | sourceCompatibility = JavaVersion.VERSION_11
14 | targetCompatibility = JavaVersion.VERSION_11
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/extensions/spotify/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/extensions/spotify/stub/build.gradle.kts:
--------------------------------------------------------------------------------
1 | plugins {
2 | id(libs.plugins.android.library.get().pluginId)
3 | }
4 |
5 | android {
6 | namespace = "app.revanced.extension"
7 | compileSdk = 34
8 |
9 | defaultConfig {
10 | minSdk = 26
11 | }
12 |
13 | compileOptions {
14 | sourceCompatibility = JavaVersion.VERSION_17
15 | targetCompatibility = JavaVersion.VERSION_17
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/extensions/spotify/stub/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/extensions/spotify/stub/src/main/java/com/spotify/home/evopage/homeapi/proto/Section.java:
--------------------------------------------------------------------------------
1 | package com.spotify.home.evopage.homeapi.proto;
2 |
3 | public final class Section {
4 | public static final int VIDEO_BRAND_AD_FIELD_NUMBER = 20;
5 | public static final int IMAGE_BRAND_AD_FIELD_NUMBER = 21;
6 | public int featureTypeCase_;
7 | }
8 |
--------------------------------------------------------------------------------
/extensions/spotify/stub/src/main/java/com/spotify/remoteconfig/internal/AccountAttribute.java:
--------------------------------------------------------------------------------
1 | package com.spotify.remoteconfig.internal;
2 |
3 | public final class AccountAttribute {
4 | public Object value_;
5 | }
6 |
--------------------------------------------------------------------------------
/extensions/spotify/stub/src/main/java/com/spotify/useraccount/v1/AccountAttribute.java:
--------------------------------------------------------------------------------
1 | package com.spotify.useraccount.v1;
2 |
3 | /**
4 | * Used for target 8.6.98.900. Class is still present in newer app targets.
5 | */
6 | public class AccountAttribute {
7 | public Object value_;
8 | }
9 |
--------------------------------------------------------------------------------
/extensions/syncforreddit/build.gradle.kts:
--------------------------------------------------------------------------------
1 | dependencies {
2 | compileOnly(project(":extensions:shared:library"))
3 | compileOnly(project(":extensions:syncforreddit:stub"))
4 | compileOnly(libs.annotation)
5 | }
6 |
--------------------------------------------------------------------------------
/extensions/syncforreddit/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/extensions/syncforreddit/stub/build.gradle.kts:
--------------------------------------------------------------------------------
1 | plugins {
2 | id(libs.plugins.android.library.get().pluginId)
3 | }
4 |
5 | android {
6 | namespace = "app.revanced.extension"
7 | compileSdk = 34
8 |
9 | defaultConfig {
10 | minSdk = 24
11 | }
12 |
13 | compileOptions {
14 | sourceCompatibility = JavaVersion.VERSION_11
15 | targetCompatibility = JavaVersion.VERSION_11
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/extensions/syncforreddit/stub/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/extensions/syncforreddit/stub/src/main/java/com/laurencedawson/reddit_sync/ui/activities/WebViewActivity.java:
--------------------------------------------------------------------------------
1 | package com.laurencedawson.reddit_sync.ui.activities;
2 |
3 | import android.app.Activity;
4 |
5 | public class WebViewActivity extends Activity {
6 | }
7 |
--------------------------------------------------------------------------------
/extensions/tiktok/build.gradle.kts:
--------------------------------------------------------------------------------
1 | dependencies {
2 | compileOnly(project(":extensions:shared:library"))
3 | compileOnly(project(":extensions:tiktok:stub"))
4 | compileOnly(libs.annotation)
5 | }
6 |
7 | android {
8 | defaultConfig {
9 | minSdk = 22
10 | }
11 |
12 | compileOptions {
13 | sourceCompatibility = JavaVersion.VERSION_11
14 | targetCompatibility = JavaVersion.VERSION_11
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/extensions/tiktok/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/extensions/tiktok/src/main/java/app/revanced/extension/tiktok/cleardisplay/RememberClearDisplayPatch.java:
--------------------------------------------------------------------------------
1 | package app.revanced.extension.tiktok.cleardisplay;
2 |
3 | import app.revanced.extension.tiktok.settings.Settings;
4 |
5 | @SuppressWarnings("unused")
6 | public class RememberClearDisplayPatch {
7 | public static boolean getClearDisplayState() {
8 | return Settings.CLEAR_DISPLAY.get();
9 | }
10 | public static void rememberClearDisplayState(boolean newState) {
11 | Settings.CLEAR_DISPLAY.save(newState);
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/extensions/tiktok/src/main/java/app/revanced/extension/tiktok/download/DownloadsPatch.java:
--------------------------------------------------------------------------------
1 | package app.revanced.extension.tiktok.download;
2 |
3 | import app.revanced.extension.tiktok.settings.Settings;
4 |
5 | @SuppressWarnings("unused")
6 | public class DownloadsPatch {
7 | public static String getDownloadPath() {
8 | return Settings.DOWNLOAD_PATH.get();
9 | }
10 |
11 | public static boolean shouldRemoveWatermark() {
12 | return Settings.DOWNLOAD_WATERMARK.get();
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/extensions/tiktok/src/main/java/app/revanced/extension/tiktok/feedfilter/AdsFilter.java:
--------------------------------------------------------------------------------
1 | package app.revanced.extension.tiktok.feedfilter;
2 |
3 | import app.revanced.extension.tiktok.settings.Settings;
4 | import com.ss.android.ugc.aweme.feed.model.Aweme;
5 |
6 | public class AdsFilter implements IFilter {
7 | @Override
8 | public boolean getEnabled() {
9 | return Settings.REMOVE_ADS.get();
10 | }
11 |
12 | @Override
13 | public boolean getFiltered(Aweme item) {
14 | return item.isAd() || item.isWithPromotionalMusic();
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/extensions/tiktok/src/main/java/app/revanced/extension/tiktok/feedfilter/IFilter.java:
--------------------------------------------------------------------------------
1 | package app.revanced.extension.tiktok.feedfilter;
2 |
3 | import com.ss.android.ugc.aweme.feed.model.Aweme;
4 |
5 | public interface IFilter {
6 | boolean getEnabled();
7 |
8 | boolean getFiltered(Aweme item);
9 | }
10 |
--------------------------------------------------------------------------------
/extensions/tiktok/src/main/java/app/revanced/extension/tiktok/feedfilter/ImageVideoFilter.java:
--------------------------------------------------------------------------------
1 | package app.revanced.extension.tiktok.feedfilter;
2 |
3 | import app.revanced.extension.tiktok.settings.Settings;
4 | import com.ss.android.ugc.aweme.feed.model.Aweme;
5 |
6 | public class ImageVideoFilter implements IFilter {
7 | @Override
8 | public boolean getEnabled() {
9 | return Settings.HIDE_IMAGE.get();
10 | }
11 |
12 | @Override
13 | public boolean getFiltered(Aweme item) {
14 | return item.isImage() || item.isPhotoMode();
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/extensions/tiktok/src/main/java/app/revanced/extension/tiktok/feedfilter/LiveFilter.java:
--------------------------------------------------------------------------------
1 | package app.revanced.extension.tiktok.feedfilter;
2 |
3 | import app.revanced.extension.tiktok.settings.Settings;
4 | import com.ss.android.ugc.aweme.feed.model.Aweme;
5 |
6 | public class LiveFilter implements IFilter {
7 | @Override
8 | public boolean getEnabled() {
9 | return Settings.HIDE_LIVE.get();
10 | }
11 |
12 | @Override
13 | public boolean getFiltered(Aweme item) {
14 | return item.isLive() || item.isLiveReplay();
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/extensions/tiktok/src/main/java/app/revanced/extension/tiktok/feedfilter/ShopFilter.java:
--------------------------------------------------------------------------------
1 | package app.revanced.extension.tiktok.feedfilter;
2 |
3 | import app.revanced.extension.tiktok.settings.Settings;
4 | import com.ss.android.ugc.aweme.feed.model.Aweme;
5 |
6 | public class ShopFilter implements IFilter {
7 | private static final String SHOP_INFO = "placeholder_product_id";
8 | @Override
9 | public boolean getEnabled() {
10 | return Settings.HIDE_SHOP.get();
11 | }
12 |
13 | @Override
14 | public boolean getFiltered(Aweme item) {
15 | return item.getShareUrl().contains(SHOP_INFO);
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/extensions/tiktok/src/main/java/app/revanced/extension/tiktok/feedfilter/StoryFilter.java:
--------------------------------------------------------------------------------
1 | package app.revanced.extension.tiktok.feedfilter;
2 |
3 | import app.revanced.extension.tiktok.settings.Settings;
4 | import com.ss.android.ugc.aweme.feed.model.Aweme;
5 |
6 | public class StoryFilter implements IFilter {
7 | @Override
8 | public boolean getEnabled() {
9 | return Settings.HIDE_STORY.get();
10 | }
11 |
12 | @Override
13 | public boolean getFiltered(Aweme item) {
14 | return item.getIsTikTokStory();
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/extensions/tiktok/src/main/java/app/revanced/extension/tiktok/settings/SettingsStatus.java:
--------------------------------------------------------------------------------
1 | package app.revanced.extension.tiktok.settings;
2 |
3 | public class SettingsStatus {
4 | public static boolean feedFilterEnabled = false;
5 | public static boolean downloadEnabled = false;
6 | public static boolean simSpoofEnabled = false;
7 |
8 | public static void enableFeedFilter() {
9 | feedFilterEnabled = true;
10 | }
11 |
12 | public static void enableDownload() {
13 | downloadEnabled = true;
14 | }
15 |
16 | public static void enableSimSpoof() {
17 | simSpoofEnabled = true;
18 | }
19 |
20 | public static void load() {
21 |
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/extensions/tiktok/src/main/java/app/revanced/extension/tiktok/speed/PlaybackSpeedPatch.java:
--------------------------------------------------------------------------------
1 | package app.revanced.extension.tiktok.speed;
2 |
3 | import app.revanced.extension.tiktok.settings.Settings;
4 |
5 | public class PlaybackSpeedPatch {
6 | public static void rememberPlaybackSpeed(float newSpeed) {
7 | Settings.REMEMBERED_SPEED.save(newSpeed);
8 | }
9 |
10 | public static float getPlaybackSpeed() {
11 | return Settings.REMEMBERED_SPEED.get();
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/extensions/tiktok/stub/build.gradle.kts:
--------------------------------------------------------------------------------
1 | plugins {
2 | id(libs.plugins.android.library.get().pluginId)
3 | }
4 |
5 | android {
6 | namespace = "app.revanced.extension"
7 | compileSdk = 34
8 |
9 | defaultConfig {
10 | minSdk = 22
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/extensions/tiktok/stub/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/extensions/tiktok/stub/src/main/java/com/bytedance/ies/ugc/aweme/commercialize/compliance/personalization/AdPersonalizationActivity.java:
--------------------------------------------------------------------------------
1 | package com.bytedance.ies.ugc.aweme.commercialize.compliance.personalization;
2 |
3 | import android.app.Activity;
4 |
5 | //Dummy class
6 | public class AdPersonalizationActivity extends Activity { }
7 |
--------------------------------------------------------------------------------
/extensions/tiktok/stub/src/main/java/com/ss/android/ugc/aweme/feed/model/AwemeStatistics.java:
--------------------------------------------------------------------------------
1 | package com.ss.android.ugc.aweme.feed.model;
2 |
3 | public class AwemeStatistics {
4 | public long getPlayCount() {
5 | throw new UnsupportedOperationException("Stub");
6 | }
7 | public long getDiggCount() {
8 | throw new UnsupportedOperationException("Stub");
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/extensions/tiktok/stub/src/main/java/com/ss/android/ugc/aweme/feed/model/FeedItemList.java:
--------------------------------------------------------------------------------
1 | package com.ss.android.ugc.aweme.feed.model;
2 |
3 | import java.util.List;
4 |
5 | //Dummy class
6 | public class FeedItemList {
7 | public List items;
8 | }
9 |
--------------------------------------------------------------------------------
/extensions/tiktok/stub/src/main/java/com/ss/android/ugc/aweme/follow/presenter/FollowFeed.java:
--------------------------------------------------------------------------------
1 | package com.ss.android.ugc.aweme.follow.presenter;
2 |
3 | import com.ss.android.ugc.aweme.feed.model.Aweme;
4 |
5 | //Dummy class
6 | public class FollowFeed {
7 | public Aweme aweme;
8 | }
9 |
--------------------------------------------------------------------------------
/extensions/tiktok/stub/src/main/java/com/ss/android/ugc/aweme/follow/presenter/FollowFeedList.java:
--------------------------------------------------------------------------------
1 | package com.ss.android.ugc.aweme.follow.presenter;
2 |
3 | import java.util.List;
4 |
5 | //Dummy class
6 | public class FollowFeedList {
7 | public List mItems;
8 | }
9 |
--------------------------------------------------------------------------------
/extensions/tudortmund/build.gradle.kts:
--------------------------------------------------------------------------------
1 | dependencies {
2 | compileOnly(libs.appcompat)
3 | }
4 |
--------------------------------------------------------------------------------
/extensions/tudortmund/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/extensions/tumblr/build.gradle.kts:
--------------------------------------------------------------------------------
1 | dependencies {
2 | compileOnly(project(":extensions:tumblr:stub"))
3 | }
4 |
5 | android {
6 | defaultConfig {
7 | minSdk = 26
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/extensions/tumblr/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/extensions/tumblr/stub/build.gradle.kts:
--------------------------------------------------------------------------------
1 | android.namespace = "app.revanced.extension"
2 |
3 | plugins {
4 | id(libs.plugins.android.library.get().pluginId)
5 | }
6 |
7 | android {
8 | namespace = "app.revanced.extension"
9 | compileSdk = 34
10 |
11 | defaultConfig {
12 | minSdk = 26
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/extensions/tumblr/stub/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/extensions/tumblr/stub/src/main/java/com/tumblr/rumblr/model/TimelineObject.java:
--------------------------------------------------------------------------------
1 | package com.tumblr.rumblr.model;
2 |
3 | public class TimelineObject {
4 | public final T getData() {
5 | throw new UnsupportedOperationException("Stub");
6 | }
7 |
8 | }
9 |
--------------------------------------------------------------------------------
/extensions/tumblr/stub/src/main/java/com/tumblr/rumblr/model/TimelineObjectType.java:
--------------------------------------------------------------------------------
1 | package com.tumblr.rumblr.model;
2 |
3 | public enum TimelineObjectType {
4 | }
5 |
--------------------------------------------------------------------------------
/extensions/tumblr/stub/src/main/java/com/tumblr/rumblr/model/Timelineable.java:
--------------------------------------------------------------------------------
1 | package com.tumblr.rumblr.model;
2 |
3 | public interface Timelineable {
4 | TimelineObjectType getTimelineObjectType();
5 | }
6 |
--------------------------------------------------------------------------------
/extensions/twitch/build.gradle.kts:
--------------------------------------------------------------------------------
1 | dependencies {
2 | compileOnly(project(":extensions:shared:library"))
3 | compileOnly(project(":extensions:twitch:stub"))
4 | compileOnly(libs.okhttp)
5 | compileOnly(libs.retrofit)
6 | compileOnly(libs.annotation)
7 | compileOnly(libs.appcompat)
8 | }
9 |
10 | android {
11 | defaultConfig {
12 | minSdk = 21
13 | }
14 |
15 | compileOptions {
16 | sourceCompatibility = JavaVersion.VERSION_11
17 | targetCompatibility = JavaVersion.VERSION_11
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/extensions/twitch/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/extensions/twitch/src/main/java/app/revanced/extension/twitch/Utils.java:
--------------------------------------------------------------------------------
1 | package app.revanced.extension.twitch;
2 |
3 | public class Utils {
4 |
5 | /* Called from SettingsPatch smali */
6 | public static int getStringId(String name) {
7 | return app.revanced.extension.shared.Utils.getResourceIdentifier(name, "string");
8 | }
9 |
10 | /* Called from SettingsPatch smali */
11 | public static int getDrawableId(String name) {
12 | return app.revanced.extension.shared.Utils.getResourceIdentifier(name, "drawable");
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/extensions/twitch/src/main/java/app/revanced/extension/twitch/api/PurpleAdblockApi.java:
--------------------------------------------------------------------------------
1 | package app.revanced.extension.twitch.api;
2 |
3 | import okhttp3.ResponseBody;
4 | import retrofit2.Call;
5 | import retrofit2.http.GET;
6 | import retrofit2.http.Url;
7 |
8 | /* only used for service pings */
9 | public interface PurpleAdblockApi {
10 | @GET /* root */
11 | Call ping(@Url String baseUrl);
12 | }
--------------------------------------------------------------------------------
/extensions/twitch/src/main/java/app/revanced/extension/twitch/patches/AudioAdsPatch.java:
--------------------------------------------------------------------------------
1 | package app.revanced.extension.twitch.patches;
2 |
3 | import app.revanced.extension.twitch.settings.Settings;
4 |
5 | @SuppressWarnings("unused")
6 | public class AudioAdsPatch {
7 | public static boolean shouldBlockAudioAds() {
8 | return Settings.BLOCK_AUDIO_ADS.get();
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/extensions/twitch/src/main/java/app/revanced/extension/twitch/patches/AutoClaimChannelPointsPatch.java:
--------------------------------------------------------------------------------
1 | package app.revanced.extension.twitch.patches;
2 |
3 | import app.revanced.extension.twitch.settings.Settings;
4 |
5 | @SuppressWarnings("unused")
6 | public class AutoClaimChannelPointsPatch {
7 | public static boolean shouldAutoClaim() {
8 | return Settings.AUTO_CLAIM_CHANNEL_POINTS.get();
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/extensions/twitch/src/main/java/app/revanced/extension/twitch/patches/DebugModePatch.java:
--------------------------------------------------------------------------------
1 | package app.revanced.extension.twitch.patches;
2 |
3 | import app.revanced.extension.twitch.settings.Settings;
4 |
5 | @SuppressWarnings("unused")
6 | public class DebugModePatch {
7 | public static boolean isDebugModeEnabled() {
8 | return Settings.TWITCH_DEBUG_MODE.get();
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/extensions/twitch/src/main/java/app/revanced/extension/twitch/patches/EmbeddedAdsPatch.java:
--------------------------------------------------------------------------------
1 | package app.revanced.extension.twitch.patches;
2 |
3 | import app.revanced.extension.twitch.api.RequestInterceptor;
4 |
5 | @SuppressWarnings("unused")
6 | public class EmbeddedAdsPatch {
7 | public static RequestInterceptor createRequestInterceptor() {
8 | return new RequestInterceptor();
9 | }
10 | }
--------------------------------------------------------------------------------
/extensions/twitch/src/main/java/app/revanced/extension/twitch/patches/VideoAdsPatch.java:
--------------------------------------------------------------------------------
1 | package app.revanced.extension.twitch.patches;
2 |
3 | import app.revanced.extension.twitch.settings.Settings;
4 |
5 | @SuppressWarnings("unused")
6 | public class VideoAdsPatch {
7 | public static boolean shouldBlockVideoAds() {
8 | return Settings.BLOCK_VIDEO_ADS.get();
9 | }
10 | }
--------------------------------------------------------------------------------
/extensions/twitch/stub/build.gradle.kts:
--------------------------------------------------------------------------------
1 | plugins {
2 | id(libs.plugins.android.library.get().pluginId)
3 | }
4 |
5 | android {
6 | namespace = "app.revanced.extension"
7 | compileSdk = 34
8 |
9 | defaultConfig {
10 | minSdk = 21
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/extensions/twitch/stub/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/extensions/twitch/stub/src/main/java/tv/twitch/android/feature/settings/menu/SettingsMenuGroup.java:
--------------------------------------------------------------------------------
1 | package tv.twitch.android.feature.settings.menu;
2 |
3 | import java.util.List;
4 |
5 | // Dummy
6 | public final class SettingsMenuGroup {
7 | public SettingsMenuGroup(List