mirror of
https://github.com/ReVanced/revanced-patches.git
synced 2026-01-16 07:43:56 +00:00
Compare commits
27 Commits
v5.47.0-de
...
v5.48.0-de
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
da836b667c | ||
|
|
44e7dbcf4d | ||
|
|
195c239000 | ||
|
|
c47beae213 | ||
|
|
cebcfab86a | ||
|
|
71c6cb569e | ||
|
|
6bb6281149 | ||
|
|
16bd96e2bb | ||
|
|
8f3f4c95bb | ||
|
|
da02d68587 | ||
|
|
a429824bb7 | ||
|
|
e0f33468e6 | ||
|
|
315931cbf8 | ||
|
|
dc69f2433e | ||
|
|
73e43b2a49 | ||
|
|
918f04793f | ||
|
|
f1a9537f01 | ||
|
|
1f4f252c81 | ||
|
|
2b560f5fe9 | ||
|
|
f8bd1239cc | ||
|
|
c825ebda37 | ||
|
|
255c00b183 | ||
|
|
0ea3491227 | ||
|
|
5d437b08dd | ||
|
|
018d176914 | ||
|
|
9a77beea8a | ||
|
|
ded8370207 |
110
CHANGELOG.md
110
CHANGELOG.md
@@ -1,3 +1,113 @@
|
||||
# [5.48.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v5.48.0-dev.4...v5.48.0-dev.5) (2025-12-30)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **Disney+ - Skip ads:** Remove unsupported package names ([#6422](https://github.com/ReVanced/revanced-patches/issues/6422)) ([44e7dbc](https://github.com/ReVanced/revanced-patches/commit/44e7dbcf4d7eaf94dd0164baba847d3e19250154))
|
||||
|
||||
# [5.48.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v5.48.0-dev.3...v5.48.0-dev.4) (2025-12-29)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **Strava:** Add `Block Snowplow tracking` patch ([#6413](https://github.com/ReVanced/revanced-patches/issues/6413)) ([c47beae](https://github.com/ReVanced/revanced-patches/commit/c47beae21376dd17ab8bc09afe73e9094481bde9))
|
||||
|
||||
# [5.48.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.48.0-dev.2...v5.48.0-dev.3) (2025-12-28)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Fix compilation error introduced in `6bb6281` ([#6409](https://github.com/ReVanced/revanced-patches/issues/6409)) ([71c6cb5](https://github.com/ReVanced/revanced-patches/commit/71c6cb569ebf7b93cf73ee391839e5220557ce7c))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **Instagram - Hides navigation buttons:** Add more buttons to hide ([#6390](https://github.com/ReVanced/revanced-patches/issues/6390)) ([6bb6281](https://github.com/ReVanced/revanced-patches/commit/6bb62811493da04812cc3e392e68d874f95cbef9))
|
||||
|
||||
# [5.48.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.48.0-dev.1...v5.48.0-dev.2) (2025-12-27)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **Strava:** Add `Enable password login` patch ([#6396](https://github.com/ReVanced/revanced-patches/issues/6396)) ([8f3f4c9](https://github.com/ReVanced/revanced-patches/commit/8f3f4c95bb8f151fc9a2c272bf7d0e905c2f01fc))
|
||||
|
||||
# [5.48.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.47.0...v5.48.0-dev.1) (2025-12-23)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Fix compilation error introduced in dc69f243 ([#6392](https://github.com/ReVanced/revanced-patches/issues/6392)) ([a429824](https://github.com/ReVanced/revanced-patches/commit/a429824bb77b49aea14b0b54f2204ae24d5209a1))
|
||||
* **YouTube - Hide layout components:** Hide new type of crowdfunding box ([#6380](https://github.com/ReVanced/revanced-patches/issues/6380)) ([dc69f24](https://github.com/ReVanced/revanced-patches/commit/dc69f2433e2650654e2dffdd76b0b0c8a52bf515))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **ProtonVPN:** Add `Unlock split tunneling` patch ([#6353](https://github.com/ReVanced/revanced-patches/issues/6353)) ([e0f3346](https://github.com/ReVanced/revanced-patches/commit/e0f33468e6e96b9f10cf35ec67622d6488528c90))
|
||||
* **SBS On Demand:** Add `Remove ads` patch ([#6378](https://github.com/ReVanced/revanced-patches/issues/6378)) ([315931c](https://github.com/ReVanced/revanced-patches/commit/315931cbf8f61cd4b3a54ace1ff03685d748614c))
|
||||
|
||||
# [5.47.0](https://github.com/ReVanced/revanced-patches/compare/v5.46.0...v5.47.0) (2025-12-18)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **Instagram - Disable signature check:** Change patch to default excluded ([#6283](https://github.com/ReVanced/revanced-patches/issues/6283)) ([bb745b5](https://github.com/ReVanced/revanced-patches/commit/bb745b555b3808b7679c5995319aa365630fbd76))
|
||||
* **Lightroom:** Add `Disable version check` patch to fix opening the app ([#6315](https://github.com/ReVanced/revanced-patches/issues/6315)) ([018d176](https://github.com/ReVanced/revanced-patches/commit/018d176914a06a30e9007a3eb2e6b0f459078413))
|
||||
* **Reddit - Hide ads:** Update patch for new versions of Reddit ([#6342](https://github.com/ReVanced/revanced-patches/issues/6342)) ([f8bd123](https://github.com/ReVanced/revanced-patches/commit/f8bd1239cc0f0bd1c2dca39f846951bf512891e3))
|
||||
* **Spotify:** Make patches work with latest versions again ([#6359](https://github.com/ReVanced/revanced-patches/issues/6359)) ([34830ba](https://github.com/ReVanced/revanced-patches/commit/34830ba63b436146064f0f89f948d51cd0cb9146))
|
||||
* **YouTube - Hide layout components:** Fix "Hide Subscribe button" in channel page not working ([#6363](https://github.com/ReVanced/revanced-patches/issues/6363)) ([ded8370](https://github.com/ReVanced/revanced-patches/commit/ded83702077701aac8a8749d71bf7376427f37d6))
|
||||
* **YouTube - Hide player flyout menu items:** Allow hiding audio menu with 'Android No SDK' client type ([9495cf4](https://github.com/ReVanced/revanced-patches/commit/9495cf49ef8a872be64de6c971c1919b4b9a8720))
|
||||
* **YouTube - Sanitize sharing links:** Handle non hierarchical urls ([654d091](https://github.com/ReVanced/revanced-patches/commit/654d091e650cda37650b57cbf3ba6f1cdd6d47d3))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **Disney+ - SkipAds:** Add other package names the patch is compatible with ([#6372](https://github.com/ReVanced/revanced-patches/issues/6372)) ([1f4f252](https://github.com/ReVanced/revanced-patches/commit/1f4f252c81e9a89267f6e37548e66027b1bc1a1a))
|
||||
* **Disney+:** Add `Skip ads` patch ([#6343](https://github.com/ReVanced/revanced-patches/issues/6343)) ([6bd7dca](https://github.com/ReVanced/revanced-patches/commit/6bd7dca75bd2ea335a596aa93a8b767d39be5f83))
|
||||
* **IdAustria - Remove device integrity check:** Update patch to work with latest version ([#6360](https://github.com/ReVanced/revanced-patches/issues/6360)) ([0ea3491](https://github.com/ReVanced/revanced-patches/commit/0ea3491227fc50c03555d43d3fec78eb82906b26))
|
||||
* **Instagram:** Add `Anonymous story viewing` patch ([#6263](https://github.com/ReVanced/revanced-patches/issues/6263)) ([94ae84a](https://github.com/ReVanced/revanced-patches/commit/94ae84ad0fc3a9197c82d5356301d464730c3b17))
|
||||
* **Instagram:** Add `Disable auto story flipping` patch ([#6262](https://github.com/ReVanced/revanced-patches/issues/6262)) ([2f0de15](https://github.com/ReVanced/revanced-patches/commit/2f0de15e67e4f99ed6ecdc136d04cceb23b0d069))
|
||||
* **Instagram:** Add `Disable Reels scrolling` patch ([#6317](https://github.com/ReVanced/revanced-patches/issues/6317)) ([0928dcd](https://github.com/ReVanced/revanced-patches/commit/0928dcd00dc2a9c1eef9a23c1e26ff5dc9ee670a))
|
||||
* **Letterboxd:** Add `Hide ads` patch ([#6309](https://github.com/ReVanced/revanced-patches/issues/6309)) ([0af0ee9](https://github.com/ReVanced/revanced-patches/commit/0af0ee92c48bb2ffc332197e05439e20c5c05d83))
|
||||
* **Peacock TV:** Add `Hide ads` patch ([#6348](https://github.com/ReVanced/revanced-patches/issues/6348)) ([847ee18](https://github.com/ReVanced/revanced-patches/commit/847ee189a971e6d4a99823998569f8e561b8319c))
|
||||
* **ProtonVPN:** Add `Remove delay` patch ([#6326](https://github.com/ReVanced/revanced-patches/issues/6326)) ([bbd8932](https://github.com/ReVanced/revanced-patches/commit/bbd8932b2e740aff96ba047332e541bff3e09436))
|
||||
* **Spoof SIM provider:** Spoof additional TelephonyManager methods ([#6293](https://github.com/ReVanced/revanced-patches/issues/6293)) ([ac583d4](https://github.com/ReVanced/revanced-patches/commit/ac583d40d0f4c0e6544e3661ff3e82a25912f2b0))
|
||||
* **YouTube - Hide layout components:** Add "Hide cell divider", "Hide featured links", and "Hide featured videos" options ([#6335](https://github.com/ReVanced/revanced-patches/issues/6335)) ([a5d197b](https://github.com/ReVanced/revanced-patches/commit/a5d197b9775b98d7a37bfdee9e5f726d5e04d8cf))
|
||||
* **YouTube - Hide layout components:** Add "Hide Join button" and "Hide Subscribe button" options for channel page ([#6345](https://github.com/ReVanced/revanced-patches/issues/6345)) ([02831a6](https://github.com/ReVanced/revanced-patches/commit/02831a6069fc30ffa3a87f8e4de653d003a2187e))
|
||||
* **YouTube - Hide Shorts components:** Add "Hide auto-dubbed label" and "Hide live preview" options ([#6334](https://github.com/ReVanced/revanced-patches/issues/6334)) ([a7c220a](https://github.com/ReVanced/revanced-patches/commit/a7c220a4aea93ea7ae7005b5760443d7571c4228))
|
||||
|
||||
# [5.47.0-dev.18](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.17...v5.47.0-dev.18) (2025-12-18)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **Disney+ - SkipAds:** Add other package names the patch is compatible with ([#6372](https://github.com/ReVanced/revanced-patches/issues/6372)) ([1f4f252](https://github.com/ReVanced/revanced-patches/commit/1f4f252c81e9a89267f6e37548e66027b1bc1a1a))
|
||||
|
||||
# [5.47.0-dev.17](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.16...v5.47.0-dev.17) (2025-12-18)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **Reddit - Hide ads:** Update patch for new versions of Reddit ([#6342](https://github.com/ReVanced/revanced-patches/issues/6342)) ([f8bd123](https://github.com/ReVanced/revanced-patches/commit/f8bd1239cc0f0bd1c2dca39f846951bf512891e3))
|
||||
|
||||
# [5.47.0-dev.16](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.15...v5.47.0-dev.16) (2025-12-15)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **Lightroom:** Add `Disable version check` patch to fix opening the app ([#6315](https://github.com/ReVanced/revanced-patches/issues/6315)) ([018d176](https://github.com/ReVanced/revanced-patches/commit/018d176914a06a30e9007a3eb2e6b0f459078413))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **IdAustria - Remove device integrity check:** Update patch to work with latest version ([#6360](https://github.com/ReVanced/revanced-patches/issues/6360)) ([0ea3491](https://github.com/ReVanced/revanced-patches/commit/0ea3491227fc50c03555d43d3fec78eb82906b26))
|
||||
|
||||
# [5.47.0-dev.15](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.14...v5.47.0-dev.15) (2025-12-13)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - Hide layout components:** Fix "Hide Subscribe button" in channel page not working ([#6363](https://github.com/ReVanced/revanced-patches/issues/6363)) ([ded8370](https://github.com/ReVanced/revanced-patches/commit/ded83702077701aac8a8749d71bf7376427f37d6))
|
||||
|
||||
# [5.47.0-dev.14](https://github.com/ReVanced/revanced-patches/compare/v5.47.0-dev.13...v5.47.0-dev.14) (2025-12-13)
|
||||
|
||||
|
||||
|
||||
@@ -97,9 +97,9 @@ Thank you for considering contributing to ReVanced Patches. You can find the con
|
||||
|
||||
To build ReVanced Patches, you can follow the [ReVanced documentation](https://github.com/ReVanced/revanced-documentation).
|
||||
|
||||
## 📜 Licence
|
||||
## 📜 License
|
||||
|
||||
ReVanced Patches is licensed under the GPLv3 license. Please see the [license file](LICENSE) for more information.
|
||||
[tl;dr](https://www.tldrlegal.com/license/gnu-general-public-license-v3-gpl-3) you may copy, distribute and modify ReVanced Patches as long as you track changes/dates in source files.
|
||||
Any modifications to ReVanced Patches must also be made available under the GPL,
|
||||
along with build & install instructions.
|
||||
along with build & install instructions.
|
||||
|
||||
@@ -35,9 +35,12 @@ public final class LayoutComponentsFilter extends Filter {
|
||||
"&list="
|
||||
);
|
||||
|
||||
private static final String PAGE_HEADER_PATH = "page_header.e";
|
||||
|
||||
private final StringTrieSearch exceptions = new StringTrieSearch();
|
||||
private final StringFilterGroup communityPosts;
|
||||
private final StringFilterGroup surveys;
|
||||
private final StringFilterGroup subscribeButton;
|
||||
private final StringFilterGroup notifyMe;
|
||||
private final StringFilterGroup singleItemInformationPanel;
|
||||
private final StringFilterGroup expandableMetadata;
|
||||
@@ -244,8 +247,13 @@ public final class LayoutComponentsFilter extends Filter {
|
||||
"sponsorships"
|
||||
);
|
||||
|
||||
final var crowdfundingBox = new StringFilterGroup(
|
||||
Settings.HIDE_CROWDFUNDING_BOX,
|
||||
"donation_shelf"
|
||||
);
|
||||
|
||||
final var channelWatermark = new StringFilterGroup(
|
||||
Settings.HIDE_VIDEO_CHANNEL_WATERMARK,
|
||||
Settings.HIDE_CHANNEL_WATERMARK,
|
||||
"featured_channel_watermark_overlay"
|
||||
);
|
||||
|
||||
@@ -262,7 +270,7 @@ public final class LayoutComponentsFilter extends Filter {
|
||||
channelProfile = new StringFilterGroup(
|
||||
null,
|
||||
"channel_profile.e",
|
||||
"page_header.e"
|
||||
PAGE_HEADER_PATH
|
||||
);
|
||||
channelProfileBuffer = new ByteArrayFilterGroupList();
|
||||
channelProfileBuffer.addAll(new ByteArrayFilterGroup(
|
||||
@@ -276,13 +284,14 @@ public final class LayoutComponentsFilter extends Filter {
|
||||
new ByteArrayFilterGroup(
|
||||
Settings.HIDE_JOIN_BUTTON,
|
||||
"sponsor_button"
|
||||
),
|
||||
new ByteArrayFilterGroup(
|
||||
Settings.HIDE_SUBSCRIBE_BUTTON_IN_CHANNEL_PAGE,
|
||||
"subscribe_menu"
|
||||
)
|
||||
);
|
||||
|
||||
subscribeButton = new StringFilterGroup(
|
||||
Settings.HIDE_SUBSCRIBE_BUTTON_IN_CHANNEL_PAGE,
|
||||
"subscribe_button"
|
||||
);
|
||||
|
||||
horizontalShelves = new StringFilterGroup(
|
||||
Settings.HIDE_HORIZONTAL_SHELVES,
|
||||
"horizontal_video_shelf.e",
|
||||
@@ -308,6 +317,7 @@ public final class LayoutComponentsFilter extends Filter {
|
||||
compactChannelBar,
|
||||
compactChannelBarInner,
|
||||
communityPosts,
|
||||
crowdfundingBox,
|
||||
emergencyBox,
|
||||
expandableMetadata,
|
||||
forYouShelf,
|
||||
@@ -322,6 +332,7 @@ public final class LayoutComponentsFilter extends Filter {
|
||||
quickActions,
|
||||
relatedVideos,
|
||||
singleItemInformationPanel,
|
||||
subscribeButton,
|
||||
subscribersCommunityGuidelines,
|
||||
subscriptionsChipBar,
|
||||
surveys,
|
||||
@@ -352,6 +363,10 @@ public final class LayoutComponentsFilter extends Filter {
|
||||
return channelProfileBuffer.check(buffer).isFiltered();
|
||||
}
|
||||
|
||||
if (matchedGroup == subscribeButton) {
|
||||
return path.startsWith(PAGE_HEADER_PATH);
|
||||
}
|
||||
|
||||
if (matchedGroup == communityPosts && NavigationBar.isBackButtonVisible()) {
|
||||
// Allow community posts on channel profile page,
|
||||
// or if viewing an individual channel in the feed.
|
||||
@@ -418,7 +433,7 @@ public final class LayoutComponentsFilter extends Filter {
|
||||
* Injection point.
|
||||
*/
|
||||
public static boolean showWatermark() {
|
||||
return !Settings.HIDE_VIDEO_CHANNEL_WATERMARK.get();
|
||||
return !Settings.HIDE_CHANNEL_WATERMARK.get();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -96,7 +96,6 @@ public class Settings extends BaseSettings {
|
||||
public static final BooleanSetting HIDE_CHIPS_SHELF = new BooleanSetting("revanced_hide_chips_shelf", TRUE);
|
||||
public static final BooleanSetting HIDE_COMMUNITY_POSTS = new BooleanSetting("revanced_hide_community_posts", FALSE);
|
||||
public static final BooleanSetting HIDE_COMPACT_BANNER = new BooleanSetting("revanced_hide_compact_banner", TRUE);
|
||||
public static final BooleanSetting HIDE_CROWDFUNDING_BOX = new BooleanSetting("revanced_hide_crowdfunding_box", FALSE, true);
|
||||
public static final BooleanSetting HIDE_DOODLES = new BooleanSetting("revanced_hide_doodles", FALSE, true, "revanced_hide_doodles_user_dialog_message");
|
||||
public static final BooleanSetting HIDE_EXPANDABLE_CARD = new BooleanSetting("revanced_hide_expandable_card", TRUE);
|
||||
public static final BooleanSetting HIDE_FILTER_BAR_FEED_IN_FEED = new BooleanSetting("revanced_hide_filter_bar_feed_in_feed", FALSE, true);
|
||||
@@ -158,6 +157,8 @@ public class Settings extends BaseSettings {
|
||||
public static final BooleanSetting HIDE_CAPTIONS_BUTTON = new BooleanSetting("revanced_hide_captions_button", FALSE);
|
||||
public static final BooleanSetting HIDE_CAST_BUTTON = new BooleanSetting("revanced_hide_cast_button", TRUE, true);
|
||||
public static final BooleanSetting HIDE_CHANNEL_BAR = new BooleanSetting("revanced_hide_channel_bar", FALSE);
|
||||
public static final BooleanSetting HIDE_CHANNEL_WATERMARK = new BooleanSetting("revanced_hide_channel_watermark", TRUE);
|
||||
public static final BooleanSetting HIDE_CROWDFUNDING_BOX = new BooleanSetting("revanced_hide_crowdfunding_box", FALSE, true);
|
||||
public static final BooleanSetting HIDE_EMERGENCY_BOX = new BooleanSetting("revanced_hide_emergency_box", TRUE);
|
||||
public static final BooleanSetting HIDE_ENDSCREEN_CARDS = new BooleanSetting("revanced_hide_endscreen_cards", FALSE);
|
||||
public static final BooleanSetting HIDE_END_SCREEN_SUGGESTED_VIDEO = new BooleanSetting("revanced_end_screen_suggested_video", FALSE, true);
|
||||
@@ -172,7 +173,6 @@ public class Settings extends BaseSettings {
|
||||
public static final BooleanSetting HIDE_RELATED_VIDEOS = new BooleanSetting("revanced_hide_related_videos", FALSE);
|
||||
public static final BooleanSetting HIDE_SUBSCRIBERS_COMMUNITY_GUIDELINES = new BooleanSetting("revanced_hide_subscribers_community_guidelines", TRUE);
|
||||
public static final BooleanSetting HIDE_TIMED_REACTIONS = new BooleanSetting("revanced_hide_timed_reactions", TRUE);
|
||||
public static final BooleanSetting HIDE_VIDEO_CHANNEL_WATERMARK = new BooleanSetting("revanced_hide_channel_watermark", TRUE);
|
||||
public static final BooleanSetting OPEN_VIDEOS_FULLSCREEN_PORTRAIT = new BooleanSetting("revanced_open_videos_fullscreen_portrait", FALSE);
|
||||
public static final BooleanSetting PLAYBACK_SPEED_DIALOG_BUTTON = new BooleanSetting("revanced_playback_speed_dialog_button", FALSE);
|
||||
public static final BooleanSetting VIDEO_QUALITY_DIALOG_BUTTON = new BooleanSetting("revanced_video_quality_dialog_button", FALSE);
|
||||
|
||||
@@ -3,4 +3,4 @@ org.gradle.jvmargs = -Xms512M -Xmx2048M
|
||||
org.gradle.parallel = true
|
||||
android.useAndroidX = true
|
||||
kotlin.code.style = official
|
||||
version = 5.47.0-dev.14
|
||||
version = 5.48.0-dev.5
|
||||
|
||||
@@ -176,6 +176,10 @@ public final class app/revanced/patches/cieid/restrictions/root/BypassRootChecks
|
||||
public static final fun getBypassRootChecksPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/com/sbs/ondemand/tv/RemoveAdsPatchKt {
|
||||
public static final fun getRemoveAdsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/cricbuzz/ads/DisableAdsPatchKt {
|
||||
public static final fun getDisableAdsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
@@ -268,6 +272,10 @@ public final class app/revanced/patches/iconpackstudio/misc/pro/UnlockProPatchKt
|
||||
public static final fun getUnlockProPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/idaustria/detection/deviceintegrity/RemoveDeviceIntegrityChecksPatchKt {
|
||||
public static final fun getRemoveDeviceIntegrityChecksPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/idaustria/detection/root/RootDetectionPatchKt {
|
||||
public static final fun getRootDetectionPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
@@ -352,6 +360,10 @@ public final class app/revanced/patches/lightroom/misc/premium/UnlockPremiumPatc
|
||||
public static final fun getUnlockPremiumPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/lightroom/misc/version/DisableVersionCheckPatchKt {
|
||||
public static final fun getDisableVersionCheckPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/memegenerator/detection/license/LicenseValidationPatchKt {
|
||||
public static final fun getLicenseValidationPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
@@ -637,6 +649,10 @@ public final class app/revanced/patches/protonvpn/delay/RemoveDelayPatchKt {
|
||||
public static final fun getRemoveDelayPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/protonvpn/splittunneling/UnlockSplitTunnelingKt {
|
||||
public static final fun getUnlockSplitTunnelingPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/rar/misc/annoyances/purchasereminder/HidePurchaseReminderPatchKt {
|
||||
public static final fun getHidePurchaseReminderPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
@@ -1172,6 +1188,14 @@ public final class app/revanced/patches/stocard/layout/HideStoryBubblesPatchKt {
|
||||
public static final fun getHideStoryBubblesPatch ()Lapp/revanced/patcher/patch/ResourcePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/strava/password/EnablePasswordLoginPatchKt {
|
||||
public static final fun getEnablePasswordLoginPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/strava/snowplow/BlockSnowplowTrackingPatchKt {
|
||||
public static final fun getBlockSnowplowTrackingPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/strava/subscription/UnlockSubscriptionPatchKt {
|
||||
public static final fun getUnlockSubscriptionPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
package app.revanced.patches.com.sbs.ondemand.tv
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val shouldShowAdvertisingTVFingerprint = fingerprint {
|
||||
returns("Z")
|
||||
custom { method, classDef ->
|
||||
method.name == "getShouldShowAdvertisingTV" &&
|
||||
classDef.type == "Lcom/sbs/ondemand/common/InMemoryStorage;"
|
||||
}
|
||||
}
|
||||
|
||||
internal val shouldShowPauseAdFingerprint = fingerprint {
|
||||
returns("Z")
|
||||
custom { method, classDef ->
|
||||
method.name == "shouldShowPauseAd" &&
|
||||
classDef.type == "Lcom/sbs/ondemand/player/viewmodels/PauseAdController;"
|
||||
}
|
||||
}
|
||||
|
||||
internal val requestAdStreamFingerprint = fingerprint {
|
||||
returns("V")
|
||||
custom { method, classDef ->
|
||||
method.name == "requestAdStream\$player_googleStoreTvRelease" &&
|
||||
classDef.type == "Lcom/sbs/ondemand/player/viewmodels/AdsController;"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
package app.revanced.patches.com.sbs.ondemand.tv
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patches.shared.misc.pairip.license.disableLicenseCheckPatch
|
||||
import app.revanced.util.returnEarly
|
||||
|
||||
@Suppress("unused")
|
||||
val removeAdsPatch = bytecodePatch(
|
||||
name = "Remove ads",
|
||||
description = "Removes pre-roll, pause and on-demand advertisements from SBS On Demand TV.",
|
||||
) {
|
||||
compatibleWith("com.sbs.ondemand.tv")
|
||||
|
||||
dependsOn(disableLicenseCheckPatch)
|
||||
|
||||
execute {
|
||||
shouldShowAdvertisingTVFingerprint.method.returnEarly(true)
|
||||
shouldShowPauseAdFingerprint.method.returnEarly(false)
|
||||
|
||||
// Remove on-demand pre-roll advertisements using exception handling.
|
||||
// Exception handling is used instead of returnEarly() because:
|
||||
// 1. returnEarly() causes black screen when the app waits for ad content that never comes.
|
||||
// 2. SBS app has built-in exception handling in handleProviderFailure().
|
||||
// 3. Exception triggers fallbackToAkamaiProvider() which loads actual content.
|
||||
// 4. This preserves the intended app flow: first try ads, then fail gracefully, then load content.
|
||||
requestAdStreamFingerprint.method.addInstructions(
|
||||
0,
|
||||
"""
|
||||
new-instance v0, Ljava/lang/RuntimeException;
|
||||
const-string v1, "Ad stream disabled"
|
||||
invoke-direct {v0, v1}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V
|
||||
throw v0
|
||||
"""
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package app.revanced.patches.idaustria.detection.deviceintegrity
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
|
||||
internal val isDeviceBootloaderOpenFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC)
|
||||
returns("Ljava/lang/Object;")
|
||||
custom { method, classDef ->
|
||||
method.name == "isDeviceBootloaderOpen" &&
|
||||
classDef.endsWith("/DeviceIntegrityCheckProviderImpl;")
|
||||
}
|
||||
}
|
||||
|
||||
internal val isDeviceRootedFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC)
|
||||
returns("Z")
|
||||
custom { method, classDef ->
|
||||
method.name == "isDeviceRooted" &&
|
||||
classDef.endsWith("/DeviceIntegrityCheckProviderImpl;")
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package app.revanced.patches.idaustria.detection.deviceintegrity
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.util.returnEarly
|
||||
|
||||
|
||||
@Suppress("unused")
|
||||
val removeDeviceIntegrityChecksPatch = bytecodePatch(
|
||||
name = "Remove device integrity checks",
|
||||
description = "Removes the check for root permissions and unlocked bootloader.",
|
||||
) {
|
||||
compatibleWith("at.gv.oe.app")
|
||||
|
||||
execute {
|
||||
isDeviceRootedFingerprint.method.returnEarly(false)
|
||||
|
||||
isDeviceBootloaderOpenFingerprint.method.apply {
|
||||
addInstructions(
|
||||
0,
|
||||
"""
|
||||
const/4 v0, 0x0
|
||||
invoke-static { v0 }, Lkotlin/coroutines/jvm/internal/Boxing;->boxBoolean(Z)Ljava/lang/Boolean;
|
||||
move-result-object v0
|
||||
return-object v0
|
||||
"""
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,31 +0,0 @@
|
||||
package app.revanced.patches.idaustria.detection.root
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
|
||||
internal val attestationSupportedCheckFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC)
|
||||
returns("V")
|
||||
custom { method, classDef ->
|
||||
method.name == "attestationSupportCheck" &&
|
||||
classDef.endsWith("/DeviceIntegrityCheck;")
|
||||
}
|
||||
}
|
||||
|
||||
internal val bootloaderCheckFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC)
|
||||
returns("Z")
|
||||
custom { method, classDef ->
|
||||
method.name == "bootloaderCheck" &&
|
||||
classDef.endsWith("/DeviceIntegrityCheck;")
|
||||
}
|
||||
}
|
||||
|
||||
internal val rootCheckFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC)
|
||||
returns("V")
|
||||
custom { method, classDef ->
|
||||
method.name == "rootCheck" &&
|
||||
classDef.endsWith("/DeviceIntegrityCheck;")
|
||||
}
|
||||
}
|
||||
@@ -1,22 +1,10 @@
|
||||
package app.revanced.patches.idaustria.detection.root
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patches.shared.PATCH_DESCRIPTION_REMOVE_ROOT_DETECTION
|
||||
import app.revanced.patches.shared.PATCH_NAME_REMOVE_ROOT_DETECTION
|
||||
import app.revanced.util.returnEarly
|
||||
import app.revanced.patches.idaustria.detection.deviceintegrity.removeDeviceIntegrityChecksPatch
|
||||
|
||||
@Deprecated("Patch was superseded", ReplaceWith("removeDeviceIntegrityChecksPatch"))
|
||||
@Suppress("unused")
|
||||
val rootDetectionPatch = bytecodePatch(
|
||||
name = PATCH_NAME_REMOVE_ROOT_DETECTION,
|
||||
description = PATCH_DESCRIPTION_REMOVE_ROOT_DETECTION
|
||||
) {
|
||||
compatibleWith("at.gv.oe.app")
|
||||
|
||||
execute {
|
||||
setOf(
|
||||
attestationSupportedCheckFingerprint,
|
||||
bootloaderCheckFingerprint,
|
||||
rootCheckFingerprint,
|
||||
).forEach { it.method.returnEarly(true) }
|
||||
}
|
||||
val rootDetectionPatch = bytecodePatch {
|
||||
dependsOn(removeDeviceIntegrityChecksPatch)
|
||||
}
|
||||
|
||||
@@ -28,6 +28,13 @@ val hideNavigationButtonsPatch = bytecodePatch(
|
||||
|
||||
dependsOn(sharedExtensionPatch)
|
||||
|
||||
val hideHome by booleanOption(
|
||||
key = "hideHome",
|
||||
default = false,
|
||||
title = "Hide Home",
|
||||
description = "Permanently hides the Home button. App starts at next available tab." // On the "homecoming" / current instagram layout.
|
||||
)
|
||||
|
||||
val hideReels by booleanOption(
|
||||
key = "hideReels",
|
||||
default = true,
|
||||
@@ -35,6 +42,27 @@ val hideNavigationButtonsPatch = bytecodePatch(
|
||||
description = "Permanently hides the Reels button."
|
||||
)
|
||||
|
||||
val hideDirect by booleanOption(
|
||||
key = "hideDirect",
|
||||
default = false,
|
||||
title = "Hide Direct",
|
||||
description = "Permanently hides the Direct button."
|
||||
)
|
||||
|
||||
val hideSearch by booleanOption(
|
||||
key = "hideSearch",
|
||||
default = false,
|
||||
title = "Hide Search",
|
||||
description = "Permanently hides the Search button."
|
||||
)
|
||||
|
||||
val hideProfile by booleanOption(
|
||||
key = "hideProfile",
|
||||
default = false,
|
||||
title = "Hide Profile",
|
||||
description = "Permanently hides the Profile button."
|
||||
)
|
||||
|
||||
val hideCreate by booleanOption(
|
||||
key = "hideCreate",
|
||||
default = true,
|
||||
@@ -43,7 +71,7 @@ val hideNavigationButtonsPatch = bytecodePatch(
|
||||
)
|
||||
|
||||
execute {
|
||||
if (!hideReels!! && !hideCreate!!) {
|
||||
if (!hideHome!! &&!hideReels!! && !hideDirect!! && !hideSearch!! && !hideProfile!! && !hideCreate!!) {
|
||||
return@execute Logger.getLogger(this::class.java.name).warning(
|
||||
"No hide navigation buttons options are enabled. No changes made."
|
||||
)
|
||||
@@ -76,6 +104,13 @@ val hideNavigationButtonsPatch = bytecodePatch(
|
||||
"""
|
||||
}
|
||||
|
||||
if (hideHome!!) {
|
||||
addInstructionsAtControlFlowLabel(
|
||||
returnIndex,
|
||||
instructionsRemoveButtonByName("fragment_feed")
|
||||
)
|
||||
}
|
||||
|
||||
if (hideReels!!) {
|
||||
addInstructionsAtControlFlowLabel(
|
||||
returnIndex,
|
||||
@@ -83,12 +118,33 @@ val hideNavigationButtonsPatch = bytecodePatch(
|
||||
)
|
||||
}
|
||||
|
||||
if (hideDirect!!) {
|
||||
addInstructionsAtControlFlowLabel(
|
||||
returnIndex,
|
||||
instructionsRemoveButtonByName("fragment_direct_tab")
|
||||
)
|
||||
}
|
||||
if (hideSearch!!) {
|
||||
addInstructionsAtControlFlowLabel(
|
||||
returnIndex,
|
||||
instructionsRemoveButtonByName("fragment_search")
|
||||
)
|
||||
}
|
||||
|
||||
if (hideCreate!!) {
|
||||
addInstructionsAtControlFlowLabel(
|
||||
returnIndex,
|
||||
instructionsRemoveButtonByName("fragment_share")
|
||||
)
|
||||
}
|
||||
|
||||
if (hideProfile!!) {
|
||||
addInstructionsAtControlFlowLabel(
|
||||
returnIndex,
|
||||
instructionsRemoveButtonByName("fragment_profile")
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
package app.revanced.patches.lightroom.misc.version
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
|
||||
@Suppress("unused")
|
||||
val disableVersionCheckPatch = bytecodePatch(
|
||||
name = "Disable version check",
|
||||
description = "Disables the server-side version check that prevents the app from starting.",
|
||||
) {
|
||||
compatibleWith("com.adobe.lrmobile"("9.3.0"))
|
||||
|
||||
execute {
|
||||
refreshRemoteConfigurationFingerprint.method.apply {
|
||||
val igetIndex = refreshRemoteConfigurationFingerprint.patternMatch!!.endIndex
|
||||
|
||||
// This value represents the server command to clear all version restrictions.
|
||||
val statusForceReset = "-0x2";
|
||||
replaceInstruction(igetIndex, "const/4 v1, $statusForceReset")
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package app.revanced.patches.lightroom.misc.version
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
|
||||
internal val refreshRemoteConfigurationFingerprint = fingerprint {
|
||||
accessFlags(AccessFlags.PUBLIC, AccessFlags.STATIC)
|
||||
strings(
|
||||
"com.adobe.lrmobile.denylisted_version_set_key",
|
||||
"com.adobe.lrmobile.app_min_version_key"
|
||||
)
|
||||
opcodes(
|
||||
Opcode.INVOKE_STATIC,
|
||||
Opcode.MOVE_RESULT_OBJECT,
|
||||
Opcode.IGET, // Overwrite this instruction to disable the check.
|
||||
)
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package app.revanced.patches.protonvpn.splittunneling
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
import com.android.tools.smali.dexlib2.AccessFlags
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
|
||||
internal val enableSplitTunnelingUiFingerprint = fingerprint {
|
||||
strings("currentModeAppNames")
|
||||
opcodes(
|
||||
Opcode.MOVE_OBJECT,
|
||||
Opcode.MOVE_FROM16,
|
||||
Opcode.INVOKE_DIRECT_RANGE
|
||||
)
|
||||
}
|
||||
|
||||
internal val initializeSplitTunnelingSettingsUIFingerprint = fingerprint {
|
||||
custom { method, _ ->
|
||||
method.name == "applyRestrictions"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package app.revanced.patches.protonvpn.splittunneling
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.removeInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.util.getReference
|
||||
import app.revanced.util.indexOfFirstInstructionOrThrow
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||
|
||||
@Suppress("unused")
|
||||
val unlockSplitTunnelingPatch =
|
||||
bytecodePatch(
|
||||
name = "Unlock split tunneling",
|
||||
) {
|
||||
compatibleWith("ch.protonvpn.android")
|
||||
|
||||
execute {
|
||||
val registerIndex = enableSplitTunnelingUiFingerprint.patternMatch!!.endIndex - 1
|
||||
|
||||
enableSplitTunnelingUiFingerprint.method.apply {
|
||||
val register = getInstruction<OneRegisterInstruction>(registerIndex).registerA
|
||||
replaceInstruction(registerIndex, "const/4 v$register, 0x0")
|
||||
}
|
||||
|
||||
initializeSplitTunnelingSettingsUIFingerprint.method.apply {
|
||||
val initSettingsIndex = indexOfFirstInstructionOrThrow {
|
||||
getReference<MethodReference>()?.name == "getSplitTunneling"
|
||||
}
|
||||
removeInstruction(initSettingsIndex - 1)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3,12 +3,8 @@ package app.revanced.patches.reddit.ad.comments
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val hideCommentAdsFingerprint = fingerprint {
|
||||
strings(
|
||||
"link",
|
||||
// CommentPageRepository is not returning a link object
|
||||
"is not returning a link object"
|
||||
)
|
||||
custom { _, classDef ->
|
||||
classDef.sourceFile == "PostDetailPresenter.kt"
|
||||
custom { method, classDef ->
|
||||
method.name == "invokeSuspend" &&
|
||||
classDef.contains("LoadAdsCombinedCall")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package app.revanced.patches.reddit.ad.comments
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstructions
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
|
||||
val hideCommentAdsPatch = bytecodePatch(
|
||||
@@ -8,13 +8,6 @@ val hideCommentAdsPatch = bytecodePatch(
|
||||
) {
|
||||
|
||||
execute {
|
||||
hideCommentAdsFingerprint.method.addInstructions(
|
||||
0,
|
||||
"""
|
||||
new-instance v0, Ljava/lang/Object;
|
||||
invoke-direct {v0}, Ljava/lang/Object;-><init>()V
|
||||
return-object v0
|
||||
""",
|
||||
)
|
||||
hideCommentAdsFingerprint.method.replaceInstructions(0, "return-object p1")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,6 +12,5 @@ internal val adPostFingerprint = fingerprint {
|
||||
|
||||
internal val newAdPostFingerprint = fingerprint {
|
||||
opcodes(Opcode.INVOKE_VIRTUAL)
|
||||
strings("chain", "feedElement")
|
||||
custom { _, classDef -> classDef.sourceFile == "AdElementConverter.kt" }
|
||||
strings("feedElement", "com.reddit.cookie")
|
||||
}
|
||||
|
||||
@@ -3,7 +3,6 @@ package app.revanced.patches.reddit.ad.general
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.removeInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patches.reddit.ad.banner.hideBannerPatch
|
||||
import app.revanced.patches.reddit.ad.comments.hideCommentAdsPatch
|
||||
import app.revanced.patches.reddit.misc.extension.sharedExtensionPatch
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
@@ -16,14 +15,9 @@ import com.android.tools.smali.dexlib2.iface.reference.MethodReference
|
||||
val hideAdsPatch = bytecodePatch(
|
||||
name = "Hide ads",
|
||||
) {
|
||||
dependsOn(hideBannerPatch, hideCommentAdsPatch, sharedExtensionPatch)
|
||||
dependsOn(hideCommentAdsPatch, sharedExtensionPatch)
|
||||
|
||||
// Note that for now, this patch and anything using it will only work on
|
||||
// Reddit 2024.17.0 or older. Newer versions will crash during patching.
|
||||
// See https://github.com/ReVanced/revanced-patches/issues/3099
|
||||
// and https://github.com/iBotPeaches/Apktool/issues/3534.
|
||||
// This constraint is necessary due to dependency on hideBannerPatch.
|
||||
compatibleWith("com.reddit.frontpage"("2024.17.0"))
|
||||
compatibleWith("com.reddit.frontpage")
|
||||
|
||||
execute {
|
||||
// region Filter promoted ads (does not work in popular or latest feed)
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
package app.revanced.patches.strava.password
|
||||
|
||||
import app.revanced.patcher.Fingerprint
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
|
||||
@Suppress("unused")
|
||||
val enablePasswordLoginPatch = bytecodePatch(
|
||||
name = "Enable password login",
|
||||
description = "Re-enables password login after having used an OTP code.",
|
||||
) {
|
||||
compatibleWith("com.strava")
|
||||
|
||||
execute {
|
||||
fun Fingerprint.loadTrueInsteadOfField() =
|
||||
method.replaceInstruction(patternMatch!!.startIndex, "const/4 v0, 0x1")
|
||||
|
||||
logInGetUsePasswordFingerprint.loadTrueInsteadOfField()
|
||||
emailChangeGetUsePasswordFingerprint.loadTrueInsteadOfField()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package app.revanced.patches.strava.password
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
|
||||
internal val logInGetUsePasswordFingerprint = fingerprint {
|
||||
opcodes(Opcode.IGET_BOOLEAN)
|
||||
custom { method, classDef ->
|
||||
method.name == "getUsePassword" && classDef.endsWith("/RequestOtpLogInNetworkResponse;")
|
||||
}
|
||||
}
|
||||
|
||||
internal val emailChangeGetUsePasswordFingerprint = fingerprint {
|
||||
opcodes(Opcode.IGET_BOOLEAN)
|
||||
custom { method, classDef ->
|
||||
method.name == "getUsePassword" && classDef.endsWith("/RequestEmailChangeWithOtpOrPasswordResponse;")
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package app.revanced.patches.strava.privacy
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.util.returnEarly
|
||||
|
||||
@Suppress("unused")
|
||||
val blockSnowplowTrackingPatch = bytecodePatch(
|
||||
name = "Block Snowplow tracking",
|
||||
description = "Blocks Snowplow analytics. See https://snowplow.io for more information.",
|
||||
) {
|
||||
compatibleWith("com.strava")
|
||||
|
||||
execute {
|
||||
// Keep events list empty, otherwise sent to https://c.strava.com/com.snowplowanalytics.snowplow/tp2.
|
||||
insertEventFingerprint.method.returnEarly()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package app.revanced.patches.strava.privacy
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
// https://github.com/snowplow/snowplow-android-tracker/blob/2.2.0/snowplow-tracker/src/main/java/com/snowplowanalytics/snowplow/internal/emitter/storage/SQLiteEventStore.java#L130
|
||||
// Not the exact same code (e.g. returns void instead of long), even though the version number matches.
|
||||
internal val insertEventFingerprint = fingerprint {
|
||||
strings("Added event to database: %s")
|
||||
}
|
||||
@@ -174,6 +174,7 @@ val hideLayoutComponentsPatch = bytecodePatch(
|
||||
),
|
||||
SwitchPreference("revanced_hide_channel_bar"),
|
||||
SwitchPreference("revanced_hide_channel_watermark"),
|
||||
SwitchPreference("revanced_hide_crowdfunding_box"),
|
||||
SwitchPreference("revanced_hide_emergency_box"),
|
||||
SwitchPreference("revanced_hide_info_panels"),
|
||||
SwitchPreference("revanced_hide_join_membership_button"),
|
||||
@@ -229,7 +230,6 @@ val hideLayoutComponentsPatch = bytecodePatch(
|
||||
SwitchPreference("revanced_hide_chips_shelf"),
|
||||
SwitchPreference("revanced_hide_community_posts"),
|
||||
SwitchPreference("revanced_hide_compact_banner"),
|
||||
SwitchPreference("revanced_hide_crowdfunding_box"),
|
||||
SwitchPreference("revanced_hide_expandable_card"),
|
||||
SwitchPreference("revanced_hide_floating_microphone_button"),
|
||||
SwitchPreference(
|
||||
|
||||
@@ -232,9 +232,6 @@ However, enabling this will also log some user data such as your IP address."</s
|
||||
<string name="revanced_hide_compact_banner_title">Hide compact banners</string>
|
||||
<string name="revanced_hide_compact_banner_summary_on">Compact banners are hidden</string>
|
||||
<string name="revanced_hide_compact_banner_summary_off">Compact banners are shown</string>
|
||||
<string name="revanced_hide_crowdfunding_box_title">Hide crowdfunding box</string>
|
||||
<string name="revanced_hide_crowdfunding_box_summary_on">Crowdfunding box is hidden</string>
|
||||
<string name="revanced_hide_crowdfunding_box_summary_off">Crowdfunding box is shown</string>
|
||||
<string name="revanced_hide_expandable_card_title">Hide expandable card</string>
|
||||
<string name="revanced_hide_expandable_card_summary_on">Expandable card under videos is hidden</string>
|
||||
<string name="revanced_hide_expandable_card_summary_off">Expandable card under videos is shown</string>
|
||||
@@ -300,8 +297,11 @@ If a Doodle is currently showing in your region and this hide setting is on, the
|
||||
<string name="revanced_hide_channel_bar_summary_on">Channel bar is hidden</string>
|
||||
<string name="revanced_hide_channel_bar_summary_off">Channel bar is shown</string>
|
||||
<string name="revanced_hide_channel_watermark_title">Hide channel watermark</string>
|
||||
<string name="revanced_hide_channel_watermark_summary_on">Watermark is hidden</string>
|
||||
<string name="revanced_hide_channel_watermark_summary_off">Watermark is shown</string>
|
||||
<string name="revanced_hide_channel_watermark_summary_on">Channel watermark is hidden</string>
|
||||
<string name="revanced_hide_channel_watermark_summary_off">Channel watermark is shown</string>
|
||||
<string name="revanced_hide_crowdfunding_box_title">Hide crowdfunding box</string>
|
||||
<string name="revanced_hide_crowdfunding_box_summary_on">Crowdfunding box is hidden</string>
|
||||
<string name="revanced_hide_crowdfunding_box_summary_off">Crowdfunding box is shown</string>
|
||||
<string name="revanced_hide_emergency_box_title">Hide emergency boxes</string>
|
||||
<string name="revanced_hide_emergency_box_summary_on">Emergency boxes are hidden</string>
|
||||
<string name="revanced_hide_emergency_box_summary_off">Emergency boxes are shown</string>
|
||||
|
||||
Reference in New Issue
Block a user