From 09bfee2693feb6fa14339d1d046aff5a6763f820 Mon Sep 17 00:00:00 2001 From: Denis Chilik Date: Fri, 27 Mar 2026 13:47:44 -0400 Subject: [PATCH 01/22] feat: split LogoutListener from AttributeListener Introduce KitIntegration.LogoutListener for logout handling; AttributeListener no longer extends it. KitManagerImpl calls logout() on LogoutListener only. Embedded kits that implement AttributeListener now explicitly implement LogoutListener; AttributeListenerTestKit updated accordingly. --- .../kits/testkits/AttributeListenerTestKit.kt | 3 ++- .../com/mparticle/kits/KitIntegration.java | 24 ++++++++++++------- .../com/mparticle/kits/KitManagerImpl.java | 4 ++-- .../kotlin/com/mparticle/kits/AdobeKitBase.kt | 2 ++ .../kotlin/com/mparticle/kits/AdobeKit.kt | 2 ++ .../kotlin/com/mparticle/kits/AppsFlyerKit.kt | 1 + .../kotlin/com/mparticle/kits/ApptimizeKit.kt | 2 ++ .../com/mparticle/kits/BranchMetricsKit.kt | 2 ++ .../kotlin/com/mparticle/kits/AppboyKit.kt | 1 + .../kotlin/com/mparticle/kits/AppboyKit.kt | 1 + .../kotlin/com/mparticle/kits/AppboyKit.kt | 1 + .../kotlin/com/mparticle/kits/AppboyKit.kt | 1 + .../kotlin/com/mparticle/kits/ComscoreKit.kt | 2 ++ .../kotlin/com/mparticle/kits/KochavaKit.kt | 2 ++ .../com/mparticle/kits/LocalyticsKit.kt | 2 ++ .../kotlin/com/mparticle/kits/SingularKit.kt | 4 +++- .../com/mparticle/kits/UrbanAirshipKit.kt | 3 ++- 17 files changed, 43 insertions(+), 14 deletions(-) diff --git a/android-kit-base/src/androidTest/kotlin/com/mparticle/kits/testkits/AttributeListenerTestKit.kt b/android-kit-base/src/androidTest/kotlin/com/mparticle/kits/testkits/AttributeListenerTestKit.kt index e186da9ed..c7028f166 100644 --- a/android-kit-base/src/androidTest/kotlin/com/mparticle/kits/testkits/AttributeListenerTestKit.kt +++ b/android-kit-base/src/androidTest/kotlin/com/mparticle/kits/testkits/AttributeListenerTestKit.kt @@ -6,7 +6,8 @@ import com.mparticle.kits.ReportingMessage open class AttributeListenerTestKit : ListenerTestKit(), - KitIntegration.AttributeListener { + KitIntegration.AttributeListener, + KitIntegration.LogoutListener { var setUserAttribute: ((attributeKey: String?, attributeValue: String?) -> Unit)? = null var setUserAttributeList: ((attributeKey: String?, attributeValueList: List?) -> Unit)? = null diff --git a/android-kit-base/src/main/java/com/mparticle/kits/KitIntegration.java b/android-kit-base/src/main/java/com/mparticle/kits/KitIntegration.java index ab5ba20b3..d4eb126cc 100644 --- a/android-kit-base/src/main/java/com/mparticle/kits/KitIntegration.java +++ b/android-kit-base/src/main/java/com/mparticle/kits/KitIntegration.java @@ -345,6 +345,21 @@ public interface SessionListener { List onSessionEnd(); } + /** + * Kits may implement this interface to respond when the mParticle Identity API performs a logout. + */ + public interface LogoutListener { + + /** + * The mParticle SDK exposes a logout API, allowing developers to track an event + * when a user logs out of their app/platform. Use this opportunity to perform the appropriate logic + * as per your platforms logout paradigm, such as clearing user attributes. + * + * @return Kits should return a List of ReportingMessages indicating that the logout was processed one or more times, or null if it was not processed + */ + List logout(); + } + /** * Kits should implement this interface when their underlying service has the notion * of a user with attributes. @@ -374,15 +389,6 @@ public interface AttributeListener { void removeUserIdentity(MParticle.IdentityType identityType); - /** - * The mParticle SDK exposes a logout API, allowing developers to track an event - * when a user logs out of their app/platform. Use this opportunity to perform the appropriate logic - * as per your platforms logout paradigm, such as clearing user attributes. - * - * @return Kits should return a List of ReportingMessages indicating that the logout was processed one or more times, or null if it was not processed - */ - List logout(); - } /** diff --git a/android-kit-base/src/main/java/com/mparticle/kits/KitManagerImpl.java b/android-kit-base/src/main/java/com/mparticle/kits/KitManagerImpl.java index 57a83b55f..ee0f1657e 100644 --- a/android-kit-base/src/main/java/com/mparticle/kits/KitManagerImpl.java +++ b/android-kit-base/src/main/java/com/mparticle/kits/KitManagerImpl.java @@ -809,8 +809,8 @@ public void removeUserIdentity(MParticle.IdentityType identityType) { public void logout() { for (KitIntegration provider : providers.values()) { try { - if (provider instanceof KitIntegration.AttributeListener && !provider.isDisabled()) { - List report = ((KitIntegration.AttributeListener) provider).logout(); + if (provider instanceof KitIntegration.LogoutListener && !provider.isDisabled()) { + List report = ((KitIntegration.LogoutListener) provider).logout(); getReportingManager().logAll(report); } } catch (Exception e) { diff --git a/kits/adobe/adobe-5/src/main/kotlin/com/mparticle/kits/AdobeKitBase.kt b/kits/adobe/adobe-5/src/main/kotlin/com/mparticle/kits/AdobeKitBase.kt index fa8dff19b..a7396ea9f 100644 --- a/kits/adobe/adobe-5/src/main/kotlin/com/mparticle/kits/AdobeKitBase.kt +++ b/kits/adobe/adobe-5/src/main/kotlin/com/mparticle/kits/AdobeKitBase.kt @@ -7,6 +7,7 @@ import com.mparticle.internal.MPUtility import com.mparticle.internal.MPUtility.AdIdInfo import com.mparticle.kits.KitIntegration.ApplicationStateListener import com.mparticle.kits.KitIntegration.AttributeListener +import com.mparticle.kits.KitIntegration.LogoutListener import com.mparticle.kits.KitIntegration.PushListener import org.json.JSONException import org.json.JSONObject @@ -16,6 +17,7 @@ import java.net.URL abstract class AdobeKitBase : KitIntegration(), AttributeListener, + LogoutListener, PushListener, ApplicationStateListener { private val dVer = "2" diff --git a/kits/adobemedia/adobemedia-5/src/main/kotlin/com/mparticle/kits/AdobeKit.kt b/kits/adobemedia/adobemedia-5/src/main/kotlin/com/mparticle/kits/AdobeKit.kt index 3784ba655..dac46a71c 100644 --- a/kits/adobemedia/adobemedia-5/src/main/kotlin/com/mparticle/kits/AdobeKit.kt +++ b/kits/adobemedia/adobemedia-5/src/main/kotlin/com/mparticle/kits/AdobeKit.kt @@ -20,6 +20,7 @@ import com.mparticle.MParticle import com.mparticle.kits.KitIntegration.ApplicationStateListener import com.mparticle.kits.KitIntegration.AttributeListener import com.mparticle.kits.KitIntegration.EventListener +import com.mparticle.kits.KitIntegration.LogoutListener import com.mparticle.kits.KitIntegration.PushListener import com.mparticle.media.events.ContentType import com.mparticle.media.events.EventAttributes @@ -36,6 +37,7 @@ open class AdobeKit : KitIntegration(), EventListener, AttributeListener, + LogoutListener, PushListener, ApplicationStateListener { companion object { diff --git a/kits/appsflyer/appsflyer-6/src/main/kotlin/com/mparticle/kits/AppsFlyerKit.kt b/kits/appsflyer/appsflyer-6/src/main/kotlin/com/mparticle/kits/AppsFlyerKit.kt index f0b6d0c04..8721e7499 100644 --- a/kits/appsflyer/appsflyer-6/src/main/kotlin/com/mparticle/kits/AppsFlyerKit.kt +++ b/kits/appsflyer/appsflyer-6/src/main/kotlin/com/mparticle/kits/AppsFlyerKit.kt @@ -44,6 +44,7 @@ class AppsFlyerKit : KitIntegration(), KitIntegration.EventListener, KitIntegration.AttributeListener, + KitIntegration.LogoutListener, KitIntegration.CommerceListener, AppsFlyerConversionListener, KitIntegration.ActivityListener, diff --git a/kits/apptimize/apptimize-3/src/main/kotlin/com/mparticle/kits/ApptimizeKit.kt b/kits/apptimize/apptimize-3/src/main/kotlin/com/mparticle/kits/ApptimizeKit.kt index 770ecf20e..3fbcdcd13 100644 --- a/kits/apptimize/apptimize-3/src/main/kotlin/com/mparticle/kits/ApptimizeKit.kt +++ b/kits/apptimize/apptimize-3/src/main/kotlin/com/mparticle/kits/ApptimizeKit.kt @@ -13,11 +13,13 @@ import com.mparticle.MParticle.IdentityType import com.mparticle.commerce.CommerceEvent import com.mparticle.kits.KitIntegration.AttributeListener import com.mparticle.kits.KitIntegration.CommerceListener +import com.mparticle.kits.KitIntegration.LogoutListener import java.math.BigDecimal class ApptimizeKit : KitIntegration(), AttributeListener, + LogoutListener, KitIntegration.EventListener, CommerceListener, OnTestRunListener { diff --git a/kits/branch/branch-5/src/main/kotlin/com/mparticle/kits/BranchMetricsKit.kt b/kits/branch/branch-5/src/main/kotlin/com/mparticle/kits/BranchMetricsKit.kt index 12e3300f0..02efdc8bc 100644 --- a/kits/branch/branch-5/src/main/kotlin/com/mparticle/kits/BranchMetricsKit.kt +++ b/kits/branch/branch-5/src/main/kotlin/com/mparticle/kits/BranchMetricsKit.kt @@ -15,6 +15,7 @@ import com.mparticle.kits.KitIntegration.AttributeListener import com.mparticle.kits.KitIntegration.CommerceListener import com.mparticle.kits.KitIntegration.EventListener import com.mparticle.kits.KitIntegration.IdentityListener +import com.mparticle.kits.KitIntegration.LogoutListener import io.branch.referral.Branch import io.branch.referral.Branch.BranchReferralInitListener import io.branch.referral.BranchError @@ -37,6 +38,7 @@ class BranchMetricsKit : EventListener, CommerceListener, AttributeListener, + LogoutListener, ApplicationStateListener, IdentityListener, BranchReferralInitListener { diff --git a/kits/braze/braze-38/src/main/kotlin/com/mparticle/kits/AppboyKit.kt b/kits/braze/braze-38/src/main/kotlin/com/mparticle/kits/AppboyKit.kt index c44edcf3b..cdb0c4e64 100644 --- a/kits/braze/braze-38/src/main/kotlin/com/mparticle/kits/AppboyKit.kt +++ b/kits/braze/braze-38/src/main/kotlin/com/mparticle/kits/AppboyKit.kt @@ -54,6 +54,7 @@ import kotlin.collections.HashMap open class AppboyKit : KitIntegration(), AttributeListener, + KitIntegration.LogoutListener, CommerceListener, KitIntegration.EventListener, PushListener, diff --git a/kits/braze/braze-39/src/main/kotlin/com/mparticle/kits/AppboyKit.kt b/kits/braze/braze-39/src/main/kotlin/com/mparticle/kits/AppboyKit.kt index c44edcf3b..cdb0c4e64 100644 --- a/kits/braze/braze-39/src/main/kotlin/com/mparticle/kits/AppboyKit.kt +++ b/kits/braze/braze-39/src/main/kotlin/com/mparticle/kits/AppboyKit.kt @@ -54,6 +54,7 @@ import kotlin.collections.HashMap open class AppboyKit : KitIntegration(), AttributeListener, + KitIntegration.LogoutListener, CommerceListener, KitIntegration.EventListener, PushListener, diff --git a/kits/braze/braze-40/src/main/kotlin/com/mparticle/kits/AppboyKit.kt b/kits/braze/braze-40/src/main/kotlin/com/mparticle/kits/AppboyKit.kt index c44edcf3b..cdb0c4e64 100644 --- a/kits/braze/braze-40/src/main/kotlin/com/mparticle/kits/AppboyKit.kt +++ b/kits/braze/braze-40/src/main/kotlin/com/mparticle/kits/AppboyKit.kt @@ -54,6 +54,7 @@ import kotlin.collections.HashMap open class AppboyKit : KitIntegration(), AttributeListener, + KitIntegration.LogoutListener, CommerceListener, KitIntegration.EventListener, PushListener, diff --git a/kits/braze/braze-41/src/main/kotlin/com/mparticle/kits/AppboyKit.kt b/kits/braze/braze-41/src/main/kotlin/com/mparticle/kits/AppboyKit.kt index c44edcf3b..cdb0c4e64 100644 --- a/kits/braze/braze-41/src/main/kotlin/com/mparticle/kits/AppboyKit.kt +++ b/kits/braze/braze-41/src/main/kotlin/com/mparticle/kits/AppboyKit.kt @@ -54,6 +54,7 @@ import kotlin.collections.HashMap open class AppboyKit : KitIntegration(), AttributeListener, + KitIntegration.LogoutListener, CommerceListener, KitIntegration.EventListener, PushListener, diff --git a/kits/comscore/comscore-6/src/main/kotlin/com/mparticle/kits/ComscoreKit.kt b/kits/comscore/comscore-6/src/main/kotlin/com/mparticle/kits/ComscoreKit.kt index c4af707ab..7c296fd73 100644 --- a/kits/comscore/comscore-6/src/main/kotlin/com/mparticle/kits/ComscoreKit.kt +++ b/kits/comscore/comscore-6/src/main/kotlin/com/mparticle/kits/ComscoreKit.kt @@ -12,6 +12,7 @@ import com.mparticle.MParticle import com.mparticle.MParticle.IdentityType import com.mparticle.kits.KitIntegration.ActivityListener import com.mparticle.kits.KitIntegration.AttributeListener +import com.mparticle.kits.KitIntegration.LogoutListener import java.util.HashMap import java.util.LinkedList @@ -19,6 +20,7 @@ class ComscoreKit : KitIntegration(), KitIntegration.EventListener, AttributeListener, + LogoutListener, ActivityListener { private var isEnterprise = false diff --git a/kits/kochava/kochava-5/src/main/kotlin/com/mparticle/kits/KochavaKit.kt b/kits/kochava/kochava-5/src/main/kotlin/com/mparticle/kits/KochavaKit.kt index 04ccd31cf..4d412b92d 100644 --- a/kits/kochava/kochava-5/src/main/kotlin/com/mparticle/kits/KochavaKit.kt +++ b/kits/kochava/kochava-5/src/main/kotlin/com/mparticle/kits/KochavaKit.kt @@ -10,12 +10,14 @@ import com.mparticle.AttributionResult import com.mparticle.MParticle.IdentityType import com.mparticle.identity.MParticleUser import com.mparticle.kits.KitIntegration.AttributeListener +import com.mparticle.kits.KitIntegration.LogoutListener import org.json.JSONException import org.json.JSONObject class KochavaKit : KitIntegration(), AttributeListener, + LogoutListener, KitIntegration.IdentityListener { override fun getName(): String = NAME diff --git a/kits/localytics/localytics-6/src/main/kotlin/com/mparticle/kits/LocalyticsKit.kt b/kits/localytics/localytics-6/src/main/kotlin/com/mparticle/kits/LocalyticsKit.kt index 6c106feb7..3e45f9054 100644 --- a/kits/localytics/localytics-6/src/main/kotlin/com/mparticle/kits/LocalyticsKit.kt +++ b/kits/localytics/localytics-6/src/main/kotlin/com/mparticle/kits/LocalyticsKit.kt @@ -19,6 +19,7 @@ import com.mparticle.internal.MPUtility import com.mparticle.kits.KitIntegration.AttributeListener import com.mparticle.kits.KitIntegration.CommerceListener import com.mparticle.kits.KitIntegration.EventListener +import com.mparticle.kits.KitIntegration.LogoutListener import com.mparticle.kits.KitIntegration.PushListener import com.mparticle.kits.ReportingMessage import org.json.JSONArray @@ -31,6 +32,7 @@ class LocalyticsKit : KitIntegration.EventListener, CommerceListener, AttributeListener, + LogoutListener, PushListener, CallToActionListener { private var customDimensionJson: JSONArray? = null diff --git a/kits/singular/singular-12/src/main/kotlin/com/mparticle/kits/SingularKit.kt b/kits/singular/singular-12/src/main/kotlin/com/mparticle/kits/SingularKit.kt index 280fd6aa3..df796569a 100644 --- a/kits/singular/singular-12/src/main/kotlin/com/mparticle/kits/SingularKit.kt +++ b/kits/singular/singular-12/src/main/kotlin/com/mparticle/kits/SingularKit.kt @@ -19,6 +19,7 @@ import com.mparticle.kits.KitIntegration.ApplicationStateListener import com.mparticle.kits.KitIntegration.AttributeListener import com.mparticle.kits.KitIntegration.CommerceListener import com.mparticle.kits.KitIntegration.EventListener +import com.mparticle.kits.KitIntegration.LogoutListener import com.mparticle.kits.KitIntegration.PushListener import com.mparticle.kits.KitIntegration.UserAttributeListener import com.singular.sdk.SDIDAccessorHandler @@ -38,7 +39,8 @@ open class SingularKit : CommerceListener, ApplicationStateListener, UserAttributeListener, - AttributeListener { + AttributeListener, + LogoutListener { interface DeviceAttributionCallback : SingularDeviceAttributionHandler interface SdidAccessorHandler : SDIDAccessorHandler diff --git a/kits/urbanairship/urbanairship-20/src/main/kotlin/com/mparticle/kits/UrbanAirshipKit.kt b/kits/urbanairship/urbanairship-20/src/main/kotlin/com/mparticle/kits/UrbanAirshipKit.kt index 138b26851..88ea56d13 100644 --- a/kits/urbanairship/urbanairship-20/src/main/kotlin/com/mparticle/kits/UrbanAirshipKit.kt +++ b/kits/urbanairship/urbanairship-20/src/main/kotlin/com/mparticle/kits/UrbanAirshipKit.kt @@ -28,7 +28,8 @@ class UrbanAirshipKit : KitIntegration.PushListener, KitIntegration.EventListener, CommerceListener, - KitIntegration.AttributeListener { + KitIntegration.AttributeListener, + KitIntegration.LogoutListener { private var channelIdListener: ChannelIdListener? = null private var configuration: UrbanAirshipConfiguration? = null From ed12758700bd5977e3464bcdd7be5fd69e2bb56e Mon Sep 17 00:00:00 2001 From: Denis Chilik Date: Fri, 27 Mar 2026 13:54:48 -0400 Subject: [PATCH 02/22] Simplify code --- .../src/main/java/com/mparticle/kits/KitManagerImpl.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/android-kit-base/src/main/java/com/mparticle/kits/KitManagerImpl.java b/android-kit-base/src/main/java/com/mparticle/kits/KitManagerImpl.java index ee0f1657e..59a376c56 100644 --- a/android-kit-base/src/main/java/com/mparticle/kits/KitManagerImpl.java +++ b/android-kit-base/src/main/java/com/mparticle/kits/KitManagerImpl.java @@ -809,9 +809,8 @@ public void removeUserIdentity(MParticle.IdentityType identityType) { public void logout() { for (KitIntegration provider : providers.values()) { try { - if (provider instanceof KitIntegration.LogoutListener && !provider.isDisabled()) { - List report = ((KitIntegration.LogoutListener) provider).logout(); - getReportingManager().logAll(report); + if (provider instanceof KitIntegration.LogoutListener listener && !provider.isDisabled()) { + getReportingManager().logAll(listener.logout()); } } catch (Exception e) { Logger.warning("Failed to call logout for kit: " + provider.getName() + ": " + e.getMessage()); From 22710db02320cb90d5ac4b64ec631f011b5e82fb Mon Sep 17 00:00:00 2001 From: Denis Chilik Date: Fri, 27 Mar 2026 14:29:23 -0400 Subject: [PATCH 03/22] fix(kits): reference KitIntegration.LogoutListener without nested import Kotlin CI failed resolving import com.mparticle.kits.KitIntegration.LogoutListener for Java nested interfaces; use KitIntegration.LogoutListener in implements lists. Made-with: Cursor --- .../adobe-5/src/main/kotlin/com/mparticle/kits/AdobeKitBase.kt | 3 +-- .../src/main/kotlin/com/mparticle/kits/AdobeKit.kt | 3 +-- .../src/main/kotlin/com/mparticle/kits/ApptimizeKit.kt | 3 +-- .../src/main/kotlin/com/mparticle/kits/BranchMetricsKit.kt | 3 +-- .../src/main/kotlin/com/mparticle/kits/ComscoreKit.kt | 3 +-- .../kochava-5/src/main/kotlin/com/mparticle/kits/KochavaKit.kt | 3 +-- .../src/main/kotlin/com/mparticle/kits/LocalyticsKit.kt | 3 +-- .../src/main/kotlin/com/mparticle/kits/SingularKit.kt | 3 +-- 8 files changed, 8 insertions(+), 16 deletions(-) diff --git a/kits/adobe/adobe-5/src/main/kotlin/com/mparticle/kits/AdobeKitBase.kt b/kits/adobe/adobe-5/src/main/kotlin/com/mparticle/kits/AdobeKitBase.kt index a7396ea9f..3b6324d9a 100644 --- a/kits/adobe/adobe-5/src/main/kotlin/com/mparticle/kits/AdobeKitBase.kt +++ b/kits/adobe/adobe-5/src/main/kotlin/com/mparticle/kits/AdobeKitBase.kt @@ -7,7 +7,6 @@ import com.mparticle.internal.MPUtility import com.mparticle.internal.MPUtility.AdIdInfo import com.mparticle.kits.KitIntegration.ApplicationStateListener import com.mparticle.kits.KitIntegration.AttributeListener -import com.mparticle.kits.KitIntegration.LogoutListener import com.mparticle.kits.KitIntegration.PushListener import org.json.JSONException import org.json.JSONObject @@ -17,7 +16,7 @@ import java.net.URL abstract class AdobeKitBase : KitIntegration(), AttributeListener, - LogoutListener, + KitIntegration.LogoutListener, PushListener, ApplicationStateListener { private val dVer = "2" diff --git a/kits/adobemedia/adobemedia-5/src/main/kotlin/com/mparticle/kits/AdobeKit.kt b/kits/adobemedia/adobemedia-5/src/main/kotlin/com/mparticle/kits/AdobeKit.kt index dac46a71c..1baa94223 100644 --- a/kits/adobemedia/adobemedia-5/src/main/kotlin/com/mparticle/kits/AdobeKit.kt +++ b/kits/adobemedia/adobemedia-5/src/main/kotlin/com/mparticle/kits/AdobeKit.kt @@ -20,7 +20,6 @@ import com.mparticle.MParticle import com.mparticle.kits.KitIntegration.ApplicationStateListener import com.mparticle.kits.KitIntegration.AttributeListener import com.mparticle.kits.KitIntegration.EventListener -import com.mparticle.kits.KitIntegration.LogoutListener import com.mparticle.kits.KitIntegration.PushListener import com.mparticle.media.events.ContentType import com.mparticle.media.events.EventAttributes @@ -37,7 +36,7 @@ open class AdobeKit : KitIntegration(), EventListener, AttributeListener, - LogoutListener, + KitIntegration.LogoutListener, PushListener, ApplicationStateListener { companion object { diff --git a/kits/apptimize/apptimize-3/src/main/kotlin/com/mparticle/kits/ApptimizeKit.kt b/kits/apptimize/apptimize-3/src/main/kotlin/com/mparticle/kits/ApptimizeKit.kt index 3fbcdcd13..f9c237df1 100644 --- a/kits/apptimize/apptimize-3/src/main/kotlin/com/mparticle/kits/ApptimizeKit.kt +++ b/kits/apptimize/apptimize-3/src/main/kotlin/com/mparticle/kits/ApptimizeKit.kt @@ -13,13 +13,12 @@ import com.mparticle.MParticle.IdentityType import com.mparticle.commerce.CommerceEvent import com.mparticle.kits.KitIntegration.AttributeListener import com.mparticle.kits.KitIntegration.CommerceListener -import com.mparticle.kits.KitIntegration.LogoutListener import java.math.BigDecimal class ApptimizeKit : KitIntegration(), AttributeListener, - LogoutListener, + KitIntegration.LogoutListener, KitIntegration.EventListener, CommerceListener, OnTestRunListener { diff --git a/kits/branch/branch-5/src/main/kotlin/com/mparticle/kits/BranchMetricsKit.kt b/kits/branch/branch-5/src/main/kotlin/com/mparticle/kits/BranchMetricsKit.kt index 02efdc8bc..8f737e4f6 100644 --- a/kits/branch/branch-5/src/main/kotlin/com/mparticle/kits/BranchMetricsKit.kt +++ b/kits/branch/branch-5/src/main/kotlin/com/mparticle/kits/BranchMetricsKit.kt @@ -15,7 +15,6 @@ import com.mparticle.kits.KitIntegration.AttributeListener import com.mparticle.kits.KitIntegration.CommerceListener import com.mparticle.kits.KitIntegration.EventListener import com.mparticle.kits.KitIntegration.IdentityListener -import com.mparticle.kits.KitIntegration.LogoutListener import io.branch.referral.Branch import io.branch.referral.Branch.BranchReferralInitListener import io.branch.referral.BranchError @@ -38,7 +37,7 @@ class BranchMetricsKit : EventListener, CommerceListener, AttributeListener, - LogoutListener, + KitIntegration.LogoutListener, ApplicationStateListener, IdentityListener, BranchReferralInitListener { diff --git a/kits/comscore/comscore-6/src/main/kotlin/com/mparticle/kits/ComscoreKit.kt b/kits/comscore/comscore-6/src/main/kotlin/com/mparticle/kits/ComscoreKit.kt index 7c296fd73..2151e61ac 100644 --- a/kits/comscore/comscore-6/src/main/kotlin/com/mparticle/kits/ComscoreKit.kt +++ b/kits/comscore/comscore-6/src/main/kotlin/com/mparticle/kits/ComscoreKit.kt @@ -12,7 +12,6 @@ import com.mparticle.MParticle import com.mparticle.MParticle.IdentityType import com.mparticle.kits.KitIntegration.ActivityListener import com.mparticle.kits.KitIntegration.AttributeListener -import com.mparticle.kits.KitIntegration.LogoutListener import java.util.HashMap import java.util.LinkedList @@ -20,7 +19,7 @@ class ComscoreKit : KitIntegration(), KitIntegration.EventListener, AttributeListener, - LogoutListener, + KitIntegration.LogoutListener, ActivityListener { private var isEnterprise = false diff --git a/kits/kochava/kochava-5/src/main/kotlin/com/mparticle/kits/KochavaKit.kt b/kits/kochava/kochava-5/src/main/kotlin/com/mparticle/kits/KochavaKit.kt index 4d412b92d..b6e4e1cca 100644 --- a/kits/kochava/kochava-5/src/main/kotlin/com/mparticle/kits/KochavaKit.kt +++ b/kits/kochava/kochava-5/src/main/kotlin/com/mparticle/kits/KochavaKit.kt @@ -10,14 +10,13 @@ import com.mparticle.AttributionResult import com.mparticle.MParticle.IdentityType import com.mparticle.identity.MParticleUser import com.mparticle.kits.KitIntegration.AttributeListener -import com.mparticle.kits.KitIntegration.LogoutListener import org.json.JSONException import org.json.JSONObject class KochavaKit : KitIntegration(), AttributeListener, - LogoutListener, + KitIntegration.LogoutListener, KitIntegration.IdentityListener { override fun getName(): String = NAME diff --git a/kits/localytics/localytics-6/src/main/kotlin/com/mparticle/kits/LocalyticsKit.kt b/kits/localytics/localytics-6/src/main/kotlin/com/mparticle/kits/LocalyticsKit.kt index 3e45f9054..98a352ee3 100644 --- a/kits/localytics/localytics-6/src/main/kotlin/com/mparticle/kits/LocalyticsKit.kt +++ b/kits/localytics/localytics-6/src/main/kotlin/com/mparticle/kits/LocalyticsKit.kt @@ -19,7 +19,6 @@ import com.mparticle.internal.MPUtility import com.mparticle.kits.KitIntegration.AttributeListener import com.mparticle.kits.KitIntegration.CommerceListener import com.mparticle.kits.KitIntegration.EventListener -import com.mparticle.kits.KitIntegration.LogoutListener import com.mparticle.kits.KitIntegration.PushListener import com.mparticle.kits.ReportingMessage import org.json.JSONArray @@ -32,7 +31,7 @@ class LocalyticsKit : KitIntegration.EventListener, CommerceListener, AttributeListener, - LogoutListener, + KitIntegration.LogoutListener, PushListener, CallToActionListener { private var customDimensionJson: JSONArray? = null diff --git a/kits/singular/singular-12/src/main/kotlin/com/mparticle/kits/SingularKit.kt b/kits/singular/singular-12/src/main/kotlin/com/mparticle/kits/SingularKit.kt index df796569a..6eaf9cc2e 100644 --- a/kits/singular/singular-12/src/main/kotlin/com/mparticle/kits/SingularKit.kt +++ b/kits/singular/singular-12/src/main/kotlin/com/mparticle/kits/SingularKit.kt @@ -19,7 +19,6 @@ import com.mparticle.kits.KitIntegration.ApplicationStateListener import com.mparticle.kits.KitIntegration.AttributeListener import com.mparticle.kits.KitIntegration.CommerceListener import com.mparticle.kits.KitIntegration.EventListener -import com.mparticle.kits.KitIntegration.LogoutListener import com.mparticle.kits.KitIntegration.PushListener import com.mparticle.kits.KitIntegration.UserAttributeListener import com.singular.sdk.SDIDAccessorHandler @@ -40,7 +39,7 @@ open class SingularKit : ApplicationStateListener, UserAttributeListener, AttributeListener, - LogoutListener { + KitIntegration.LogoutListener { interface DeviceAttributionCallback : SingularDeviceAttributionHandler interface SdidAccessorHandler : SDIDAccessorHandler From 357e115de3d88cf3fd968f6de7f8541d34e0d0cd Mon Sep 17 00:00:00 2001 From: Denis Chilik Date: Fri, 27 Mar 2026 15:54:06 -0400 Subject: [PATCH 04/22] ci: pass -PVERSION to kit lint and ktlint in PR and daily workflows Ensures settings-kits.gradle resolves android-kit-base from the same version published to mavenLocal, not the latest from Maven Central. Made-with: Cursor --- .github/workflows/daily.yml | 6 +++--- .github/workflows/pull-request.yml | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/daily.yml b/.github/workflows/daily.yml index 6d5ba595c..ccf13dd85 100644 --- a/.github/workflows/daily.yml +++ b/.github/workflows/daily.yml @@ -235,7 +235,7 @@ jobs: - name: "Setup Android Kit Lint" run: ./gradlew publishMavenPublicationToMavenLocal -PVERSION=$(head -n 1 VERSION) - name: "Run Android Kit Lint" - run: ./gradlew lint -c settings-kits.gradle + run: ./gradlew lint -c settings-kits.gradle -PVERSION=$(head -n 1 VERSION) - name: "Run Isolated Kit Lint (urbanairship-kit)" working-directory: kits/urbanairship/urbanairship-20 run: ./gradlew lint @@ -273,7 +273,7 @@ jobs: - name: "Setup Android Kit Kotlin Lint" run: ./gradlew publishMavenPublicationToMavenLocal -PVERSION=$(head -n 1 VERSION) - name: "Run Android Kit Kotlin Lint" - run: ./gradlew ktlintCheck -c settings-kits.gradle + run: ./gradlew ktlintCheck -c settings-kits.gradle -PVERSION=$(head -n 1 VERSION) - name: "Run Isolated Kit Kotlin Lint (urbanairship-kit)" working-directory: kits/urbanairship/urbanairship-20 run: ./gradlew ktlintCheck @@ -314,7 +314,7 @@ jobs: - name: "Build Android Core" run: ./gradlew clean publishMavenPublicationToMavenLocal -PVERSION=$(head -n 1 VERSION) - name: "Test Kits" - run: ./gradlew clean testRelease -c settings-kits.gradle + run: ./gradlew clean testRelease -c settings-kits.gradle -PVERSION=$(head -n 1 VERSION) - name: "Test Isolated Kits (urbanairship-kit)" working-directory: kits/urbanairship/urbanairship-20 run: ./gradlew clean testRelease diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index 3f41bf20c..581203035 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -110,7 +110,7 @@ jobs: - name: "Setup Android Kit Lint" run: ./gradlew publishMavenPublicationToMavenLocal -PVERSION=$(head -n 1 VERSION) - name: "Run Android Kit Lint" - run: ./gradlew -c settings-kits.gradle lint + run: ./gradlew -c settings-kits.gradle lint -PVERSION=$(head -n 1 VERSION) - name: "Archive Lint Test Results" uses: actions/upload-artifact@v7 if: always() @@ -135,7 +135,7 @@ jobs: - name: "Setup Android Kit Kotlin Lint" run: ./gradlew publishMavenPublicationToMavenLocal -PVERSION=$(head -n 1 VERSION) - name: "Run Android Kit Kotlin Lint" - run: ./gradlew -c settings-kits.gradle ktlintCheck + run: ./gradlew -c settings-kits.gradle ktlintCheck -PVERSION=$(head -n 1 VERSION) - name: "Archive Kotlin Lint Test Results" uses: actions/upload-artifact@v7 if: always() From c5a469a3638056b530efcd404c2dd664291772ae Mon Sep 17 00:00:00 2001 From: Denis Chilik Date: Fri, 27 Mar 2026 15:56:43 -0400 Subject: [PATCH 05/22] refactor: import KitIntegration.LogoutListener for short name usage Use import com.mparticle.kits.KitIntegration.LogoutListener and LogoutListener in kit implementations and KitManagerImpl instead of qualified KitIntegration.LogoutListener. Made-with: Cursor --- .../com/mparticle/kits/testkits/AttributeListenerTestKit.kt | 3 ++- .../src/main/java/com/mparticle/kits/KitManagerImpl.java | 3 ++- .../adobe-5/src/main/kotlin/com/mparticle/kits/AdobeKitBase.kt | 3 ++- .../src/main/kotlin/com/mparticle/kits/AdobeKit.kt | 3 ++- .../src/main/kotlin/com/mparticle/kits/AppsFlyerKit.kt | 3 ++- .../src/main/kotlin/com/mparticle/kits/ApptimizeKit.kt | 3 ++- .../src/main/kotlin/com/mparticle/kits/BranchMetricsKit.kt | 3 ++- .../braze-38/src/main/kotlin/com/mparticle/kits/AppboyKit.kt | 3 ++- .../braze-39/src/main/kotlin/com/mparticle/kits/AppboyKit.kt | 3 ++- .../braze-40/src/main/kotlin/com/mparticle/kits/AppboyKit.kt | 3 ++- .../braze-41/src/main/kotlin/com/mparticle/kits/AppboyKit.kt | 3 ++- .../src/main/kotlin/com/mparticle/kits/ComscoreKit.kt | 3 ++- .../kochava-5/src/main/kotlin/com/mparticle/kits/KochavaKit.kt | 3 ++- .../src/main/kotlin/com/mparticle/kits/LocalyticsKit.kt | 3 ++- .../src/main/kotlin/com/mparticle/kits/SingularKit.kt | 3 ++- .../src/main/kotlin/com/mparticle/kits/UrbanAirshipKit.kt | 3 ++- 16 files changed, 32 insertions(+), 16 deletions(-) diff --git a/android-kit-base/src/androidTest/kotlin/com/mparticle/kits/testkits/AttributeListenerTestKit.kt b/android-kit-base/src/androidTest/kotlin/com/mparticle/kits/testkits/AttributeListenerTestKit.kt index c7028f166..37f16a67a 100644 --- a/android-kit-base/src/androidTest/kotlin/com/mparticle/kits/testkits/AttributeListenerTestKit.kt +++ b/android-kit-base/src/androidTest/kotlin/com/mparticle/kits/testkits/AttributeListenerTestKit.kt @@ -2,12 +2,13 @@ package com.mparticle.kits.testkits import com.mparticle.MParticle import com.mparticle.kits.KitIntegration +import com.mparticle.kits.KitIntegration.LogoutListener import com.mparticle.kits.ReportingMessage open class AttributeListenerTestKit : ListenerTestKit(), KitIntegration.AttributeListener, - KitIntegration.LogoutListener { + LogoutListener { var setUserAttribute: ((attributeKey: String?, attributeValue: String?) -> Unit)? = null var setUserAttributeList: ((attributeKey: String?, attributeValueList: List?) -> Unit)? = null diff --git a/android-kit-base/src/main/java/com/mparticle/kits/KitManagerImpl.java b/android-kit-base/src/main/java/com/mparticle/kits/KitManagerImpl.java index 59a376c56..c37537d82 100644 --- a/android-kit-base/src/main/java/com/mparticle/kits/KitManagerImpl.java +++ b/android-kit-base/src/main/java/com/mparticle/kits/KitManagerImpl.java @@ -39,6 +39,7 @@ import com.mparticle.internal.Logger; import com.mparticle.internal.MPUtility; import com.mparticle.internal.ReportingManager; +import com.mparticle.kits.KitIntegration.LogoutListener; import com.mparticle.kits.mappings.CustomMapping; import com.mparticle.rokt.RoktOptions; @@ -809,7 +810,7 @@ public void removeUserIdentity(MParticle.IdentityType identityType) { public void logout() { for (KitIntegration provider : providers.values()) { try { - if (provider instanceof KitIntegration.LogoutListener listener && !provider.isDisabled()) { + if (provider instanceof LogoutListener listener && !provider.isDisabled()) { getReportingManager().logAll(listener.logout()); } } catch (Exception e) { diff --git a/kits/adobe/adobe-5/src/main/kotlin/com/mparticle/kits/AdobeKitBase.kt b/kits/adobe/adobe-5/src/main/kotlin/com/mparticle/kits/AdobeKitBase.kt index 3b6324d9a..a7396ea9f 100644 --- a/kits/adobe/adobe-5/src/main/kotlin/com/mparticle/kits/AdobeKitBase.kt +++ b/kits/adobe/adobe-5/src/main/kotlin/com/mparticle/kits/AdobeKitBase.kt @@ -7,6 +7,7 @@ import com.mparticle.internal.MPUtility import com.mparticle.internal.MPUtility.AdIdInfo import com.mparticle.kits.KitIntegration.ApplicationStateListener import com.mparticle.kits.KitIntegration.AttributeListener +import com.mparticle.kits.KitIntegration.LogoutListener import com.mparticle.kits.KitIntegration.PushListener import org.json.JSONException import org.json.JSONObject @@ -16,7 +17,7 @@ import java.net.URL abstract class AdobeKitBase : KitIntegration(), AttributeListener, - KitIntegration.LogoutListener, + LogoutListener, PushListener, ApplicationStateListener { private val dVer = "2" diff --git a/kits/adobemedia/adobemedia-5/src/main/kotlin/com/mparticle/kits/AdobeKit.kt b/kits/adobemedia/adobemedia-5/src/main/kotlin/com/mparticle/kits/AdobeKit.kt index 1baa94223..dac46a71c 100644 --- a/kits/adobemedia/adobemedia-5/src/main/kotlin/com/mparticle/kits/AdobeKit.kt +++ b/kits/adobemedia/adobemedia-5/src/main/kotlin/com/mparticle/kits/AdobeKit.kt @@ -20,6 +20,7 @@ import com.mparticle.MParticle import com.mparticle.kits.KitIntegration.ApplicationStateListener import com.mparticle.kits.KitIntegration.AttributeListener import com.mparticle.kits.KitIntegration.EventListener +import com.mparticle.kits.KitIntegration.LogoutListener import com.mparticle.kits.KitIntegration.PushListener import com.mparticle.media.events.ContentType import com.mparticle.media.events.EventAttributes @@ -36,7 +37,7 @@ open class AdobeKit : KitIntegration(), EventListener, AttributeListener, - KitIntegration.LogoutListener, + LogoutListener, PushListener, ApplicationStateListener { companion object { diff --git a/kits/appsflyer/appsflyer-6/src/main/kotlin/com/mparticle/kits/AppsFlyerKit.kt b/kits/appsflyer/appsflyer-6/src/main/kotlin/com/mparticle/kits/AppsFlyerKit.kt index 8721e7499..f416a0bc7 100644 --- a/kits/appsflyer/appsflyer-6/src/main/kotlin/com/mparticle/kits/AppsFlyerKit.kt +++ b/kits/appsflyer/appsflyer-6/src/main/kotlin/com/mparticle/kits/AppsFlyerKit.kt @@ -31,6 +31,7 @@ import com.mparticle.commerce.Product import com.mparticle.consent.ConsentState import com.mparticle.internal.Logger import com.mparticle.internal.MPUtility +import com.mparticle.kits.KitIntegration.LogoutListener import org.json.JSONArray import org.json.JSONException import org.json.JSONObject @@ -44,7 +45,7 @@ class AppsFlyerKit : KitIntegration(), KitIntegration.EventListener, KitIntegration.AttributeListener, - KitIntegration.LogoutListener, + LogoutListener, KitIntegration.CommerceListener, AppsFlyerConversionListener, KitIntegration.ActivityListener, diff --git a/kits/apptimize/apptimize-3/src/main/kotlin/com/mparticle/kits/ApptimizeKit.kt b/kits/apptimize/apptimize-3/src/main/kotlin/com/mparticle/kits/ApptimizeKit.kt index f9c237df1..3fbcdcd13 100644 --- a/kits/apptimize/apptimize-3/src/main/kotlin/com/mparticle/kits/ApptimizeKit.kt +++ b/kits/apptimize/apptimize-3/src/main/kotlin/com/mparticle/kits/ApptimizeKit.kt @@ -13,12 +13,13 @@ import com.mparticle.MParticle.IdentityType import com.mparticle.commerce.CommerceEvent import com.mparticle.kits.KitIntegration.AttributeListener import com.mparticle.kits.KitIntegration.CommerceListener +import com.mparticle.kits.KitIntegration.LogoutListener import java.math.BigDecimal class ApptimizeKit : KitIntegration(), AttributeListener, - KitIntegration.LogoutListener, + LogoutListener, KitIntegration.EventListener, CommerceListener, OnTestRunListener { diff --git a/kits/branch/branch-5/src/main/kotlin/com/mparticle/kits/BranchMetricsKit.kt b/kits/branch/branch-5/src/main/kotlin/com/mparticle/kits/BranchMetricsKit.kt index 8f737e4f6..02efdc8bc 100644 --- a/kits/branch/branch-5/src/main/kotlin/com/mparticle/kits/BranchMetricsKit.kt +++ b/kits/branch/branch-5/src/main/kotlin/com/mparticle/kits/BranchMetricsKit.kt @@ -15,6 +15,7 @@ import com.mparticle.kits.KitIntegration.AttributeListener import com.mparticle.kits.KitIntegration.CommerceListener import com.mparticle.kits.KitIntegration.EventListener import com.mparticle.kits.KitIntegration.IdentityListener +import com.mparticle.kits.KitIntegration.LogoutListener import io.branch.referral.Branch import io.branch.referral.Branch.BranchReferralInitListener import io.branch.referral.BranchError @@ -37,7 +38,7 @@ class BranchMetricsKit : EventListener, CommerceListener, AttributeListener, - KitIntegration.LogoutListener, + LogoutListener, ApplicationStateListener, IdentityListener, BranchReferralInitListener { diff --git a/kits/braze/braze-38/src/main/kotlin/com/mparticle/kits/AppboyKit.kt b/kits/braze/braze-38/src/main/kotlin/com/mparticle/kits/AppboyKit.kt index cdb0c4e64..c49dcfc8d 100644 --- a/kits/braze/braze-38/src/main/kotlin/com/mparticle/kits/AppboyKit.kt +++ b/kits/braze/braze-38/src/main/kotlin/com/mparticle/kits/AppboyKit.kt @@ -35,6 +35,7 @@ import com.mparticle.kits.KitIntegration.AttributeListener import com.mparticle.kits.KitIntegration.CommerceListener import com.mparticle.kits.KitIntegration.EventListener import com.mparticle.kits.KitIntegration.IdentityListener +import com.mparticle.kits.KitIntegration.LogoutListener import com.mparticle.kits.KitIntegration.PushListener import com.mparticle.kits.KitIntegration.UserAttributeListener import org.json.JSONArray @@ -54,7 +55,7 @@ import kotlin.collections.HashMap open class AppboyKit : KitIntegration(), AttributeListener, - KitIntegration.LogoutListener, + LogoutListener, CommerceListener, KitIntegration.EventListener, PushListener, diff --git a/kits/braze/braze-39/src/main/kotlin/com/mparticle/kits/AppboyKit.kt b/kits/braze/braze-39/src/main/kotlin/com/mparticle/kits/AppboyKit.kt index cdb0c4e64..c49dcfc8d 100644 --- a/kits/braze/braze-39/src/main/kotlin/com/mparticle/kits/AppboyKit.kt +++ b/kits/braze/braze-39/src/main/kotlin/com/mparticle/kits/AppboyKit.kt @@ -35,6 +35,7 @@ import com.mparticle.kits.KitIntegration.AttributeListener import com.mparticle.kits.KitIntegration.CommerceListener import com.mparticle.kits.KitIntegration.EventListener import com.mparticle.kits.KitIntegration.IdentityListener +import com.mparticle.kits.KitIntegration.LogoutListener import com.mparticle.kits.KitIntegration.PushListener import com.mparticle.kits.KitIntegration.UserAttributeListener import org.json.JSONArray @@ -54,7 +55,7 @@ import kotlin.collections.HashMap open class AppboyKit : KitIntegration(), AttributeListener, - KitIntegration.LogoutListener, + LogoutListener, CommerceListener, KitIntegration.EventListener, PushListener, diff --git a/kits/braze/braze-40/src/main/kotlin/com/mparticle/kits/AppboyKit.kt b/kits/braze/braze-40/src/main/kotlin/com/mparticle/kits/AppboyKit.kt index cdb0c4e64..c49dcfc8d 100644 --- a/kits/braze/braze-40/src/main/kotlin/com/mparticle/kits/AppboyKit.kt +++ b/kits/braze/braze-40/src/main/kotlin/com/mparticle/kits/AppboyKit.kt @@ -35,6 +35,7 @@ import com.mparticle.kits.KitIntegration.AttributeListener import com.mparticle.kits.KitIntegration.CommerceListener import com.mparticle.kits.KitIntegration.EventListener import com.mparticle.kits.KitIntegration.IdentityListener +import com.mparticle.kits.KitIntegration.LogoutListener import com.mparticle.kits.KitIntegration.PushListener import com.mparticle.kits.KitIntegration.UserAttributeListener import org.json.JSONArray @@ -54,7 +55,7 @@ import kotlin.collections.HashMap open class AppboyKit : KitIntegration(), AttributeListener, - KitIntegration.LogoutListener, + LogoutListener, CommerceListener, KitIntegration.EventListener, PushListener, diff --git a/kits/braze/braze-41/src/main/kotlin/com/mparticle/kits/AppboyKit.kt b/kits/braze/braze-41/src/main/kotlin/com/mparticle/kits/AppboyKit.kt index cdb0c4e64..c49dcfc8d 100644 --- a/kits/braze/braze-41/src/main/kotlin/com/mparticle/kits/AppboyKit.kt +++ b/kits/braze/braze-41/src/main/kotlin/com/mparticle/kits/AppboyKit.kt @@ -35,6 +35,7 @@ import com.mparticle.kits.KitIntegration.AttributeListener import com.mparticle.kits.KitIntegration.CommerceListener import com.mparticle.kits.KitIntegration.EventListener import com.mparticle.kits.KitIntegration.IdentityListener +import com.mparticle.kits.KitIntegration.LogoutListener import com.mparticle.kits.KitIntegration.PushListener import com.mparticle.kits.KitIntegration.UserAttributeListener import org.json.JSONArray @@ -54,7 +55,7 @@ import kotlin.collections.HashMap open class AppboyKit : KitIntegration(), AttributeListener, - KitIntegration.LogoutListener, + LogoutListener, CommerceListener, KitIntegration.EventListener, PushListener, diff --git a/kits/comscore/comscore-6/src/main/kotlin/com/mparticle/kits/ComscoreKit.kt b/kits/comscore/comscore-6/src/main/kotlin/com/mparticle/kits/ComscoreKit.kt index 2151e61ac..7c296fd73 100644 --- a/kits/comscore/comscore-6/src/main/kotlin/com/mparticle/kits/ComscoreKit.kt +++ b/kits/comscore/comscore-6/src/main/kotlin/com/mparticle/kits/ComscoreKit.kt @@ -12,6 +12,7 @@ import com.mparticle.MParticle import com.mparticle.MParticle.IdentityType import com.mparticle.kits.KitIntegration.ActivityListener import com.mparticle.kits.KitIntegration.AttributeListener +import com.mparticle.kits.KitIntegration.LogoutListener import java.util.HashMap import java.util.LinkedList @@ -19,7 +20,7 @@ class ComscoreKit : KitIntegration(), KitIntegration.EventListener, AttributeListener, - KitIntegration.LogoutListener, + LogoutListener, ActivityListener { private var isEnterprise = false diff --git a/kits/kochava/kochava-5/src/main/kotlin/com/mparticle/kits/KochavaKit.kt b/kits/kochava/kochava-5/src/main/kotlin/com/mparticle/kits/KochavaKit.kt index b6e4e1cca..4d412b92d 100644 --- a/kits/kochava/kochava-5/src/main/kotlin/com/mparticle/kits/KochavaKit.kt +++ b/kits/kochava/kochava-5/src/main/kotlin/com/mparticle/kits/KochavaKit.kt @@ -10,13 +10,14 @@ import com.mparticle.AttributionResult import com.mparticle.MParticle.IdentityType import com.mparticle.identity.MParticleUser import com.mparticle.kits.KitIntegration.AttributeListener +import com.mparticle.kits.KitIntegration.LogoutListener import org.json.JSONException import org.json.JSONObject class KochavaKit : KitIntegration(), AttributeListener, - KitIntegration.LogoutListener, + LogoutListener, KitIntegration.IdentityListener { override fun getName(): String = NAME diff --git a/kits/localytics/localytics-6/src/main/kotlin/com/mparticle/kits/LocalyticsKit.kt b/kits/localytics/localytics-6/src/main/kotlin/com/mparticle/kits/LocalyticsKit.kt index 98a352ee3..3e45f9054 100644 --- a/kits/localytics/localytics-6/src/main/kotlin/com/mparticle/kits/LocalyticsKit.kt +++ b/kits/localytics/localytics-6/src/main/kotlin/com/mparticle/kits/LocalyticsKit.kt @@ -19,6 +19,7 @@ import com.mparticle.internal.MPUtility import com.mparticle.kits.KitIntegration.AttributeListener import com.mparticle.kits.KitIntegration.CommerceListener import com.mparticle.kits.KitIntegration.EventListener +import com.mparticle.kits.KitIntegration.LogoutListener import com.mparticle.kits.KitIntegration.PushListener import com.mparticle.kits.ReportingMessage import org.json.JSONArray @@ -31,7 +32,7 @@ class LocalyticsKit : KitIntegration.EventListener, CommerceListener, AttributeListener, - KitIntegration.LogoutListener, + LogoutListener, PushListener, CallToActionListener { private var customDimensionJson: JSONArray? = null diff --git a/kits/singular/singular-12/src/main/kotlin/com/mparticle/kits/SingularKit.kt b/kits/singular/singular-12/src/main/kotlin/com/mparticle/kits/SingularKit.kt index 6eaf9cc2e..df796569a 100644 --- a/kits/singular/singular-12/src/main/kotlin/com/mparticle/kits/SingularKit.kt +++ b/kits/singular/singular-12/src/main/kotlin/com/mparticle/kits/SingularKit.kt @@ -19,6 +19,7 @@ import com.mparticle.kits.KitIntegration.ApplicationStateListener import com.mparticle.kits.KitIntegration.AttributeListener import com.mparticle.kits.KitIntegration.CommerceListener import com.mparticle.kits.KitIntegration.EventListener +import com.mparticle.kits.KitIntegration.LogoutListener import com.mparticle.kits.KitIntegration.PushListener import com.mparticle.kits.KitIntegration.UserAttributeListener import com.singular.sdk.SDIDAccessorHandler @@ -39,7 +40,7 @@ open class SingularKit : ApplicationStateListener, UserAttributeListener, AttributeListener, - KitIntegration.LogoutListener { + LogoutListener { interface DeviceAttributionCallback : SingularDeviceAttributionHandler interface SdidAccessorHandler : SDIDAccessorHandler diff --git a/kits/urbanairship/urbanairship-20/src/main/kotlin/com/mparticle/kits/UrbanAirshipKit.kt b/kits/urbanairship/urbanairship-20/src/main/kotlin/com/mparticle/kits/UrbanAirshipKit.kt index 88ea56d13..b992d1ff0 100644 --- a/kits/urbanairship/urbanairship-20/src/main/kotlin/com/mparticle/kits/UrbanAirshipKit.kt +++ b/kits/urbanairship/urbanairship-20/src/main/kotlin/com/mparticle/kits/UrbanAirshipKit.kt @@ -7,6 +7,7 @@ import com.mparticle.MParticle.IdentityType import com.mparticle.commerce.CommerceEvent import com.mparticle.commerce.Product import com.mparticle.kits.KitIntegration.CommerceListener +import com.mparticle.kits.KitIntegration.LogoutListener import com.urbanairship.Airship import com.urbanairship.Autopilot import com.urbanairship.PrivacyManager @@ -29,7 +30,7 @@ class UrbanAirshipKit : KitIntegration.EventListener, CommerceListener, KitIntegration.AttributeListener, - KitIntegration.LogoutListener { + LogoutListener { private var channelIdListener: ChannelIdListener? = null private var configuration: UrbanAirshipConfiguration? = null From 920067a847fee5aaf5919ee757d02b5b9b4af78c Mon Sep 17 00:00:00 2001 From: Denis Chilik Date: Fri, 27 Mar 2026 16:04:17 -0400 Subject: [PATCH 06/22] ci: pass -PVERSION to isolated urbanairship kit Gradle steps KitPlugin resolves android-kit-base via VERSION; isolated UA runs from a subproject previously omitted -PVERSION and fell back to '+' (Central). Run from repo root with -p and -PVERSION aligned with VERSION file. Made-with: Cursor --- .github/workflows/daily.yml | 9 +++------ .github/workflows/pull-request.yml | 3 +-- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/.github/workflows/daily.yml b/.github/workflows/daily.yml index ccf13dd85..5c789088c 100644 --- a/.github/workflows/daily.yml +++ b/.github/workflows/daily.yml @@ -237,8 +237,7 @@ jobs: - name: "Run Android Kit Lint" run: ./gradlew lint -c settings-kits.gradle -PVERSION=$(head -n 1 VERSION) - name: "Run Isolated Kit Lint (urbanairship-kit)" - working-directory: kits/urbanairship/urbanairship-20 - run: ./gradlew lint + run: ./gradlew -p kits/urbanairship/urbanairship-20 -PVERSION=$(head -n 1 VERSION) lint - name: "Archive Test Results" uses: actions/upload-artifact@v7 if: always() @@ -275,8 +274,7 @@ jobs: - name: "Run Android Kit Kotlin Lint" run: ./gradlew ktlintCheck -c settings-kits.gradle -PVERSION=$(head -n 1 VERSION) - name: "Run Isolated Kit Kotlin Lint (urbanairship-kit)" - working-directory: kits/urbanairship/urbanairship-20 - run: ./gradlew ktlintCheck + run: ./gradlew -p kits/urbanairship/urbanairship-20 -PVERSION=$(head -n 1 VERSION) ktlintCheck - name: "Archive Test Results" uses: actions/upload-artifact@v7 if: always() @@ -316,8 +314,7 @@ jobs: - name: "Test Kits" run: ./gradlew clean testRelease -c settings-kits.gradle -PVERSION=$(head -n 1 VERSION) - name: "Test Isolated Kits (urbanairship-kit)" - working-directory: kits/urbanairship/urbanairship-20 - run: ./gradlew clean testRelease + run: ./gradlew -p kits/urbanairship/urbanairship-20 -PVERSION=$(head -n 1 VERSION) clean testRelease semantic-release-dryrun: name: "Test Semantic Release - Dry Run" diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index 581203035..e580f5c70 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -168,8 +168,7 @@ jobs: - name: "Run Kit Release Tests and Build" run: ./gradlew -p kits testRelease -c ../settings-kits.gradle -PVERSION=$(head -n 1 VERSION) - name: "Run Isolated Kit Compatibility Tests (urbanairship)" - working-directory: kits/urbanairship/urbanairship-20 - run: ./gradlew -PisRelease=true testRelease + run: ./gradlew -p kits/urbanairship/urbanairship-20 -PisRelease=true -PVERSION=$(head -n 1 VERSION) testRelease automerge-dependabot: name: "Save PR Number for Dependabot Automerge" From e7d3b441548b261662e45b890fabb34785303158 Mon Sep 17 00:00:00 2001 From: Denis Chilik Date: Fri, 27 Mar 2026 16:15:25 -0400 Subject: [PATCH 07/22] ci: set Gradle VERSION via ORG_GRADLE_PROJECT_VERSION for kit jobs Export VERSION from VERSION file to GITHUB_ENV so Gradle resolves the same project property without repeating -PVERSION on every command. Made-with: Cursor --- .github/workflows/daily.yml | 21 ++++++++++++--------- .github/workflows/pull-request.yml | 19 +++++++++++-------- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/.github/workflows/daily.yml b/.github/workflows/daily.yml index 5c789088c..01b52fb51 100644 --- a/.github/workflows/daily.yml +++ b/.github/workflows/daily.yml @@ -224,6 +224,7 @@ jobs: uses: actions/checkout@v6 with: ref: regression/${{ github.run_number }} + - run: echo "ORG_GRADLE_PROJECT_VERSION=$(head -n 1 VERSION)" >> $GITHUB_ENV - name: "Install JDK 17" uses: actions/setup-java@v5 with: @@ -233,11 +234,11 @@ jobs: - name: "Run Android Core SDK Lint" run: ./gradlew lint - name: "Setup Android Kit Lint" - run: ./gradlew publishMavenPublicationToMavenLocal -PVERSION=$(head -n 1 VERSION) + run: ./gradlew publishMavenPublicationToMavenLocal - name: "Run Android Kit Lint" - run: ./gradlew lint -c settings-kits.gradle -PVERSION=$(head -n 1 VERSION) + run: ./gradlew lint -c settings-kits.gradle - name: "Run Isolated Kit Lint (urbanairship-kit)" - run: ./gradlew -p kits/urbanairship/urbanairship-20 -PVERSION=$(head -n 1 VERSION) lint + run: ./gradlew -p kits/urbanairship/urbanairship-20 lint - name: "Archive Test Results" uses: actions/upload-artifact@v7 if: always() @@ -261,6 +262,7 @@ jobs: uses: actions/checkout@v6 with: ref: regression/${{ github.run_number }} + - run: echo "ORG_GRADLE_PROJECT_VERSION=$(head -n 1 VERSION)" >> $GITHUB_ENV - name: "Install JDK 17" uses: actions/setup-java@v5 with: @@ -270,11 +272,11 @@ jobs: - name: "Run Android Core SDK Kotlin Lint" run: ./gradlew ktlintCheck - name: "Setup Android Kit Kotlin Lint" - run: ./gradlew publishMavenPublicationToMavenLocal -PVERSION=$(head -n 1 VERSION) + run: ./gradlew publishMavenPublicationToMavenLocal - name: "Run Android Kit Kotlin Lint" - run: ./gradlew ktlintCheck -c settings-kits.gradle -PVERSION=$(head -n 1 VERSION) + run: ./gradlew ktlintCheck -c settings-kits.gradle - name: "Run Isolated Kit Kotlin Lint (urbanairship-kit)" - run: ./gradlew -p kits/urbanairship/urbanairship-20 -PVERSION=$(head -n 1 VERSION) ktlintCheck + run: ./gradlew -p kits/urbanairship/urbanairship-20 ktlintCheck - name: "Archive Test Results" uses: actions/upload-artifact@v7 if: always() @@ -303,6 +305,7 @@ jobs: with: repository: mparticle/mparticle-android-sdk ref: regression/${{ github.run_number }} + - run: echo "ORG_GRADLE_PROJECT_VERSION=$(head -n 1 VERSION)" >> $GITHUB_ENV - name: "Install JDK 17" uses: actions/setup-java@v5 with: @@ -310,11 +313,11 @@ jobs: java-version: "17" cache: "gradle" - name: "Build Android Core" - run: ./gradlew clean publishMavenPublicationToMavenLocal -PVERSION=$(head -n 1 VERSION) + run: ./gradlew clean publishMavenPublicationToMavenLocal - name: "Test Kits" - run: ./gradlew clean testRelease -c settings-kits.gradle -PVERSION=$(head -n 1 VERSION) + run: ./gradlew clean testRelease -c settings-kits.gradle - name: "Test Isolated Kits (urbanairship-kit)" - run: ./gradlew -p kits/urbanairship/urbanairship-20 -PVERSION=$(head -n 1 VERSION) clean testRelease + run: ./gradlew -p kits/urbanairship/urbanairship-20 clean testRelease semantic-release-dryrun: name: "Test Semantic Release - Dry Run" diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index e580f5c70..6f47b375c 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -100,6 +100,7 @@ jobs: steps: - name: "Checkout Branch" uses: actions/checkout@v6 + - run: echo "ORG_GRADLE_PROJECT_VERSION=$(head -n 1 VERSION)" >> $GITHUB_ENV - name: "Install JDK 17" uses: actions/setup-java@v5 with: @@ -108,9 +109,9 @@ jobs: - name: "Run Android Core SDK Lint" run: ./gradlew lint - name: "Setup Android Kit Lint" - run: ./gradlew publishMavenPublicationToMavenLocal -PVERSION=$(head -n 1 VERSION) + run: ./gradlew publishMavenPublicationToMavenLocal - name: "Run Android Kit Lint" - run: ./gradlew -c settings-kits.gradle lint -PVERSION=$(head -n 1 VERSION) + run: ./gradlew -c settings-kits.gradle lint - name: "Archive Lint Test Results" uses: actions/upload-artifact@v7 if: always() @@ -125,6 +126,7 @@ jobs: steps: - name: "Checkout Branch" uses: actions/checkout@v6 + - run: echo "ORG_GRADLE_PROJECT_VERSION=$(head -n 1 VERSION)" >> $GITHUB_ENV - name: "Install JDK 17" uses: actions/setup-java@v5 with: @@ -133,9 +135,9 @@ jobs: - name: "Run Android Core SDK Kotlin Lint" run: ./gradlew ktlintCheck - name: "Setup Android Kit Kotlin Lint" - run: ./gradlew publishMavenPublicationToMavenLocal -PVERSION=$(head -n 1 VERSION) + run: ./gradlew publishMavenPublicationToMavenLocal - name: "Run Android Kit Kotlin Lint" - run: ./gradlew -c settings-kits.gradle ktlintCheck -PVERSION=$(head -n 1 VERSION) + run: ./gradlew -c settings-kits.gradle ktlintCheck - name: "Archive Kotlin Lint Test Results" uses: actions/upload-artifact@v7 if: always() @@ -156,19 +158,20 @@ jobs: steps: - name: "Checkout Branch" uses: actions/checkout@v6 + - run: echo "ORG_GRADLE_PROJECT_VERSION=$(head -n 1 VERSION)" >> $GITHUB_ENV - name: "Install JDK 17" uses: actions/setup-java@v5 with: distribution: "zulu" java-version: "17" - name: "Generate Core Release Build" - run: ./gradlew publishMavenPublicationToMavenLocal -PVERSION=$(head -n 1 VERSION) + run: ./gradlew publishMavenPublicationToMavenLocal - name: "Run Kit-Base Release Tests and Build" - run: ./gradlew :android-kit-base:testRelease -PVERSION=$(head -n 1 VERSION) + run: ./gradlew :android-kit-base:testRelease - name: "Run Kit Release Tests and Build" - run: ./gradlew -p kits testRelease -c ../settings-kits.gradle -PVERSION=$(head -n 1 VERSION) + run: ./gradlew -p kits testRelease -c ../settings-kits.gradle - name: "Run Isolated Kit Compatibility Tests (urbanairship)" - run: ./gradlew -p kits/urbanairship/urbanairship-20 -PisRelease=true -PVERSION=$(head -n 1 VERSION) testRelease + run: ./gradlew -p kits/urbanairship/urbanairship-20 -PisRelease=true testRelease automerge-dependabot: name: "Save PR Number for Dependabot Automerge" From a3d3efa40b7173a244df41fb38d7a4cec46444bd Mon Sep 17 00:00:00 2001 From: Denis Chilik Date: Mon, 30 Mar 2026 09:08:55 -0400 Subject: [PATCH 08/22] update trunk --- .trunk/trunk.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.trunk/trunk.yaml b/.trunk/trunk.yaml index f3738789d..012775cc9 100644 --- a/.trunk/trunk.yaml +++ b/.trunk/trunk.yaml @@ -27,11 +27,11 @@ runtimes: lint: enabled: - actionlint@1.7.7 - - checkov@3.2.470 + - checkov@3.2.513 - git-diff-check - ktlint@1.7.1 - - markdownlint@0.45.0 - - prettier@3.6.2 + - markdownlint@0.48.0 + - prettier@3.8.1 - shellcheck@0.11.0 - shfmt@3.6.0 - trufflehog@3.90.6 From cda6792e57954cf12df1efd633407b195493bbfe Mon Sep 17 00:00:00 2001 From: Denis Chilik Date: Mon, 30 Mar 2026 09:31:03 -0400 Subject: [PATCH 09/22] fix(kits): resolve com.mparticle from mavenLocal only when flag set Add optional exclusiveContent in KitPlugin so com.mparticle artifacts (android-kit-base, android-kit-plugin) resolve only from mavenLocal when -Pmparticle.kit.mparticleFromMavenLocalOnly=true or MPARTICLE_KIT_FROM_MAVEN_LOCAL_ONLY. Enable the flag in PR and daily workflows after publishMavenPublicationToMavenLocal so kit lint and tests use freshly published local artifacts, not Maven Central. Made-with: Cursor --- .github/workflows/daily.yml | 6 +-- .github/workflows/pull-request.yml | 6 +-- .../com/mparticle/kits/KitPlugin.groovy | 45 ++++++++++++++++--- 3 files changed, 45 insertions(+), 12 deletions(-) diff --git a/.github/workflows/daily.yml b/.github/workflows/daily.yml index 01b52fb51..d54f54713 100644 --- a/.github/workflows/daily.yml +++ b/.github/workflows/daily.yml @@ -236,7 +236,7 @@ jobs: - name: "Setup Android Kit Lint" run: ./gradlew publishMavenPublicationToMavenLocal - name: "Run Android Kit Lint" - run: ./gradlew lint -c settings-kits.gradle + run: ./gradlew lint -c settings-kits.gradle -Pmparticle.kit.mparticleFromMavenLocalOnly=true - name: "Run Isolated Kit Lint (urbanairship-kit)" run: ./gradlew -p kits/urbanairship/urbanairship-20 lint - name: "Archive Test Results" @@ -274,7 +274,7 @@ jobs: - name: "Setup Android Kit Kotlin Lint" run: ./gradlew publishMavenPublicationToMavenLocal - name: "Run Android Kit Kotlin Lint" - run: ./gradlew ktlintCheck -c settings-kits.gradle + run: ./gradlew ktlintCheck -c settings-kits.gradle -Pmparticle.kit.mparticleFromMavenLocalOnly=true - name: "Run Isolated Kit Kotlin Lint (urbanairship-kit)" run: ./gradlew -p kits/urbanairship/urbanairship-20 ktlintCheck - name: "Archive Test Results" @@ -315,7 +315,7 @@ jobs: - name: "Build Android Core" run: ./gradlew clean publishMavenPublicationToMavenLocal - name: "Test Kits" - run: ./gradlew clean testRelease -c settings-kits.gradle + run: ./gradlew clean testRelease -c settings-kits.gradle -Pmparticle.kit.mparticleFromMavenLocalOnly=true - name: "Test Isolated Kits (urbanairship-kit)" run: ./gradlew -p kits/urbanairship/urbanairship-20 clean testRelease diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index 6f47b375c..6b6337bed 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -111,7 +111,7 @@ jobs: - name: "Setup Android Kit Lint" run: ./gradlew publishMavenPublicationToMavenLocal - name: "Run Android Kit Lint" - run: ./gradlew -c settings-kits.gradle lint + run: ./gradlew -c settings-kits.gradle -Pmparticle.kit.mparticleFromMavenLocalOnly=true lint - name: "Archive Lint Test Results" uses: actions/upload-artifact@v7 if: always() @@ -137,7 +137,7 @@ jobs: - name: "Setup Android Kit Kotlin Lint" run: ./gradlew publishMavenPublicationToMavenLocal - name: "Run Android Kit Kotlin Lint" - run: ./gradlew -c settings-kits.gradle ktlintCheck + run: ./gradlew -c settings-kits.gradle -Pmparticle.kit.mparticleFromMavenLocalOnly=true ktlintCheck - name: "Archive Kotlin Lint Test Results" uses: actions/upload-artifact@v7 if: always() @@ -169,7 +169,7 @@ jobs: - name: "Run Kit-Base Release Tests and Build" run: ./gradlew :android-kit-base:testRelease - name: "Run Kit Release Tests and Build" - run: ./gradlew -p kits testRelease -c ../settings-kits.gradle + run: ./gradlew -p kits testRelease -c ../settings-kits.gradle -Pmparticle.kit.mparticleFromMavenLocalOnly=true - name: "Run Isolated Kit Compatibility Tests (urbanairship)" run: ./gradlew -p kits/urbanairship/urbanairship-20 -PisRelease=true testRelease diff --git a/kit-plugin/src/main/groovy/com/mparticle/kits/KitPlugin.groovy b/kit-plugin/src/main/groovy/com/mparticle/kits/KitPlugin.groovy index 039eb81b6..7282402a6 100644 --- a/kit-plugin/src/main/groovy/com/mparticle/kits/KitPlugin.groovy +++ b/kit-plugin/src/main/groovy/com/mparticle/kits/KitPlugin.groovy @@ -3,6 +3,7 @@ package com.mparticle.kits import com.android.build.gradle.LibraryExtension import org.gradle.api.Plugin import org.gradle.api.Project +import org.gradle.api.artifacts.dsl.RepositoryHandler class KitPlugin implements Plugin { void apply(Project target) { @@ -10,12 +11,9 @@ class KitPlugin implements Plugin { //formerly in kit-common.gradle target.apply(plugin: 'com.android.library') target.group = 'com.mparticle' - target.buildscript.repositories.add(target.repositories.mavenLocal()) - target.buildscript.repositories.add(target.repositories.google()) - target.buildscript.repositories.add(target.repositories.mavenCentral()) - target.repositories.add(target.repositories.mavenLocal()) - target.repositories.add(target.repositories.google()) - target.repositories.add(target.repositories.mavenCentral()) + boolean mparticleFromMavenLocalOnly = resolveMparticleFromMavenLocalOnly(target) + configureRepositories(target.buildscript.repositories, mparticleFromMavenLocalOnly) + configureRepositories(target.repositories, mparticleFromMavenLocalOnly) target.configurations.create('deployerJars') def kitBaseVersion = target.findProperty('VERSION') ?: '+' target.dependencies.add('api', 'com.mparticle:android-kit-base:' + kitBaseVersion) @@ -57,5 +55,40 @@ class KitPlugin implements Plugin { // no-op: publish plugin unavailable outside monorepo } } + + /** + * When true, {@code com.mparticle} artifacts (e.g. android-kit-base, android-kit-plugin) resolve + * only from {@code mavenLocal()}; Maven Central / Google are not queried for that group. + * Use after {@code publishMavenPublicationToMavenLocal} so CI and monorepo kit builds use the + * freshly published local artifacts. Enable with {@code -Pmparticle.kit.mparticleFromMavenLocalOnly=true} + * or env {@code MPARTICLE_KIT_FROM_MAVEN_LOCAL_ONLY=true}. + */ + private static boolean resolveMparticleFromMavenLocalOnly(Project target) { + String prop = target.findProperty('mparticle.kit.mparticleFromMavenLocalOnly')?.toString() + if (prop != null && Boolean.parseBoolean(prop)) { + return true + } + String env = System.getenv('MPARTICLE_KIT_FROM_MAVEN_LOCAL_ONLY') + return env != null && 'true'.equalsIgnoreCase(env) + } + + private static void configureRepositories(RepositoryHandler repositories, boolean mparticleFromMavenLocalOnly) { + if (mparticleFromMavenLocalOnly) { + repositories.exclusiveContent { + forRepository { + mavenLocal() + } + filter { + includeGroup 'com.mparticle' + } + } + repositories.google() + repositories.mavenCentral() + } else { + repositories.mavenLocal() + repositories.google() + repositories.mavenCentral() + } + } } From 59a253251f34ab7b956c32ffd703aaab095398e8 Mon Sep 17 00:00:00 2001 From: Denis Chilik Date: Mon, 30 Mar 2026 09:52:28 -0400 Subject: [PATCH 10/22] fix(kit-plugin): resolve android-kit-base VERSION from root project Kit subprojects may not see ORG_GRADLE_PROJECT_VERSION / VERSION; falling back to rootProject avoids '+' and matches publishMavenPublicationToMavenLocal. Made-with: Cursor --- .../src/main/groovy/com/mparticle/kits/KitPlugin.groovy | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/kit-plugin/src/main/groovy/com/mparticle/kits/KitPlugin.groovy b/kit-plugin/src/main/groovy/com/mparticle/kits/KitPlugin.groovy index 7282402a6..2800c6c7b 100644 --- a/kit-plugin/src/main/groovy/com/mparticle/kits/KitPlugin.groovy +++ b/kit-plugin/src/main/groovy/com/mparticle/kits/KitPlugin.groovy @@ -15,7 +15,10 @@ class KitPlugin implements Plugin { configureRepositories(target.buildscript.repositories, mparticleFromMavenLocalOnly) configureRepositories(target.repositories, mparticleFromMavenLocalOnly) target.configurations.create('deployerJars') - def kitBaseVersion = target.findProperty('VERSION') ?: '+' + // VERSION from CI is often set only on the root project (e.g. ORG_GRADLE_PROJECT_VERSION); kit + // subprojects do not always inherit it, which would fall back to '+' and unstable resolution. + def kitBaseVersion = + target.findProperty('VERSION') ?: target.rootProject.findProperty('VERSION') ?: '+' target.dependencies.add('api', 'com.mparticle:android-kit-base:' + kitBaseVersion) target.dependencies.add('testImplementation', 'junit:junit:4.13.2') target.dependencies.add('testImplementation', 'org.mockito:mockito-core:1.10.19') From 5a82036a55eb8a2be96808f8d5ac3d41c58fb92e Mon Sep 17 00:00:00 2001 From: Denis Chilik Date: Mon, 30 Mar 2026 10:15:23 -0400 Subject: [PATCH 11/22] ci: pass -Pversion to kit workflow Gradle commands Ensure kit lint and test jobs pass VERSION explicitly so settings-kits builds resolve the locally published android-kit-base/android-core artifacts instead of drifting to a mismatched version. Made-with: Cursor --- .github/workflows/daily.yml | 6 +++--- .github/workflows/pull-request.yml | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/daily.yml b/.github/workflows/daily.yml index d54f54713..e34a5d993 100644 --- a/.github/workflows/daily.yml +++ b/.github/workflows/daily.yml @@ -236,7 +236,7 @@ jobs: - name: "Setup Android Kit Lint" run: ./gradlew publishMavenPublicationToMavenLocal - name: "Run Android Kit Lint" - run: ./gradlew lint -c settings-kits.gradle -Pmparticle.kit.mparticleFromMavenLocalOnly=true + run: ./gradlew -Pversion=$(head -n 1 VERSION) lint -c settings-kits.gradle -Pmparticle.kit.mparticleFromMavenLocalOnly=true - name: "Run Isolated Kit Lint (urbanairship-kit)" run: ./gradlew -p kits/urbanairship/urbanairship-20 lint - name: "Archive Test Results" @@ -274,7 +274,7 @@ jobs: - name: "Setup Android Kit Kotlin Lint" run: ./gradlew publishMavenPublicationToMavenLocal - name: "Run Android Kit Kotlin Lint" - run: ./gradlew ktlintCheck -c settings-kits.gradle -Pmparticle.kit.mparticleFromMavenLocalOnly=true + run: ./gradlew -Pversion=$(head -n 1 VERSION) ktlintCheck -c settings-kits.gradle -Pmparticle.kit.mparticleFromMavenLocalOnly=true - name: "Run Isolated Kit Kotlin Lint (urbanairship-kit)" run: ./gradlew -p kits/urbanairship/urbanairship-20 ktlintCheck - name: "Archive Test Results" @@ -315,7 +315,7 @@ jobs: - name: "Build Android Core" run: ./gradlew clean publishMavenPublicationToMavenLocal - name: "Test Kits" - run: ./gradlew clean testRelease -c settings-kits.gradle -Pmparticle.kit.mparticleFromMavenLocalOnly=true + run: ./gradlew -Pversion=$(head -n 1 VERSION) clean testRelease -c settings-kits.gradle -Pmparticle.kit.mparticleFromMavenLocalOnly=true - name: "Test Isolated Kits (urbanairship-kit)" run: ./gradlew -p kits/urbanairship/urbanairship-20 clean testRelease diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index 6b6337bed..d6b5fc319 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -111,7 +111,7 @@ jobs: - name: "Setup Android Kit Lint" run: ./gradlew publishMavenPublicationToMavenLocal - name: "Run Android Kit Lint" - run: ./gradlew -c settings-kits.gradle -Pmparticle.kit.mparticleFromMavenLocalOnly=true lint + run: ./gradlew -Pversion=$(head -n 1 VERSION) -c settings-kits.gradle -Pmparticle.kit.mparticleFromMavenLocalOnly=true lint - name: "Archive Lint Test Results" uses: actions/upload-artifact@v7 if: always() @@ -137,7 +137,7 @@ jobs: - name: "Setup Android Kit Kotlin Lint" run: ./gradlew publishMavenPublicationToMavenLocal - name: "Run Android Kit Kotlin Lint" - run: ./gradlew -c settings-kits.gradle -Pmparticle.kit.mparticleFromMavenLocalOnly=true ktlintCheck + run: ./gradlew -Pversion=$(head -n 1 VERSION) -c settings-kits.gradle -Pmparticle.kit.mparticleFromMavenLocalOnly=true ktlintCheck - name: "Archive Kotlin Lint Test Results" uses: actions/upload-artifact@v7 if: always() @@ -169,7 +169,7 @@ jobs: - name: "Run Kit-Base Release Tests and Build" run: ./gradlew :android-kit-base:testRelease - name: "Run Kit Release Tests and Build" - run: ./gradlew -p kits testRelease -c ../settings-kits.gradle -Pmparticle.kit.mparticleFromMavenLocalOnly=true + run: ./gradlew -Pversion=$(head -n 1 VERSION) -p kits testRelease -c ../settings-kits.gradle -Pmparticle.kit.mparticleFromMavenLocalOnly=true - name: "Run Isolated Kit Compatibility Tests (urbanairship)" run: ./gradlew -p kits/urbanairship/urbanairship-20 -PisRelease=true testRelease From fe4f3ec4253f5fbc24f285e07a220032171f5673 Mon Sep 17 00:00:00 2001 From: Denis Chilik Date: Mon, 30 Mar 2026 10:23:49 -0400 Subject: [PATCH 12/22] fix(kit-plugin): correct exclusiveContent mavenLocal repository reference Use forRepository(repositories.mavenLocal()) in exclusiveContent so the kit plugin configures repositories correctly when mparticleFromMavenLocalOnly is enabled. Made-with: Cursor --- .../src/main/groovy/com/mparticle/kits/KitPlugin.groovy | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/kit-plugin/src/main/groovy/com/mparticle/kits/KitPlugin.groovy b/kit-plugin/src/main/groovy/com/mparticle/kits/KitPlugin.groovy index 2800c6c7b..e1bc3395f 100644 --- a/kit-plugin/src/main/groovy/com/mparticle/kits/KitPlugin.groovy +++ b/kit-plugin/src/main/groovy/com/mparticle/kits/KitPlugin.groovy @@ -78,9 +78,7 @@ class KitPlugin implements Plugin { private static void configureRepositories(RepositoryHandler repositories, boolean mparticleFromMavenLocalOnly) { if (mparticleFromMavenLocalOnly) { repositories.exclusiveContent { - forRepository { - mavenLocal() - } + forRepository(repositories.mavenLocal()) filter { includeGroup 'com.mparticle' } From 910204c1492e69ce995cf35cc2f74e4bf199a3a0 Mon Sep 17 00:00:00 2001 From: Denis Chilik Date: Mon, 30 Mar 2026 10:32:30 -0400 Subject: [PATCH 13/22] fix(kit-plugin): use content filters for mavenLocal-only group resolution Replace exclusiveContent with repository content filters so com.mparticle resolves only from mavenLocal while avoiding DSL incompatibilities in Gradle 8.5 Groovy builds. Made-with: Cursor --- .../groovy/com/mparticle/kits/KitPlugin.groovy | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/kit-plugin/src/main/groovy/com/mparticle/kits/KitPlugin.groovy b/kit-plugin/src/main/groovy/com/mparticle/kits/KitPlugin.groovy index e1bc3395f..c20b1c4cf 100644 --- a/kit-plugin/src/main/groovy/com/mparticle/kits/KitPlugin.groovy +++ b/kit-plugin/src/main/groovy/com/mparticle/kits/KitPlugin.groovy @@ -77,14 +77,21 @@ class KitPlugin implements Plugin { private static void configureRepositories(RepositoryHandler repositories, boolean mparticleFromMavenLocalOnly) { if (mparticleFromMavenLocalOnly) { - repositories.exclusiveContent { - forRepository(repositories.mavenLocal()) - filter { + repositories.mavenLocal { + content { includeGroup 'com.mparticle' } } - repositories.google() - repositories.mavenCentral() + repositories.google { + content { + excludeGroup 'com.mparticle' + } + } + repositories.mavenCentral { + content { + excludeGroup 'com.mparticle' + } + } } else { repositories.mavenLocal() repositories.google() From e6883d9326f87cae04de5f5319a4dff3b2589a1f Mon Sep 17 00:00:00 2001 From: Denis Chilik Date: Mon, 30 Mar 2026 10:42:52 -0400 Subject: [PATCH 14/22] fix(adobe-kit): use currentUser identities in ID sync Replace removed KitIntegration userIdentities access with currentUser.userIdentities when building Adobe audience sync parameters. Made-with: Cursor --- .../adobe-5/src/main/kotlin/com/mparticle/kits/AdobeKitBase.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kits/adobe/adobe-5/src/main/kotlin/com/mparticle/kits/AdobeKitBase.kt b/kits/adobe/adobe-5/src/main/kotlin/com/mparticle/kits/AdobeKitBase.kt index a7396ea9f..9f42913a7 100644 --- a/kits/adobe/adobe-5/src/main/kotlin/com/mparticle/kits/AdobeKitBase.kt +++ b/kits/adobe/adobe-5/src/main/kotlin/com/mparticle/kits/AdobeKitBase.kt @@ -140,7 +140,7 @@ abstract class AdobeKitBase : dcsRegion, pushId, gaid, - userIdentities, + currentUser.userIdentities ?: emptyMap(), ) } From eb91c399bf11ba96b4d6e804d56c4d1c90b4d418 Mon Sep 17 00:00:00 2001 From: Denis Chilik Date: Mon, 30 Mar 2026 11:02:03 -0400 Subject: [PATCH 15/22] fix(leanplum-kit): use current user identities in ID generation Replace removed KitIntegration userIdentities access with currentUser.userIdentities when generating Leanplum user IDs. Made-with: Cursor --- .../src/main/kotlin/com/mparticle/kits/LeanplumKit.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kits/leanplum/leanplum-7/src/main/kotlin/com/mparticle/kits/LeanplumKit.kt b/kits/leanplum/leanplum-7/src/main/kotlin/com/mparticle/kits/LeanplumKit.kt index b0c137b24..fd378d05e 100644 --- a/kits/leanplum/leanplum-7/src/main/kotlin/com/mparticle/kits/LeanplumKit.kt +++ b/kits/leanplum/leanplum-7/src/main/kotlin/com/mparticle/kits/LeanplumKit.kt @@ -77,7 +77,7 @@ class LeanplumKit : generateLeanplumUserId( it, settings, - userIdentities, + it.userIdentities ?: emptyMap(), )?.ifEmpty { null } } From 727765ed6335c380fa99778643a16062e0414a59 Mon Sep 17 00:00:00 2001 From: Denis Chilik Date: Mon, 30 Mar 2026 11:14:08 -0400 Subject: [PATCH 16/22] ci: use local mparticle version for isolated urbanairship jobs Pass VERSION and mparticleFromMavenLocalOnly to isolated urbanairship lint/ktlint/test jobs so they resolve android-kit-base/android-core from local Maven artifacts consistently. Made-with: Cursor --- .github/workflows/daily.yml | 6 +++--- .github/workflows/pull-request.yml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/daily.yml b/.github/workflows/daily.yml index e34a5d993..24e8e12f9 100644 --- a/.github/workflows/daily.yml +++ b/.github/workflows/daily.yml @@ -238,7 +238,7 @@ jobs: - name: "Run Android Kit Lint" run: ./gradlew -Pversion=$(head -n 1 VERSION) lint -c settings-kits.gradle -Pmparticle.kit.mparticleFromMavenLocalOnly=true - name: "Run Isolated Kit Lint (urbanairship-kit)" - run: ./gradlew -p kits/urbanairship/urbanairship-20 lint + run: ./gradlew -Pversion=$(head -n 1 VERSION) -Pmparticle.kit.mparticleFromMavenLocalOnly=true -p kits/urbanairship/urbanairship-20 lint - name: "Archive Test Results" uses: actions/upload-artifact@v7 if: always() @@ -276,7 +276,7 @@ jobs: - name: "Run Android Kit Kotlin Lint" run: ./gradlew -Pversion=$(head -n 1 VERSION) ktlintCheck -c settings-kits.gradle -Pmparticle.kit.mparticleFromMavenLocalOnly=true - name: "Run Isolated Kit Kotlin Lint (urbanairship-kit)" - run: ./gradlew -p kits/urbanairship/urbanairship-20 ktlintCheck + run: ./gradlew -Pversion=$(head -n 1 VERSION) -Pmparticle.kit.mparticleFromMavenLocalOnly=true -p kits/urbanairship/urbanairship-20 ktlintCheck - name: "Archive Test Results" uses: actions/upload-artifact@v7 if: always() @@ -317,7 +317,7 @@ jobs: - name: "Test Kits" run: ./gradlew -Pversion=$(head -n 1 VERSION) clean testRelease -c settings-kits.gradle -Pmparticle.kit.mparticleFromMavenLocalOnly=true - name: "Test Isolated Kits (urbanairship-kit)" - run: ./gradlew -p kits/urbanairship/urbanairship-20 clean testRelease + run: ./gradlew -Pversion=$(head -n 1 VERSION) -Pmparticle.kit.mparticleFromMavenLocalOnly=true -p kits/urbanairship/urbanairship-20 clean testRelease semantic-release-dryrun: name: "Test Semantic Release - Dry Run" diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index d6b5fc319..a3450da41 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -171,7 +171,7 @@ jobs: - name: "Run Kit Release Tests and Build" run: ./gradlew -Pversion=$(head -n 1 VERSION) -p kits testRelease -c ../settings-kits.gradle -Pmparticle.kit.mparticleFromMavenLocalOnly=true - name: "Run Isolated Kit Compatibility Tests (urbanairship)" - run: ./gradlew -p kits/urbanairship/urbanairship-20 -PisRelease=true testRelease + run: ./gradlew -Pversion=$(head -n 1 VERSION) -Pmparticle.kit.mparticleFromMavenLocalOnly=true -p kits/urbanairship/urbanairship-20 -PisRelease=true testRelease automerge-dependabot: name: "Save PR Number for Dependabot Automerge" From 43d7f82a0020c08053a672252b5b108d817d9085 Mon Sep 17 00:00:00 2001 From: Denis Chilik Date: Mon, 30 Mar 2026 11:25:05 -0400 Subject: [PATCH 17/22] fix(kit-plugin): clear inherited repositories in local-only mode Remove preconfigured project repositories before applying local-only filters so com.mparticle artifacts cannot resolve from unfiltered root repositories when mparticleFromMavenLocalOnly is enabled. Made-with: Cursor --- .../src/main/groovy/com/mparticle/kits/KitPlugin.groovy | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/kit-plugin/src/main/groovy/com/mparticle/kits/KitPlugin.groovy b/kit-plugin/src/main/groovy/com/mparticle/kits/KitPlugin.groovy index c20b1c4cf..fa8a398df 100644 --- a/kit-plugin/src/main/groovy/com/mparticle/kits/KitPlugin.groovy +++ b/kit-plugin/src/main/groovy/com/mparticle/kits/KitPlugin.groovy @@ -77,6 +77,12 @@ class KitPlugin implements Plugin { private static void configureRepositories(RepositoryHandler repositories, boolean mparticleFromMavenLocalOnly) { if (mparticleFromMavenLocalOnly) { + // Root build scripts may have already attached unfiltered repos. Rebuild this + // project's repository chain so com.mparticle cannot resolve outside mavenLocal(). + def existingRepos = repositories.toList() + existingRepos.each { repo -> + repositories.remove(repo) + } repositories.mavenLocal { content { includeGroup 'com.mparticle' From 3bbc7086633a1fd0241294b04efd7273ec3d5ede Mon Sep 17 00:00:00 2001 From: Denis Chilik Date: Mon, 30 Mar 2026 12:06:37 -0400 Subject: [PATCH 18/22] style(kits): use short listener names in inheritance lists Replace KitIntegration.AttributeListener references in class inheritance clauses with imported AttributeListener for consistency with other listener types. Made-with: Cursor --- .../com/mparticle/kits/testkits/AttributeListenerTestKit.kt | 3 ++- .../src/main/kotlin/com/mparticle/kits/AppsFlyerKit.kt | 3 ++- .../src/main/kotlin/com/mparticle/kits/UrbanAirshipKit.kt | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/android-kit-base/src/androidTest/kotlin/com/mparticle/kits/testkits/AttributeListenerTestKit.kt b/android-kit-base/src/androidTest/kotlin/com/mparticle/kits/testkits/AttributeListenerTestKit.kt index 37f16a67a..767f44c03 100644 --- a/android-kit-base/src/androidTest/kotlin/com/mparticle/kits/testkits/AttributeListenerTestKit.kt +++ b/android-kit-base/src/androidTest/kotlin/com/mparticle/kits/testkits/AttributeListenerTestKit.kt @@ -2,12 +2,13 @@ package com.mparticle.kits.testkits import com.mparticle.MParticle import com.mparticle.kits.KitIntegration +import com.mparticle.kits.KitIntegration.AttributeListener import com.mparticle.kits.KitIntegration.LogoutListener import com.mparticle.kits.ReportingMessage open class AttributeListenerTestKit : ListenerTestKit(), - KitIntegration.AttributeListener, + AttributeListener, LogoutListener { var setUserAttribute: ((attributeKey: String?, attributeValue: String?) -> Unit)? = null var setUserAttributeList: ((attributeKey: String?, attributeValueList: List?) -> Unit)? = diff --git a/kits/appsflyer/appsflyer-6/src/main/kotlin/com/mparticle/kits/AppsFlyerKit.kt b/kits/appsflyer/appsflyer-6/src/main/kotlin/com/mparticle/kits/AppsFlyerKit.kt index f416a0bc7..0d34f23bd 100644 --- a/kits/appsflyer/appsflyer-6/src/main/kotlin/com/mparticle/kits/AppsFlyerKit.kt +++ b/kits/appsflyer/appsflyer-6/src/main/kotlin/com/mparticle/kits/AppsFlyerKit.kt @@ -37,6 +37,7 @@ import org.json.JSONException import org.json.JSONObject import java.math.BigDecimal import java.util.LinkedList +import com.mparticle.kits.KitIntegration.AttributeListener /** * mParticle Kit wrapper for the AppsFlyer SDK @@ -44,7 +45,7 @@ import java.util.LinkedList class AppsFlyerKit : KitIntegration(), KitIntegration.EventListener, - KitIntegration.AttributeListener, + AttributeListener, LogoutListener, KitIntegration.CommerceListener, AppsFlyerConversionListener, diff --git a/kits/urbanairship/urbanairship-20/src/main/kotlin/com/mparticle/kits/UrbanAirshipKit.kt b/kits/urbanairship/urbanairship-20/src/main/kotlin/com/mparticle/kits/UrbanAirshipKit.kt index b992d1ff0..0418f1683 100644 --- a/kits/urbanairship/urbanairship-20/src/main/kotlin/com/mparticle/kits/UrbanAirshipKit.kt +++ b/kits/urbanairship/urbanairship-20/src/main/kotlin/com/mparticle/kits/UrbanAirshipKit.kt @@ -20,6 +20,7 @@ import com.urbanairship.push.PushMessage import com.urbanairship.push.PushProviderBridge import java.math.BigDecimal import java.util.LinkedList +import com.mparticle.kits.KitIntegration.AttributeListener /** * mParticle-Urban Airship Kit integration @@ -29,7 +30,7 @@ class UrbanAirshipKit : KitIntegration.PushListener, KitIntegration.EventListener, CommerceListener, - KitIntegration.AttributeListener, + AttributeListener, LogoutListener { private var channelIdListener: ChannelIdListener? = null private var configuration: UrbanAirshipConfiguration? = null From 43c15f0182c9881238842a16e1a5770e2dfcd4a3 Mon Sep 17 00:00:00 2001 From: Denis Chilik Date: Mon, 30 Mar 2026 12:12:03 -0400 Subject: [PATCH 19/22] fix(adobe-kit): null-safe current user identities lookup Use a safe-call when reading currentUser.userIdentities during ID sync to avoid NPE when no current user is available. Made-with: Cursor --- .../adobe-5/src/main/kotlin/com/mparticle/kits/AdobeKitBase.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kits/adobe/adobe-5/src/main/kotlin/com/mparticle/kits/AdobeKitBase.kt b/kits/adobe/adobe-5/src/main/kotlin/com/mparticle/kits/AdobeKitBase.kt index 9f42913a7..21458a419 100644 --- a/kits/adobe/adobe-5/src/main/kotlin/com/mparticle/kits/AdobeKitBase.kt +++ b/kits/adobe/adobe-5/src/main/kotlin/com/mparticle/kits/AdobeKitBase.kt @@ -140,7 +140,7 @@ abstract class AdobeKitBase : dcsRegion, pushId, gaid, - currentUser.userIdentities ?: emptyMap(), + currentUser?.userIdentities ?: emptyMap(), ) } From 1432a254effeec65ec407737f184e3317f14a4c3 Mon Sep 17 00:00:00 2001 From: Denis Chilik Date: Mon, 30 Mar 2026 12:18:33 -0400 Subject: [PATCH 20/22] refactor(kit-plugin): simplify google repository filtering Keep mparticle exclusion only on Maven Central and use the default google repository configuration since com.mparticle artifacts are not published there. Made-with: Cursor --- .../src/main/groovy/com/mparticle/kits/KitPlugin.groovy | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/kit-plugin/src/main/groovy/com/mparticle/kits/KitPlugin.groovy b/kit-plugin/src/main/groovy/com/mparticle/kits/KitPlugin.groovy index fa8a398df..9c5cf7c53 100644 --- a/kit-plugin/src/main/groovy/com/mparticle/kits/KitPlugin.groovy +++ b/kit-plugin/src/main/groovy/com/mparticle/kits/KitPlugin.groovy @@ -88,11 +88,7 @@ class KitPlugin implements Plugin { includeGroup 'com.mparticle' } } - repositories.google { - content { - excludeGroup 'com.mparticle' - } - } + repositories.google() repositories.mavenCentral { content { excludeGroup 'com.mparticle' From d544369ed3fa2b66ee49950c68ecf22002a59940 Mon Sep 17 00:00:00 2001 From: Denis Chilik Date: Mon, 30 Mar 2026 12:24:51 -0400 Subject: [PATCH 21/22] fix(android-kit-base-tests): remove unused KitIntegration import Drop unused KitIntegration import in AttributeListenerTestKit to satisfy ktlint androidTest checks. Made-with: Cursor --- .../com/mparticle/kits/testkits/AttributeListenerTestKit.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/android-kit-base/src/androidTest/kotlin/com/mparticle/kits/testkits/AttributeListenerTestKit.kt b/android-kit-base/src/androidTest/kotlin/com/mparticle/kits/testkits/AttributeListenerTestKit.kt index 767f44c03..b03c247aa 100644 --- a/android-kit-base/src/androidTest/kotlin/com/mparticle/kits/testkits/AttributeListenerTestKit.kt +++ b/android-kit-base/src/androidTest/kotlin/com/mparticle/kits/testkits/AttributeListenerTestKit.kt @@ -1,7 +1,6 @@ package com.mparticle.kits.testkits import com.mparticle.MParticle -import com.mparticle.kits.KitIntegration import com.mparticle.kits.KitIntegration.AttributeListener import com.mparticle.kits.KitIntegration.LogoutListener import com.mparticle.kits.ReportingMessage From 161aae17d5c175c865e2fa246ba1f99b26db0c0f Mon Sep 17 00:00:00 2001 From: Denis Chilik Date: Mon, 30 Mar 2026 12:38:10 -0400 Subject: [PATCH 22/22] ci: align workflow Gradle version property injection Export both Gradle VERSION/version properties via GITHUB_ENV and remove redundant -Pversion CLI overrides from kit-related workflow commands. Made-with: Cursor --- .github/workflows/daily.yml | 15 +++++++++------ .github/workflows/pull-request.yml | 11 +++++++---- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/.github/workflows/daily.yml b/.github/workflows/daily.yml index 24e8e12f9..d662ce478 100644 --- a/.github/workflows/daily.yml +++ b/.github/workflows/daily.yml @@ -225,6 +225,7 @@ jobs: with: ref: regression/${{ github.run_number }} - run: echo "ORG_GRADLE_PROJECT_VERSION=$(head -n 1 VERSION)" >> $GITHUB_ENV + - run: echo "ORG_GRADLE_PROJECT_version=$(head -n 1 VERSION)" >> $GITHUB_ENV - name: "Install JDK 17" uses: actions/setup-java@v5 with: @@ -236,9 +237,9 @@ jobs: - name: "Setup Android Kit Lint" run: ./gradlew publishMavenPublicationToMavenLocal - name: "Run Android Kit Lint" - run: ./gradlew -Pversion=$(head -n 1 VERSION) lint -c settings-kits.gradle -Pmparticle.kit.mparticleFromMavenLocalOnly=true + run: ./gradlew lint -c settings-kits.gradle -Pmparticle.kit.mparticleFromMavenLocalOnly=true - name: "Run Isolated Kit Lint (urbanairship-kit)" - run: ./gradlew -Pversion=$(head -n 1 VERSION) -Pmparticle.kit.mparticleFromMavenLocalOnly=true -p kits/urbanairship/urbanairship-20 lint + run: ./gradlew -Pmparticle.kit.mparticleFromMavenLocalOnly=true -p kits/urbanairship/urbanairship-20 lint - name: "Archive Test Results" uses: actions/upload-artifact@v7 if: always() @@ -263,6 +264,7 @@ jobs: with: ref: regression/${{ github.run_number }} - run: echo "ORG_GRADLE_PROJECT_VERSION=$(head -n 1 VERSION)" >> $GITHUB_ENV + - run: echo "ORG_GRADLE_PROJECT_version=$(head -n 1 VERSION)" >> $GITHUB_ENV - name: "Install JDK 17" uses: actions/setup-java@v5 with: @@ -274,9 +276,9 @@ jobs: - name: "Setup Android Kit Kotlin Lint" run: ./gradlew publishMavenPublicationToMavenLocal - name: "Run Android Kit Kotlin Lint" - run: ./gradlew -Pversion=$(head -n 1 VERSION) ktlintCheck -c settings-kits.gradle -Pmparticle.kit.mparticleFromMavenLocalOnly=true + run: ./gradlew ktlintCheck -c settings-kits.gradle -Pmparticle.kit.mparticleFromMavenLocalOnly=true - name: "Run Isolated Kit Kotlin Lint (urbanairship-kit)" - run: ./gradlew -Pversion=$(head -n 1 VERSION) -Pmparticle.kit.mparticleFromMavenLocalOnly=true -p kits/urbanairship/urbanairship-20 ktlintCheck + run: ./gradlew -Pmparticle.kit.mparticleFromMavenLocalOnly=true -p kits/urbanairship/urbanairship-20 ktlintCheck - name: "Archive Test Results" uses: actions/upload-artifact@v7 if: always() @@ -306,6 +308,7 @@ jobs: repository: mparticle/mparticle-android-sdk ref: regression/${{ github.run_number }} - run: echo "ORG_GRADLE_PROJECT_VERSION=$(head -n 1 VERSION)" >> $GITHUB_ENV + - run: echo "ORG_GRADLE_PROJECT_version=$(head -n 1 VERSION)" >> $GITHUB_ENV - name: "Install JDK 17" uses: actions/setup-java@v5 with: @@ -315,9 +318,9 @@ jobs: - name: "Build Android Core" run: ./gradlew clean publishMavenPublicationToMavenLocal - name: "Test Kits" - run: ./gradlew -Pversion=$(head -n 1 VERSION) clean testRelease -c settings-kits.gradle -Pmparticle.kit.mparticleFromMavenLocalOnly=true + run: ./gradlew clean testRelease -c settings-kits.gradle -Pmparticle.kit.mparticleFromMavenLocalOnly=true - name: "Test Isolated Kits (urbanairship-kit)" - run: ./gradlew -Pversion=$(head -n 1 VERSION) -Pmparticle.kit.mparticleFromMavenLocalOnly=true -p kits/urbanairship/urbanairship-20 clean testRelease + run: ./gradlew -Pmparticle.kit.mparticleFromMavenLocalOnly=true -p kits/urbanairship/urbanairship-20 clean testRelease semantic-release-dryrun: name: "Test Semantic Release - Dry Run" diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index a3450da41..33308c7cf 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -101,6 +101,7 @@ jobs: - name: "Checkout Branch" uses: actions/checkout@v6 - run: echo "ORG_GRADLE_PROJECT_VERSION=$(head -n 1 VERSION)" >> $GITHUB_ENV + - run: echo "ORG_GRADLE_PROJECT_version=$(head -n 1 VERSION)" >> $GITHUB_ENV - name: "Install JDK 17" uses: actions/setup-java@v5 with: @@ -111,7 +112,7 @@ jobs: - name: "Setup Android Kit Lint" run: ./gradlew publishMavenPublicationToMavenLocal - name: "Run Android Kit Lint" - run: ./gradlew -Pversion=$(head -n 1 VERSION) -c settings-kits.gradle -Pmparticle.kit.mparticleFromMavenLocalOnly=true lint + run: ./gradlew -c settings-kits.gradle -Pmparticle.kit.mparticleFromMavenLocalOnly=true lint - name: "Archive Lint Test Results" uses: actions/upload-artifact@v7 if: always() @@ -127,6 +128,7 @@ jobs: - name: "Checkout Branch" uses: actions/checkout@v6 - run: echo "ORG_GRADLE_PROJECT_VERSION=$(head -n 1 VERSION)" >> $GITHUB_ENV + - run: echo "ORG_GRADLE_PROJECT_version=$(head -n 1 VERSION)" >> $GITHUB_ENV - name: "Install JDK 17" uses: actions/setup-java@v5 with: @@ -137,7 +139,7 @@ jobs: - name: "Setup Android Kit Kotlin Lint" run: ./gradlew publishMavenPublicationToMavenLocal - name: "Run Android Kit Kotlin Lint" - run: ./gradlew -Pversion=$(head -n 1 VERSION) -c settings-kits.gradle -Pmparticle.kit.mparticleFromMavenLocalOnly=true ktlintCheck + run: ./gradlew -c settings-kits.gradle -Pmparticle.kit.mparticleFromMavenLocalOnly=true ktlintCheck - name: "Archive Kotlin Lint Test Results" uses: actions/upload-artifact@v7 if: always() @@ -159,6 +161,7 @@ jobs: - name: "Checkout Branch" uses: actions/checkout@v6 - run: echo "ORG_GRADLE_PROJECT_VERSION=$(head -n 1 VERSION)" >> $GITHUB_ENV + - run: echo "ORG_GRADLE_PROJECT_version=$(head -n 1 VERSION)" >> $GITHUB_ENV - name: "Install JDK 17" uses: actions/setup-java@v5 with: @@ -169,9 +172,9 @@ jobs: - name: "Run Kit-Base Release Tests and Build" run: ./gradlew :android-kit-base:testRelease - name: "Run Kit Release Tests and Build" - run: ./gradlew -Pversion=$(head -n 1 VERSION) -p kits testRelease -c ../settings-kits.gradle -Pmparticle.kit.mparticleFromMavenLocalOnly=true + run: ./gradlew -p kits testRelease -c ../settings-kits.gradle -Pmparticle.kit.mparticleFromMavenLocalOnly=true - name: "Run Isolated Kit Compatibility Tests (urbanairship)" - run: ./gradlew -Pversion=$(head -n 1 VERSION) -Pmparticle.kit.mparticleFromMavenLocalOnly=true -p kits/urbanairship/urbanairship-20 -PisRelease=true testRelease + run: ./gradlew -Pmparticle.kit.mparticleFromMavenLocalOnly=true -p kits/urbanairship/urbanairship-20 -PisRelease=true testRelease automerge-dependabot: name: "Save PR Number for Dependabot Automerge"