From c47beae21376dd17ab8bc09afe73e9094481bde9 Mon Sep 17 00:00:00 2001 From: xehpuk Date: Mon, 29 Dec 2025 22:20:26 +0100 Subject: [PATCH] feat(Strava): Add `Block Snowplow tracking` patch (#6413) Co-authored-by: oSumAtrIX --- patches/api/patches.api | 4 ++++ .../privacy/BlockSnowplowTrackingPatch.kt | 17 +++++++++++++++++ .../patches/strava/privacy/Fingerprints.kt | 9 +++++++++ 3 files changed, 30 insertions(+) create mode 100644 patches/src/main/kotlin/app/revanced/patches/strava/privacy/BlockSnowplowTrackingPatch.kt create mode 100644 patches/src/main/kotlin/app/revanced/patches/strava/privacy/Fingerprints.kt diff --git a/patches/api/patches.api b/patches/api/patches.api index 83f2197be..933e267e5 100644 --- a/patches/api/patches.api +++ b/patches/api/patches.api @@ -1192,6 +1192,10 @@ public final class app/revanced/patches/strava/password/EnablePasswordLoginPatch 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; } diff --git a/patches/src/main/kotlin/app/revanced/patches/strava/privacy/BlockSnowplowTrackingPatch.kt b/patches/src/main/kotlin/app/revanced/patches/strava/privacy/BlockSnowplowTrackingPatch.kt new file mode 100644 index 000000000..313a98d1d --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/strava/privacy/BlockSnowplowTrackingPatch.kt @@ -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() + } +} diff --git a/patches/src/main/kotlin/app/revanced/patches/strava/privacy/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/strava/privacy/Fingerprints.kt new file mode 100644 index 000000000..196602ba0 --- /dev/null +++ b/patches/src/main/kotlin/app/revanced/patches/strava/privacy/Fingerprints.kt @@ -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") +}