From d98f34a4ce462bf1a045ff1256c80fed9ab66974 Mon Sep 17 00:00:00 2001 From: Denis Chilik Date: Thu, 2 Apr 2026 09:07:16 -0400 Subject: [PATCH 1/3] refactor: decouple AttributeListener from BaseAttributeListener AttributeListener now only declares identity APIs; kits implement BaseAttributeListener alongside it for user attribute callbacks. Update affected kits, AttributeListenerTestKit, and KitManagerImplTest mocks. Made-with: Cursor --- .../kits/testkits/AttributeListenerTestKit.kt | 2 ++ .../com/mparticle/kits/KitIntegration.java | 11 ++++++--- .../com/mparticle/kits/KitManagerImplTest.kt | 24 +++++++++---------- .../kotlin/com/mparticle/kits/AdobeKitBase.kt | 2 ++ .../kotlin/com/mparticle/kits/AdobeKit.kt | 2 ++ .../kotlin/com/mparticle/kits/ApptimizeKit.kt | 2 ++ .../com/mparticle/kits/BranchMetricsKit.kt | 2 ++ .../kotlin/com/mparticle/kits/ComscoreKit.kt | 2 ++ .../kotlin/com/mparticle/kits/KochavaKit.kt | 2 ++ .../com/mparticle/kits/LocalyticsKit.kt | 2 ++ .../com/mparticle/kits/UrbanAirshipKit.kt | 2 ++ 11 files changed, 38 insertions(+), 15 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 8d1ca5573..c94113c86 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 @@ -3,11 +3,13 @@ package com.mparticle.kits.testkits import com.mparticle.MParticle import com.mparticle.kits.FilteredMParticleUser import com.mparticle.kits.KitIntegration.AttributeListener +import com.mparticle.kits.KitIntegration.BaseAttributeListener import com.mparticle.kits.KitIntegration.LogoutListener import com.mparticle.kits.ReportingMessage open class AttributeListenerTestKit : ListenerTestKit(), + BaseAttributeListener, AttributeListener, LogoutListener { var setUserAttributeCallback: ((attributeKey: String?, attributeValue: String?) -> 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 ccf78f24e..99c5f015b 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 @@ -365,8 +365,8 @@ public interface LogoutListener { * {@link UserAttributeListener}. Factoring out common API surface lets the SDK land incremental changes * and smaller pull requests instead of a single large refactor. *

- * Kits implement {@link AttributeListener} and/or {@link UserAttributeListener}; they do not implement this - * type directly. + * User attribute callbacks shared by {@link AttributeListener} (implement both) and {@link UserAttributeListener} + * (extends this interface). Kits implementing only {@link UserAttributeListener} do not list this type explicitly. */ @Deprecated public interface BaseAttributeListener { @@ -423,7 +423,12 @@ void onSetAllUserAttributes( FilteredMParticleUser user); } - public interface AttributeListener extends BaseAttributeListener { + /** + * Identity forwarding for kits that also receive user attribute callbacks. Implement together with + * {@link BaseAttributeListener} (kits that only need user attributes may implement {@link UserAttributeListener} + * instead, which extends {@link BaseAttributeListener}). + */ + public interface AttributeListener { void setUserIdentity(MParticle.IdentityType identityType, String identity); diff --git a/android-kit-base/src/test/kotlin/com/mparticle/kits/KitManagerImplTest.kt b/android-kit-base/src/test/kotlin/com/mparticle/kits/KitManagerImplTest.kt index 9ea28affe..62860d8e1 100644 --- a/android-kit-base/src/test/kotlin/com/mparticle/kits/KitManagerImplTest.kt +++ b/android-kit-base/src/test/kotlin/com/mparticle/kits/KitManagerImplTest.kt @@ -493,15 +493,15 @@ class KitManagerImplTest { val integration = mock( KitIntegration::class.java, - withSettings().extraInterfaces(AttributeListener::class.java), + withSettings().extraInterfaces(AttributeListener::class.java, BaseAttributeListener::class.java), ) val integration2 = mock( KitIntegration::class.java, - withSettings().extraInterfaces(AttributeListener::class.java), + withSettings().extraInterfaces(AttributeListener::class.java, BaseAttributeListener::class.java), ) - `when`((integration as AttributeListener).supportsAttributeLists()).thenReturn(true) - `when`((integration2 as AttributeListener).supportsAttributeLists()) + `when`((integration as BaseAttributeListener).supportsAttributeLists()).thenReturn(true) + `when`((integration2 as BaseAttributeListener).supportsAttributeLists()) .thenReturn(false) `when`(integration.configuration) .thenReturn(MockKitConfiguration.createKitConfiguration()) @@ -537,15 +537,15 @@ class KitManagerImplTest { val integration = mock( KitIntegration::class.java, - withSettings().extraInterfaces(AttributeListener::class.java), + withSettings().extraInterfaces(AttributeListener::class.java, BaseAttributeListener::class.java), ) val integration2 = mock( KitIntegration::class.java, - withSettings().extraInterfaces(AttributeListener::class.java), + withSettings().extraInterfaces(AttributeListener::class.java, BaseAttributeListener::class.java), ) - `when`((integration as AttributeListener).supportsAttributeLists()).thenReturn(true) - `when`((integration2 as AttributeListener).supportsAttributeLists()) + `when`((integration as BaseAttributeListener).supportsAttributeLists()).thenReturn(true) + `when`((integration2 as BaseAttributeListener).supportsAttributeLists()) .thenReturn(false) `when`(integration.configuration) .thenReturn(MockKitConfiguration.createKitConfiguration()) @@ -571,15 +571,15 @@ class KitManagerImplTest { val integration = mock( KitIntegration::class.java, - withSettings().extraInterfaces(AttributeListener::class.java), + withSettings().extraInterfaces(AttributeListener::class.java, BaseAttributeListener::class.java), ) val integration2 = mock( KitIntegration::class.java, - withSettings().extraInterfaces(AttributeListener::class.java), + withSettings().extraInterfaces(AttributeListener::class.java, BaseAttributeListener::class.java), ) - `when`((integration as AttributeListener).supportsAttributeLists()).thenReturn(true) - `when`((integration2 as AttributeListener).supportsAttributeLists()) + `when`((integration as BaseAttributeListener).supportsAttributeLists()).thenReturn(true) + `when`((integration2 as BaseAttributeListener).supportsAttributeLists()) .thenReturn(false) `when`(integration.configuration) .thenReturn(MockKitConfiguration.createKitConfiguration()) 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 fe0abda91..b1d931d02 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.BaseAttributeListener import com.mparticle.kits.KitIntegration.LogoutListener import com.mparticle.kits.KitIntegration.PushListener import org.json.JSONException @@ -16,6 +17,7 @@ import java.net.URL abstract class AdobeKitBase : KitIntegration(), + BaseAttributeListener, AttributeListener, LogoutListener, PushListener, 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 6fd47dd2d..7bc89590f 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 @@ -19,6 +19,7 @@ import com.mparticle.MPEvent import com.mparticle.MParticle import com.mparticle.kits.KitIntegration.ApplicationStateListener import com.mparticle.kits.KitIntegration.AttributeListener +import com.mparticle.kits.KitIntegration.BaseAttributeListener import com.mparticle.kits.KitIntegration.EventListener import com.mparticle.kits.KitIntegration.LogoutListener import com.mparticle.kits.KitIntegration.PushListener @@ -36,6 +37,7 @@ import com.mparticle.media.events.StreamType open class AdobeKit : KitIntegration(), EventListener, + BaseAttributeListener, AttributeListener, LogoutListener, PushListener, 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 2cf24e0e7..400991671 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 @@ -12,12 +12,14 @@ import com.mparticle.MParticle import com.mparticle.MParticle.IdentityType import com.mparticle.commerce.CommerceEvent import com.mparticle.kits.KitIntegration.AttributeListener +import com.mparticle.kits.KitIntegration.BaseAttributeListener import com.mparticle.kits.KitIntegration.CommerceListener import com.mparticle.kits.KitIntegration.LogoutListener import java.math.BigDecimal class ApptimizeKit : KitIntegration(), + BaseAttributeListener, AttributeListener, LogoutListener, KitIntegration.EventListener, 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 b420ec33b..d650eed17 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 @@ -12,6 +12,7 @@ import com.mparticle.identity.MParticleUser import com.mparticle.internal.Logger import com.mparticle.kits.KitIntegration.ApplicationStateListener import com.mparticle.kits.KitIntegration.AttributeListener +import com.mparticle.kits.KitIntegration.BaseAttributeListener import com.mparticle.kits.KitIntegration.CommerceListener import com.mparticle.kits.KitIntegration.EventListener import com.mparticle.kits.KitIntegration.IdentityListener @@ -37,6 +38,7 @@ class BranchMetricsKit : KitIntegration(), EventListener, CommerceListener, + BaseAttributeListener, AttributeListener, LogoutListener, ApplicationStateListener, 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 23ee806a5..97176f539 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.BaseAttributeListener import com.mparticle.kits.KitIntegration.LogoutListener import java.util.HashMap import java.util.LinkedList @@ -19,6 +20,7 @@ import java.util.LinkedList class ComscoreKit : KitIntegration(), KitIntegration.EventListener, + BaseAttributeListener, AttributeListener, LogoutListener, ActivityListener { 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 fcbf5141d..9b512aa08 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.BaseAttributeListener import com.mparticle.kits.KitIntegration.LogoutListener import org.json.JSONException import org.json.JSONObject class KochavaKit : KitIntegration(), + BaseAttributeListener, AttributeListener, LogoutListener, KitIntegration.IdentityListener { 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 130386da6..6571ed1f2 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 @@ -17,6 +17,7 @@ import com.mparticle.commerce.Product import com.mparticle.internal.Logger import com.mparticle.internal.MPUtility import com.mparticle.kits.KitIntegration.AttributeListener +import com.mparticle.kits.KitIntegration.BaseAttributeListener import com.mparticle.kits.KitIntegration.CommerceListener import com.mparticle.kits.KitIntegration.EventListener import com.mparticle.kits.KitIntegration.LogoutListener @@ -31,6 +32,7 @@ class LocalyticsKit : KitIntegration(), KitIntegration.EventListener, CommerceListener, + BaseAttributeListener, AttributeListener, LogoutListener, PushListener, 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 28b1cc7c8..fac45d63b 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 @@ -21,6 +21,7 @@ import com.urbanairship.push.PushProviderBridge import java.math.BigDecimal import java.util.LinkedList import com.mparticle.kits.KitIntegration.AttributeListener +import com.mparticle.kits.KitIntegration.BaseAttributeListener /** * mParticle-Urban Airship Kit integration @@ -30,6 +31,7 @@ class UrbanAirshipKit : KitIntegration.PushListener, KitIntegration.EventListener, CommerceListener, + BaseAttributeListener, AttributeListener, LogoutListener { private var channelIdListener: ChannelIdListener? = null From 53a1086df4d20c6d3ccc65774a365167e4d3c521 Mon Sep 17 00:00:00 2001 From: Denis Chilik Date: Thu, 2 Apr 2026 09:16:00 -0400 Subject: [PATCH 2/3] Rename AttributeListener to ModifyIdentityListener Replace KitIntegration.AttributeListener with ModifyIdentityListener for set/remove user identity forwarding. Update KitManagerImpl, affected kits, and rename AttributeListenerTestKit to ModifyIdentityListenerTestKit. Clarify BaseAttributeListener Javadoc links and KitManagerImpl section comment. Made-with: Cursor --- .../kits/DataplanBlockingUserTests.kt | 8 ++++---- .../com/mparticle/kits/KitManagerImplTests.kt | 10 +++++----- ...Kit.kt => ModifyIdentityListenerTestKit.kt} | 6 +++--- .../com/mparticle/kits/KitIntegration.java | 6 +++--- .../com/mparticle/kits/KitManagerImpl.java | 18 +++++++++--------- .../com/mparticle/kits/KitManagerImplTest.kt | 14 +++++++------- .../kotlin/com/mparticle/kits/AdobeKitBase.kt | 4 ++-- .../main/kotlin/com/mparticle/kits/AdobeKit.kt | 4 ++-- .../kotlin/com/mparticle/kits/AppsFlyerKit.kt | 4 ++-- .../kotlin/com/mparticle/kits/ApptimizeKit.kt | 4 ++-- .../com/mparticle/kits/BranchMetricsKit.kt | 4 ++-- .../kotlin/com/mparticle/kits/AppboyKit.kt | 4 ++-- .../kotlin/com/mparticle/kits/AppboyKit.kt | 4 ++-- .../kotlin/com/mparticle/kits/AppboyKit.kt | 4 ++-- .../kotlin/com/mparticle/kits/AppboyKit.kt | 4 ++-- .../kotlin/com/mparticle/kits/ComscoreKit.kt | 4 ++-- .../kotlin/com/mparticle/kits/KochavaKit.kt | 4 ++-- .../kotlin/com/mparticle/kits/LocalyticsKit.kt | 4 ++-- .../kotlin/com/mparticle/kits/SingularKit.kt | 4 ++-- .../com/mparticle/kits/UrbanAirshipKit.kt | 4 ++-- 20 files changed, 59 insertions(+), 59 deletions(-) rename android-kit-base/src/androidTest/kotlin/com/mparticle/kits/testkits/{AttributeListenerTestKit.kt => ModifyIdentityListenerTestKit.kt} (95%) diff --git a/android-kit-base/src/androidTest/kotlin/com/mparticle/kits/DataplanBlockingUserTests.kt b/android-kit-base/src/androidTest/kotlin/com/mparticle/kits/DataplanBlockingUserTests.kt index 3af30432e..6d92e408a 100644 --- a/android-kit-base/src/androidTest/kotlin/com/mparticle/kits/DataplanBlockingUserTests.kt +++ b/android-kit-base/src/androidTest/kotlin/com/mparticle/kits/DataplanBlockingUserTests.kt @@ -11,9 +11,9 @@ import com.mparticle.Utils.randomString import com.mparticle.identity.IdentityApiRequest import com.mparticle.internal.AccessUtils import com.mparticle.kits.DataplanFilterImpl.Companion.getEventsApiName -import com.mparticle.kits.testkits.AttributeListenerTestKit import com.mparticle.kits.testkits.IdentityListenerTestKit import com.mparticle.kits.testkits.ListenerTestKit +import com.mparticle.kits.testkits.ModifyIdentityListenerTestKit import com.mparticle.kits.testkits.UserAttributeListenerTestKit import com.mparticle.testutils.MPLatch import org.junit.Assert.assertEquals @@ -25,7 +25,7 @@ import org.junit.Test import kotlin.random.Random class DataplanBlockingUserTests : BaseKitOptionsTest() { - private lateinit var attributeListenerKitKit: AttributeListenerTestKit + private lateinit var attributeListenerKitKit: ModifyIdentityListenerTestKit private lateinit var identityListenerKitKit: IdentityListenerTestKit private lateinit var userAttributeListenerKitKit: UserAttributeListenerTestKit private lateinit var kitIntegrationTestKits: List @@ -36,7 +36,7 @@ class DataplanBlockingUserTests : BaseKitOptionsTest() { .builder(mContext) .configuration( KitOptions { - addKit(-1, AttributeListenerTestKit::class.java) + addKit(-1, ModifyIdentityListenerTestKit::class.java) addKit(-2, IdentityListenerTestKit::class.java) addKit(-3, UserAttributeListenerTestKit::class.java) }, @@ -44,7 +44,7 @@ class DataplanBlockingUserTests : BaseKitOptionsTest() { startMParticle(it) } attributeListenerKitKit = - MParticle.getInstance()?.getKitInstance(-1) as AttributeListenerTestKit + MParticle.getInstance()?.getKitInstance(-1) as ModifyIdentityListenerTestKit identityListenerKitKit = MParticle.getInstance()?.getKitInstance(-2) as IdentityListenerTestKit userAttributeListenerKitKit = diff --git a/android-kit-base/src/androidTest/kotlin/com/mparticle/kits/KitManagerImplTests.kt b/android-kit-base/src/androidTest/kotlin/com/mparticle/kits/KitManagerImplTests.kt index e98cb5e67..447c72780 100644 --- a/android-kit-base/src/androidTest/kotlin/com/mparticle/kits/KitManagerImplTests.kt +++ b/android-kit-base/src/androidTest/kotlin/com/mparticle/kits/KitManagerImplTests.kt @@ -7,8 +7,8 @@ import com.mparticle.MParticle import com.mparticle.MParticleOptions import com.mparticle.internal.ConfigManager import com.mparticle.internal.KitManager -import com.mparticle.kits.testkits.AttributeListenerTestKit import com.mparticle.kits.testkits.IdentityListenerTestKit +import com.mparticle.kits.testkits.ModifyIdentityListenerTestKit import com.mparticle.kits.testkits.UserAttributeListenerTestKit import com.mparticle.networking.Matcher import com.mparticle.testutils.MPLatch @@ -22,7 +22,7 @@ class KitManagerImplTests : BaseKitOptionsTest() { @Test fun testKitIntializationViaKitOptions() { KitOptions() - .addKit(1001, AttributeListenerTestKit::class.java) + .addKit(1001, ModifyIdentityListenerTestKit::class.java) .addKit(1002, IdentityListenerTestKit::class.java) .addKit(1003, UserAttributeListenerTestKit::class.java) .let { @@ -35,7 +35,7 @@ class KitManagerImplTests : BaseKitOptionsTest() { fun getKit(kitId: Int) = MParticle.getInstance()?.getKitInstance(kitId) - assertTrue(getKit(1001) is AttributeListenerTestKit) + assertTrue(getKit(1001) is ModifyIdentityListenerTestKit) assertTrue(getKit(1002) is IdentityListenerTestKit) assertTrue(getKit(1003) is UserAttributeListenerTestKit) } @@ -62,10 +62,10 @@ class KitManagerImplTests : BaseKitOptionsTest() { .builder(mContext) .configuration( ConfiguredKitOptions { - addKit(-1, AttributeListenerTestKit::class.java, JSONObject().put("eau", true)) + addKit(-1, ModifyIdentityListenerTestKit::class.java, JSONObject().put("eau", true)) addKit(-2, IdentityListenerTestKit::class.java) addKit(-3, UserAttributeListenerTestKit::class.java) - addKit(-4, AttributeListenerTestKit::class.java, JSONObject().put("eau", true)) + addKit(-4, ModifyIdentityListenerTestKit::class.java, JSONObject().put("eau", true)) addKit(-5, IdentityListenerTestKit::class.java) addKit(-6, UserAttributeListenerTestKit::class.java) }.apply { 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/ModifyIdentityListenerTestKit.kt similarity index 95% rename from android-kit-base/src/androidTest/kotlin/com/mparticle/kits/testkits/AttributeListenerTestKit.kt rename to android-kit-base/src/androidTest/kotlin/com/mparticle/kits/testkits/ModifyIdentityListenerTestKit.kt index c94113c86..78db54b8b 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/ModifyIdentityListenerTestKit.kt @@ -2,15 +2,15 @@ package com.mparticle.kits.testkits import com.mparticle.MParticle import com.mparticle.kits.FilteredMParticleUser -import com.mparticle.kits.KitIntegration.AttributeListener import com.mparticle.kits.KitIntegration.BaseAttributeListener import com.mparticle.kits.KitIntegration.LogoutListener +import com.mparticle.kits.KitIntegration.ModifyIdentityListener import com.mparticle.kits.ReportingMessage -open class AttributeListenerTestKit : +open class ModifyIdentityListenerTestKit : ListenerTestKit(), BaseAttributeListener, - AttributeListener, + ModifyIdentityListener, LogoutListener { var setUserAttributeCallback: ((attributeKey: String?, attributeValue: String?) -> Unit)? = null var setUserAttributeList: ((attributeKey: String?, attributeValueList: List?) -> Unit)? = 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 99c5f015b..eb2093197 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 @@ -361,11 +361,11 @@ public interface LogoutListener { } /** - * Temporary shared contract used while {@link AttributeListener} behavior is migrated to + * Temporary shared contract used while {@link ModifyIdentityListener} behavior is migrated to * {@link UserAttributeListener}. Factoring out common API surface lets the SDK land incremental changes * and smaller pull requests instead of a single large refactor. *

- * User attribute callbacks shared by {@link AttributeListener} (implement both) and {@link UserAttributeListener} + * User attribute callbacks shared by {@link ModifyIdentityListener} (implement both) and {@link UserAttributeListener} * (extends this interface). Kits implementing only {@link UserAttributeListener} do not list this type explicitly. */ @Deprecated @@ -428,7 +428,7 @@ void onSetAllUserAttributes( * {@link BaseAttributeListener} (kits that only need user attributes may implement {@link UserAttributeListener} * instead, which extends {@link BaseAttributeListener}). */ - public interface AttributeListener { + public interface ModifyIdentityListener { void setUserIdentity(MParticle.IdentityType identityType, String identity); 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 a37cd0a28..672e00698 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 @@ -310,8 +310,8 @@ private void initializeKit(KitIntegration activeKit) { } } - if (activeKit instanceof KitIntegration.AttributeListener) { - syncUserIdentities((KitIntegration.AttributeListener) activeKit, activeKit.getConfiguration()); + if (activeKit instanceof KitIntegration.ModifyIdentityListener) { + syncUserIdentities((KitIntegration.ModifyIdentityListener) activeKit, activeKit.getConfiguration()); } MParticle instance = MParticle.getInstance(); @@ -592,7 +592,7 @@ public boolean onPushRegistration(String token, String senderId) { } //================================================================================ - // KitIntegration.AttributeListener forwarding + // BaseAttributeListener user-attribute forwarding //================================================================================ public void onUserAttributesReceived(Map userAttributes, Map> userAttributeLists, Long mpid) { userAttributes = mDataplanFilter.transformUserAttributes(userAttributes); @@ -623,7 +623,7 @@ public void onUserAttributesReceived(Map userAttributes, Map entry : identities.entrySet()) { if (configuration.shouldSetIdentity(entry.getKey())) { - attributeListener.setUserIdentity(entry.getKey(), entry.getValue()); + modifyIdentityListener.setUserIdentity(entry.getKey(), entry.getValue()); } } } @@ -753,8 +753,8 @@ public void setUserIdentity(String id, MParticle.IdentityType identityType) { } for (KitIntegration provider : providers.values()) { try { - if (provider instanceof KitIntegration.AttributeListener && !provider.isDisabled() && provider.getConfiguration().shouldSetIdentity(identityType)) { - ((KitIntegration.AttributeListener) provider).setUserIdentity(identityType, id); + if (provider instanceof KitIntegration.ModifyIdentityListener && !provider.isDisabled() && provider.getConfiguration().shouldSetIdentity(identityType)) { + ((KitIntegration.ModifyIdentityListener) provider).setUserIdentity(identityType, id); } } catch (Exception e) { Logger.warning("Failed to call setUserIdentity for kit: " + provider.getName() + ": " + e.getMessage()); @@ -769,8 +769,8 @@ public void removeUserIdentity(MParticle.IdentityType identityType) { } for (KitIntegration provider : providers.values()) { try { - if (provider instanceof KitIntegration.AttributeListener && !provider.isDisabled()) { - ((KitIntegration.AttributeListener) provider).removeUserIdentity(identityType); + if (provider instanceof KitIntegration.ModifyIdentityListener && !provider.isDisabled()) { + ((KitIntegration.ModifyIdentityListener) provider).removeUserIdentity(identityType); } } catch (Exception e) { Logger.warning("Failed to call removeUserIdentity for kit: " + provider.getName() + ": " + e.getMessage()); diff --git a/android-kit-base/src/test/kotlin/com/mparticle/kits/KitManagerImplTest.kt b/android-kit-base/src/test/kotlin/com/mparticle/kits/KitManagerImplTest.kt index 62860d8e1..3e175fff0 100644 --- a/android-kit-base/src/test/kotlin/com/mparticle/kits/KitManagerImplTest.kt +++ b/android-kit-base/src/test/kotlin/com/mparticle/kits/KitManagerImplTest.kt @@ -22,8 +22,8 @@ import com.mparticle.internal.CoreCallbacks import com.mparticle.internal.Logger import com.mparticle.internal.MPUtility import com.mparticle.internal.SideloadedKit -import com.mparticle.kits.KitIntegration.AttributeListener import com.mparticle.kits.KitIntegration.BaseAttributeListener +import com.mparticle.kits.KitIntegration.ModifyIdentityListener import com.mparticle.mock.MockContext import com.mparticle.mock.MockKitConfiguration import com.mparticle.mock.MockKitManagerImpl @@ -493,12 +493,12 @@ class KitManagerImplTest { val integration = mock( KitIntegration::class.java, - withSettings().extraInterfaces(AttributeListener::class.java, BaseAttributeListener::class.java), + withSettings().extraInterfaces(ModifyIdentityListener::class.java, BaseAttributeListener::class.java), ) val integration2 = mock( KitIntegration::class.java, - withSettings().extraInterfaces(AttributeListener::class.java, BaseAttributeListener::class.java), + withSettings().extraInterfaces(ModifyIdentityListener::class.java, BaseAttributeListener::class.java), ) `when`((integration as BaseAttributeListener).supportsAttributeLists()).thenReturn(true) `when`((integration2 as BaseAttributeListener).supportsAttributeLists()) @@ -537,12 +537,12 @@ class KitManagerImplTest { val integration = mock( KitIntegration::class.java, - withSettings().extraInterfaces(AttributeListener::class.java, BaseAttributeListener::class.java), + withSettings().extraInterfaces(ModifyIdentityListener::class.java, BaseAttributeListener::class.java), ) val integration2 = mock( KitIntegration::class.java, - withSettings().extraInterfaces(AttributeListener::class.java, BaseAttributeListener::class.java), + withSettings().extraInterfaces(ModifyIdentityListener::class.java, BaseAttributeListener::class.java), ) `when`((integration as BaseAttributeListener).supportsAttributeLists()).thenReturn(true) `when`((integration2 as BaseAttributeListener).supportsAttributeLists()) @@ -571,12 +571,12 @@ class KitManagerImplTest { val integration = mock( KitIntegration::class.java, - withSettings().extraInterfaces(AttributeListener::class.java, BaseAttributeListener::class.java), + withSettings().extraInterfaces(ModifyIdentityListener::class.java, BaseAttributeListener::class.java), ) val integration2 = mock( KitIntegration::class.java, - withSettings().extraInterfaces(AttributeListener::class.java, BaseAttributeListener::class.java), + withSettings().extraInterfaces(ModifyIdentityListener::class.java, BaseAttributeListener::class.java), ) `when`((integration as BaseAttributeListener).supportsAttributeLists()).thenReturn(true) `when`((integration2 as BaseAttributeListener).supportsAttributeLists()) 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 b1d931d02..5fa6a964c 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 @@ -6,7 +6,7 @@ import com.mparticle.MParticle.IdentityType 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.ModifyIdentityListener import com.mparticle.kits.KitIntegration.BaseAttributeListener import com.mparticle.kits.KitIntegration.LogoutListener import com.mparticle.kits.KitIntegration.PushListener @@ -18,7 +18,7 @@ import java.net.URL abstract class AdobeKitBase : KitIntegration(), BaseAttributeListener, - AttributeListener, + ModifyIdentityListener, LogoutListener, PushListener, ApplicationStateListener { 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 7bc89590f..0e1720871 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 @@ -18,7 +18,7 @@ import com.mparticle.BaseEvent import com.mparticle.MPEvent import com.mparticle.MParticle import com.mparticle.kits.KitIntegration.ApplicationStateListener -import com.mparticle.kits.KitIntegration.AttributeListener +import com.mparticle.kits.KitIntegration.ModifyIdentityListener import com.mparticle.kits.KitIntegration.BaseAttributeListener import com.mparticle.kits.KitIntegration.EventListener import com.mparticle.kits.KitIntegration.LogoutListener @@ -38,7 +38,7 @@ open class AdobeKit : KitIntegration(), EventListener, BaseAttributeListener, - AttributeListener, + ModifyIdentityListener, LogoutListener, PushListener, ApplicationStateListener { 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 8d2356b9c..f45d59e61 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,7 +37,7 @@ import org.json.JSONException import org.json.JSONObject import java.math.BigDecimal import java.util.LinkedList -import com.mparticle.kits.KitIntegration.AttributeListener +import com.mparticle.kits.KitIntegration.ModifyIdentityListener /** * mParticle Kit wrapper for the AppsFlyer SDK @@ -45,7 +45,7 @@ import com.mparticle.kits.KitIntegration.AttributeListener class AppsFlyerKit : KitIntegration(), KitIntegration.EventListener, - AttributeListener, + ModifyIdentityListener, LogoutListener, KitIntegration.CommerceListener, AppsFlyerConversionListener, 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 400991671..f5688f76f 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 @@ -11,7 +11,7 @@ import com.mparticle.MPEvent import com.mparticle.MParticle import com.mparticle.MParticle.IdentityType import com.mparticle.commerce.CommerceEvent -import com.mparticle.kits.KitIntegration.AttributeListener +import com.mparticle.kits.KitIntegration.ModifyIdentityListener import com.mparticle.kits.KitIntegration.BaseAttributeListener import com.mparticle.kits.KitIntegration.CommerceListener import com.mparticle.kits.KitIntegration.LogoutListener @@ -20,7 +20,7 @@ import java.math.BigDecimal class ApptimizeKit : KitIntegration(), BaseAttributeListener, - AttributeListener, + ModifyIdentityListener, LogoutListener, KitIntegration.EventListener, CommerceListener, 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 d650eed17..96715865b 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 @@ -11,7 +11,7 @@ import com.mparticle.commerce.CommerceEvent import com.mparticle.identity.MParticleUser import com.mparticle.internal.Logger import com.mparticle.kits.KitIntegration.ApplicationStateListener -import com.mparticle.kits.KitIntegration.AttributeListener +import com.mparticle.kits.KitIntegration.ModifyIdentityListener import com.mparticle.kits.KitIntegration.BaseAttributeListener import com.mparticle.kits.KitIntegration.CommerceListener import com.mparticle.kits.KitIntegration.EventListener @@ -39,7 +39,7 @@ class BranchMetricsKit : EventListener, CommerceListener, BaseAttributeListener, - AttributeListener, + ModifyIdentityListener, LogoutListener, ApplicationStateListener, IdentityListener, 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 5aa06e6ec..00b534708 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 @@ -31,7 +31,7 @@ import com.mparticle.consent.ConsentState import com.mparticle.identity.MParticleUser import com.mparticle.internal.Logger import com.mparticle.kits.CommerceEventUtils.OnAttributeExtracted -import com.mparticle.kits.KitIntegration.AttributeListener +import com.mparticle.kits.KitIntegration.ModifyIdentityListener import com.mparticle.kits.KitIntegration.CommerceListener import com.mparticle.kits.KitIntegration.EventListener import com.mparticle.kits.KitIntegration.IdentityListener @@ -54,7 +54,7 @@ import kotlin.collections.HashMap */ open class AppboyKit : KitIntegration(), - AttributeListener, + ModifyIdentityListener, LogoutListener, CommerceListener, KitIntegration.EventListener, 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 5aa06e6ec..00b534708 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 @@ -31,7 +31,7 @@ import com.mparticle.consent.ConsentState import com.mparticle.identity.MParticleUser import com.mparticle.internal.Logger import com.mparticle.kits.CommerceEventUtils.OnAttributeExtracted -import com.mparticle.kits.KitIntegration.AttributeListener +import com.mparticle.kits.KitIntegration.ModifyIdentityListener import com.mparticle.kits.KitIntegration.CommerceListener import com.mparticle.kits.KitIntegration.EventListener import com.mparticle.kits.KitIntegration.IdentityListener @@ -54,7 +54,7 @@ import kotlin.collections.HashMap */ open class AppboyKit : KitIntegration(), - AttributeListener, + ModifyIdentityListener, LogoutListener, CommerceListener, KitIntegration.EventListener, 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 5aa06e6ec..00b534708 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 @@ -31,7 +31,7 @@ import com.mparticle.consent.ConsentState import com.mparticle.identity.MParticleUser import com.mparticle.internal.Logger import com.mparticle.kits.CommerceEventUtils.OnAttributeExtracted -import com.mparticle.kits.KitIntegration.AttributeListener +import com.mparticle.kits.KitIntegration.ModifyIdentityListener import com.mparticle.kits.KitIntegration.CommerceListener import com.mparticle.kits.KitIntegration.EventListener import com.mparticle.kits.KitIntegration.IdentityListener @@ -54,7 +54,7 @@ import kotlin.collections.HashMap */ open class AppboyKit : KitIntegration(), - AttributeListener, + ModifyIdentityListener, LogoutListener, CommerceListener, KitIntegration.EventListener, 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 5aa06e6ec..00b534708 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 @@ -31,7 +31,7 @@ import com.mparticle.consent.ConsentState import com.mparticle.identity.MParticleUser import com.mparticle.internal.Logger import com.mparticle.kits.CommerceEventUtils.OnAttributeExtracted -import com.mparticle.kits.KitIntegration.AttributeListener +import com.mparticle.kits.KitIntegration.ModifyIdentityListener import com.mparticle.kits.KitIntegration.CommerceListener import com.mparticle.kits.KitIntegration.EventListener import com.mparticle.kits.KitIntegration.IdentityListener @@ -54,7 +54,7 @@ import kotlin.collections.HashMap */ open class AppboyKit : KitIntegration(), - AttributeListener, + ModifyIdentityListener, LogoutListener, CommerceListener, KitIntegration.EventListener, 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 97176f539..687846096 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 @@ -11,7 +11,7 @@ import com.mparticle.MPEvent 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.ModifyIdentityListener import com.mparticle.kits.KitIntegration.BaseAttributeListener import com.mparticle.kits.KitIntegration.LogoutListener import java.util.HashMap @@ -21,7 +21,7 @@ class ComscoreKit : KitIntegration(), KitIntegration.EventListener, BaseAttributeListener, - AttributeListener, + ModifyIdentityListener, 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 9b512aa08..29d24049a 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 @@ -9,7 +9,7 @@ import com.mparticle.AttributionError 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.ModifyIdentityListener import com.mparticle.kits.KitIntegration.BaseAttributeListener import com.mparticle.kits.KitIntegration.LogoutListener import org.json.JSONException @@ -18,7 +18,7 @@ import org.json.JSONObject class KochavaKit : KitIntegration(), BaseAttributeListener, - AttributeListener, + ModifyIdentityListener, 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 6571ed1f2..e22d41e16 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 @@ -16,7 +16,7 @@ import com.mparticle.commerce.CommerceEvent import com.mparticle.commerce.Product import com.mparticle.internal.Logger import com.mparticle.internal.MPUtility -import com.mparticle.kits.KitIntegration.AttributeListener +import com.mparticle.kits.KitIntegration.ModifyIdentityListener import com.mparticle.kits.KitIntegration.BaseAttributeListener import com.mparticle.kits.KitIntegration.CommerceListener import com.mparticle.kits.KitIntegration.EventListener @@ -33,7 +33,7 @@ class LocalyticsKit : KitIntegration.EventListener, CommerceListener, BaseAttributeListener, - AttributeListener, + ModifyIdentityListener, LogoutListener, PushListener, CallToActionListener { 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 ab6df79f8..08ccb472b 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 @@ -16,7 +16,7 @@ import com.mparticle.internal.Logger import com.mparticle.internal.MPUtility import com.mparticle.kits.KitIntegration.ActivityListener import com.mparticle.kits.KitIntegration.ApplicationStateListener -import com.mparticle.kits.KitIntegration.AttributeListener +import com.mparticle.kits.KitIntegration.ModifyIdentityListener import com.mparticle.kits.KitIntegration.CommerceListener import com.mparticle.kits.KitIntegration.EventListener import com.mparticle.kits.KitIntegration.LogoutListener @@ -39,7 +39,7 @@ open class SingularKit : CommerceListener, ApplicationStateListener, UserAttributeListener, - AttributeListener, + ModifyIdentityListener, LogoutListener { interface DeviceAttributionCallback : SingularDeviceAttributionHandler 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 fac45d63b..018cfa42e 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,7 +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 +import com.mparticle.kits.KitIntegration.ModifyIdentityListener import com.mparticle.kits.KitIntegration.BaseAttributeListener /** @@ -32,7 +32,7 @@ class UrbanAirshipKit : KitIntegration.EventListener, CommerceListener, BaseAttributeListener, - AttributeListener, + ModifyIdentityListener, LogoutListener { private var channelIdListener: ChannelIdListener? = null private var configuration: UrbanAirshipConfiguration? = null From 39366c7959f741c7f3b08a66169088681f4d97b9 Mon Sep 17 00:00:00 2001 From: Denis Chilik Date: Thu, 2 Apr 2026 09:22:36 -0400 Subject: [PATCH 3/3] Remove BaseAttributeListener; fold into UserAttributeListener Drop the deprecated BaseAttributeListener type and merge its callbacks into UserAttributeListener. KitManagerImpl now forwards user attributes using UserAttributeListener only; incrementUserAttribute calls both increment and setUserAttribute on the same listener. Kits that previously implemented BaseAttributeListener without the extended callbacks now implement UserAttributeListener with no-op onIncrementUserAttribute, onSetUserTag, and onConsentStateUpdated. Update ModifyIdentityListenerTestKit and KitManagerImplTest accordingly. Made-with: Cursor --- .../testkits/ModifyIdentityListenerTestKit.kt | 26 +++- .../com/mparticle/kits/KitIntegration.java | 124 ++++++++---------- .../com/mparticle/kits/KitManagerImpl.java | 23 ++-- .../com/mparticle/kits/KitManagerImplTest.kt | 34 ++--- .../kotlin/com/mparticle/kits/AdobeKitBase.kt | 26 +++- .../kotlin/com/mparticle/kits/AdobeKit.kt | 26 +++- .../kotlin/com/mparticle/kits/ApptimizeKit.kt | 26 +++- .../com/mparticle/kits/BranchMetricsKit.kt | 26 +++- .../kotlin/com/mparticle/kits/ComscoreKit.kt | 26 +++- .../kotlin/com/mparticle/kits/KochavaKit.kt | 26 +++- .../com/mparticle/kits/LocalyticsKit.kt | 26 +++- .../com/mparticle/kits/UrbanAirshipKit.kt | 26 +++- 12 files changed, 301 insertions(+), 114 deletions(-) diff --git a/android-kit-base/src/androidTest/kotlin/com/mparticle/kits/testkits/ModifyIdentityListenerTestKit.kt b/android-kit-base/src/androidTest/kotlin/com/mparticle/kits/testkits/ModifyIdentityListenerTestKit.kt index 78db54b8b..e17d4308f 100644 --- a/android-kit-base/src/androidTest/kotlin/com/mparticle/kits/testkits/ModifyIdentityListenerTestKit.kt +++ b/android-kit-base/src/androidTest/kotlin/com/mparticle/kits/testkits/ModifyIdentityListenerTestKit.kt @@ -1,15 +1,16 @@ package com.mparticle.kits.testkits import com.mparticle.MParticle +import com.mparticle.consent.ConsentState import com.mparticle.kits.FilteredMParticleUser -import com.mparticle.kits.KitIntegration.BaseAttributeListener import com.mparticle.kits.KitIntegration.LogoutListener import com.mparticle.kits.KitIntegration.ModifyIdentityListener +import com.mparticle.kits.KitIntegration.UserAttributeListener import com.mparticle.kits.ReportingMessage open class ModifyIdentityListenerTestKit : ListenerTestKit(), - BaseAttributeListener, + UserAttributeListener, ModifyIdentityListener, LogoutListener { var setUserAttributeCallback: ((attributeKey: String?, attributeValue: String?) -> Unit)? = null @@ -78,5 +79,26 @@ open class ModifyIdentityListenerTestKit : onAttributeReceived?.invoke(key, value) } + override fun onIncrementUserAttribute( + key: String?, + incrementedBy: Number?, + value: String?, + user: FilteredMParticleUser?, + ) { + } + + override fun onSetUserTag( + key: String?, + user: FilteredMParticleUser?, + ) { + } + + override fun onConsentStateUpdated( + oldState: ConsentState?, + newState: ConsentState?, + user: FilteredMParticleUser?, + ) { + } + override fun logout(): List = logout?.invoke() ?: listOf() } 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 eb2093197..5b3ebbc1e 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 @@ -360,73 +360,9 @@ public interface LogoutListener { List logout(); } - /** - * Temporary shared contract used while {@link ModifyIdentityListener} behavior is migrated to - * {@link UserAttributeListener}. Factoring out common API surface lets the SDK land incremental changes - * and smaller pull requests instead of a single large refactor. - *

- * User attribute callbacks shared by {@link ModifyIdentityListener} (implement both) and {@link UserAttributeListener} - * (extends this interface). Kits implementing only {@link UserAttributeListener} do not list this type explicitly. - */ - @Deprecated - public interface BaseAttributeListener { - - /** - * Indicate to the mParticle Kit framework if this listener supports attribute-values as lists. - *

- * If false, list-specific APIs are not used; values are passed via scalar/csv paths instead. - * - * @return true if this listener supports attribute values as lists. - */ - boolean supportsAttributeLists(); - - /** - * Called when a user attribute is removed for the current user. - * - * @param key attribute key - * @param user filtered user context for this kit - */ - void onRemoveUserAttribute(String key, FilteredMParticleUser user); - - /** - * Called when a scalar user attribute is set for the current user. - * - * @param key attribute key - * @param value attribute value (may be non-String for some {@link UserAttributeListener} call paths) - * @param user filtered user context for this kit - */ - void onSetUserAttribute(String key, Object value, FilteredMParticleUser user); - - /** - * Called when a list-valued user attribute is set and {@link #supportsAttributeLists()} returns true. - * - * @param attributeKey attribute key (may be null) - * @param attributeValueList attribute values (may be null) - * @param user filtered user context for this kit (may be null) - */ - void onSetUserAttributeList( - @Nullable String attributeKey, - @Nullable List attributeValueList, - @Nullable FilteredMParticleUser user); - - /** - * Called when the full set of user attributes is synchronized for the current user. - * - * @param userAttributes scalar user attributes - * @param userAttributeLists list-valued user attributes when {@link #supportsAttributeLists()} is true; - * otherwise list values may be merged into scalars by the framework - * @param user filtered user context for this kit - */ - void onSetAllUserAttributes( - Map userAttributes, - Map> userAttributeLists, - FilteredMParticleUser user); - } - /** * Identity forwarding for kits that also receive user attribute callbacks. Implement together with - * {@link BaseAttributeListener} (kits that only need user attributes may implement {@link UserAttributeListener} - * instead, which extends {@link BaseAttributeListener}). + * {@link UserAttributeListener} when the kit should receive user attribute updates. */ public interface ModifyIdentityListener { @@ -585,14 +521,68 @@ public interface IdentityListener { } - public interface UserAttributeListener extends BaseAttributeListener { + /** + * Kits should implement this interface to receive user attribute updates, tags, increments, consent changes, + * and full attribute syncs from the mParticle SDK. + */ + public interface UserAttributeListener { + + /** + * Indicate to the mParticle Kit framework if this listener supports attribute-values as lists. + *

+ * If false, list-specific APIs are not used; values are passed via scalar/csv paths instead. + * + * @return true if this listener supports attribute values as lists. + */ + boolean supportsAttributeLists(); + + /** + * Called when a user attribute is removed for the current user. + * + * @param key attribute key + * @param user filtered user context for this kit + */ + void onRemoveUserAttribute(String key, FilteredMParticleUser user); + + /** + * Called when a scalar user attribute is set for the current user. + * + * @param key attribute key + * @param value attribute value (may be non-String for some call paths) + * @param user filtered user context for this kit + */ + void onSetUserAttribute(String key, Object value, FilteredMParticleUser user); + + /** + * Called when a list-valued user attribute is set and {@link #supportsAttributeLists()} returns true. + * + * @param attributeKey attribute key (may be null) + * @param attributeValueList attribute values (may be null) + * @param user filtered user context for this kit (may be null) + */ + void onSetUserAttributeList( + @Nullable String attributeKey, + @Nullable List attributeValueList, + @Nullable FilteredMParticleUser user); + + /** + * Called when the full set of user attributes is synchronized for the current user. + * + * @param userAttributes scalar user attributes + * @param userAttributeLists list-valued user attributes when {@link #supportsAttributeLists()} is true; + * otherwise list values may be merged into scalars by the framework + * @param user filtered user context for this kit + */ + void onSetAllUserAttributes( + Map userAttributes, + Map> userAttributeLists, + FilteredMParticleUser user); void onIncrementUserAttribute(String key, Number incrementedBy, String value, FilteredMParticleUser user); void onSetUserTag(String key, FilteredMParticleUser user); void onConsentStateUpdated(ConsentState oldState, ConsentState newState, FilteredMParticleUser user); - } public interface BatchListener { 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 672e00698..d65c9d638 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 @@ -592,14 +592,14 @@ public boolean onPushRegistration(String token, String senderId) { } //================================================================================ - // BaseAttributeListener user-attribute forwarding + // UserAttributeListener user-attribute forwarding //================================================================================ public void onUserAttributesReceived(Map userAttributes, Map> userAttributeLists, Long mpid) { userAttributes = mDataplanFilter.transformUserAttributes(userAttributes); userAttributeLists = mDataplanFilter.transformUserAttributes(userAttributeLists); for (KitIntegration provider : providers.values()) { try { - if ((provider instanceof KitIntegration.BaseAttributeListener listener) + if ((provider instanceof KitIntegration.UserAttributeListener listener) && !provider.isDisabled()) { Map filteredAttributeSingles = (Map) KitConfiguration.filterAttributes(provider.getConfiguration().getUserAttributeFilters(), userAttributes); @@ -623,7 +623,7 @@ public void onUserAttributesReceived(Map userAttributes, Map entry : identities.entrySet()) { if (configuration.shouldSetIdentity(entry.getKey())) { - modifyIdentityListener.setUserIdentity(entry.getKey(), entry.getValue()); + listener.setUserIdentity(entry.getKey(), entry.getValue()); } } } @@ -669,7 +669,7 @@ public void setUserAttributeList(String attributeKey, List valuesList, l } private void setUserAttribute(KitIntegration provider, String attributeKey, List valueList, long mpid) { - if ((provider instanceof KitIntegration.BaseAttributeListener listener) + if ((provider instanceof KitIntegration.UserAttributeListener listener) && !provider.isDisabled() && KitConfiguration.shouldForwardAttribute(provider.getConfiguration().getUserAttributeFilters(), attributeKey)) { boolean supportsAttributeLists = listener.supportsAttributeLists(); @@ -683,7 +683,7 @@ private void setUserAttribute(KitIntegration provider, String attributeKey, List } private void setUserAttribute(KitIntegration provider, String attributeKey, String attributeValue, long mpid) { - if ((provider instanceof KitIntegration.BaseAttributeListener listener) + if ((provider instanceof KitIntegration.UserAttributeListener listener) && !provider.isDisabled() && KitConfiguration.shouldForwardAttribute(provider.getConfiguration().getUserAttributeFilters(), attributeKey)) { @@ -698,7 +698,7 @@ public void removeUserAttribute(String key, long mpid) { } for (KitIntegration provider : providers.values()) { try { - if ((provider instanceof KitIntegration.BaseAttributeListener listener) + if ((provider instanceof KitIntegration.UserAttributeListener listener) && !provider.isDisabled() && KitConfiguration.shouldForwardAttribute(provider.getConfiguration().getUserAttributeFilters(), key)) { listener.onRemoveUserAttribute(key, FilteredMParticleUser.getInstance(mpid, provider)); @@ -716,12 +716,11 @@ public void incrementUserAttribute(String key, Number incrementedBy, String newV } for (KitIntegration provider : providers.values()) { try { - if (!provider.isDisabled() && KitConfiguration.shouldForwardAttribute(provider.getConfiguration().getUserAttributeFilters(), key)) - if (provider instanceof KitIntegration.UserAttributeListener) { - ((KitIntegration.UserAttributeListener) provider).onIncrementUserAttribute(key, incrementedBy, newValue, FilteredMParticleUser.getInstance(mpid, provider)); + if (!provider.isDisabled() && KitConfiguration.shouldForwardAttribute(provider.getConfiguration().getUserAttributeFilters(), key)) { + if (provider instanceof KitIntegration.UserAttributeListener listener) { + listener.onIncrementUserAttribute(key, incrementedBy, newValue, FilteredMParticleUser.getInstance(mpid, provider)); + listener.onSetUserAttribute(key, newValue, FilteredMParticleUser.getInstance(mpid, provider)); } - if (provider instanceof KitIntegration.BaseAttributeListener listener) { - listener.onSetUserAttribute(key, newValue, FilteredMParticleUser.getInstance(mpid, provider)); } } catch (Exception e) { Logger.warning("Failed to call onIncrementUserAttribute for kit: " + provider.getName() + ": " + e.getMessage()); diff --git a/android-kit-base/src/test/kotlin/com/mparticle/kits/KitManagerImplTest.kt b/android-kit-base/src/test/kotlin/com/mparticle/kits/KitManagerImplTest.kt index 3e175fff0..635ed2625 100644 --- a/android-kit-base/src/test/kotlin/com/mparticle/kits/KitManagerImplTest.kt +++ b/android-kit-base/src/test/kotlin/com/mparticle/kits/KitManagerImplTest.kt @@ -22,8 +22,8 @@ import com.mparticle.internal.CoreCallbacks import com.mparticle.internal.Logger import com.mparticle.internal.MPUtility import com.mparticle.internal.SideloadedKit -import com.mparticle.kits.KitIntegration.BaseAttributeListener import com.mparticle.kits.KitIntegration.ModifyIdentityListener +import com.mparticle.kits.KitIntegration.UserAttributeListener import com.mparticle.mock.MockContext import com.mparticle.mock.MockKitConfiguration import com.mparticle.mock.MockKitManagerImpl @@ -493,15 +493,15 @@ class KitManagerImplTest { val integration = mock( KitIntegration::class.java, - withSettings().extraInterfaces(ModifyIdentityListener::class.java, BaseAttributeListener::class.java), + withSettings().extraInterfaces(ModifyIdentityListener::class.java, UserAttributeListener::class.java), ) val integration2 = mock( KitIntegration::class.java, - withSettings().extraInterfaces(ModifyIdentityListener::class.java, BaseAttributeListener::class.java), + withSettings().extraInterfaces(ModifyIdentityListener::class.java, UserAttributeListener::class.java), ) - `when`((integration as BaseAttributeListener).supportsAttributeLists()).thenReturn(true) - `when`((integration2 as BaseAttributeListener).supportsAttributeLists()) + `when`((integration as UserAttributeListener).supportsAttributeLists()).thenReturn(true) + `when`((integration2 as UserAttributeListener).supportsAttributeLists()) .thenReturn(false) `when`(integration.configuration) .thenReturn(MockKitConfiguration.createKitConfiguration()) @@ -519,14 +519,14 @@ class KitManagerImplTest { attributeList.add("3") userAttributeLists["test 3"] = attributeList manager.onUserAttributesReceived(userAttributeSingles, userAttributeLists, 1L) - verify(integration as BaseAttributeListener, Mockito.times(1)) + verify(integration as UserAttributeListener, Mockito.times(1)) .onSetAllUserAttributes(eq(userAttributeSingles), eq(userAttributeLists), any()) val userAttributesCombined: MutableMap = HashMap() userAttributesCombined["test"] = "whatever" userAttributesCombined["test 2"] = "whatever 2" userAttributesCombined["test 3"] = "1,2,3" val clearedOutList: Map> = HashMap() - verify(integration2 as BaseAttributeListener, Mockito.times(1)) + verify(integration2 as UserAttributeListener, Mockito.times(1)) .onSetAllUserAttributes(eq(userAttributesCombined), eq(clearedOutList), any()) } @@ -537,15 +537,15 @@ class KitManagerImplTest { val integration = mock( KitIntegration::class.java, - withSettings().extraInterfaces(ModifyIdentityListener::class.java, BaseAttributeListener::class.java), + withSettings().extraInterfaces(ModifyIdentityListener::class.java, UserAttributeListener::class.java), ) val integration2 = mock( KitIntegration::class.java, - withSettings().extraInterfaces(ModifyIdentityListener::class.java, BaseAttributeListener::class.java), + withSettings().extraInterfaces(ModifyIdentityListener::class.java, UserAttributeListener::class.java), ) - `when`((integration as BaseAttributeListener).supportsAttributeLists()).thenReturn(true) - `when`((integration2 as BaseAttributeListener).supportsAttributeLists()) + `when`((integration as UserAttributeListener).supportsAttributeLists()).thenReturn(true) + `when`((integration2 as UserAttributeListener).supportsAttributeLists()) .thenReturn(false) `when`(integration.configuration) .thenReturn(MockKitConfiguration.createKitConfiguration()) @@ -558,9 +558,9 @@ class KitManagerImplTest { attributeList.add("2") attributeList.add("3") manager.setUserAttributeList("test key", attributeList, 1) - verify(integration as BaseAttributeListener, Mockito.times(1)) + verify(integration as UserAttributeListener, Mockito.times(1)) .onSetUserAttributeList(eq("test key"), eq(attributeList), any()) - verify(integration2 as BaseAttributeListener, Mockito.times(1)) + verify(integration2 as UserAttributeListener, Mockito.times(1)) .onSetUserAttribute(eq("test key"), eq("1,2,3"), isNull()) } @@ -571,15 +571,15 @@ class KitManagerImplTest { val integration = mock( KitIntegration::class.java, - withSettings().extraInterfaces(ModifyIdentityListener::class.java, BaseAttributeListener::class.java), + withSettings().extraInterfaces(ModifyIdentityListener::class.java, UserAttributeListener::class.java), ) val integration2 = mock( KitIntegration::class.java, - withSettings().extraInterfaces(ModifyIdentityListener::class.java, BaseAttributeListener::class.java), + withSettings().extraInterfaces(ModifyIdentityListener::class.java, UserAttributeListener::class.java), ) - `when`((integration as BaseAttributeListener).supportsAttributeLists()).thenReturn(true) - `when`((integration2 as BaseAttributeListener).supportsAttributeLists()) + `when`((integration as UserAttributeListener).supportsAttributeLists()).thenReturn(true) + `when`((integration2 as UserAttributeListener).supportsAttributeLists()) .thenReturn(false) `when`(integration.configuration) .thenReturn(MockKitConfiguration.createKitConfiguration()) 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 5fa6a964c..307d08999 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 @@ -6,8 +6,9 @@ import com.mparticle.MParticle.IdentityType import com.mparticle.internal.MPUtility import com.mparticle.internal.MPUtility.AdIdInfo import com.mparticle.kits.KitIntegration.ApplicationStateListener +import com.mparticle.consent.ConsentState import com.mparticle.kits.KitIntegration.ModifyIdentityListener -import com.mparticle.kits.KitIntegration.BaseAttributeListener +import com.mparticle.kits.KitIntegration.UserAttributeListener import com.mparticle.kits.KitIntegration.LogoutListener import com.mparticle.kits.KitIntegration.PushListener import org.json.JSONException @@ -17,7 +18,7 @@ import java.net.URL abstract class AdobeKitBase : KitIntegration(), - BaseAttributeListener, + UserAttributeListener, ModifyIdentityListener, LogoutListener, PushListener, @@ -86,6 +87,27 @@ abstract class AdobeKitBase : syncIds() } + override fun onIncrementUserAttribute( + key: String?, + incrementedBy: Number?, + value: String?, + user: FilteredMParticleUser?, + ) { + } + + override fun onSetUserTag( + key: String?, + user: FilteredMParticleUser?, + ) { + } + + override fun onConsentStateUpdated( + oldState: ConsentState?, + newState: ConsentState?, + user: FilteredMParticleUser?, + ) { + } + override fun setUserIdentity( identityType: IdentityType, s: String, 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 0e1720871..3f62c44fe 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 @@ -18,8 +18,9 @@ import com.mparticle.BaseEvent import com.mparticle.MPEvent import com.mparticle.MParticle import com.mparticle.kits.KitIntegration.ApplicationStateListener +import com.mparticle.consent.ConsentState import com.mparticle.kits.KitIntegration.ModifyIdentityListener -import com.mparticle.kits.KitIntegration.BaseAttributeListener +import com.mparticle.kits.KitIntegration.UserAttributeListener import com.mparticle.kits.KitIntegration.EventListener import com.mparticle.kits.KitIntegration.LogoutListener import com.mparticle.kits.KitIntegration.PushListener @@ -37,7 +38,7 @@ import com.mparticle.media.events.StreamType open class AdobeKit : KitIntegration(), EventListener, - BaseAttributeListener, + UserAttributeListener, ModifyIdentityListener, LogoutListener, PushListener, @@ -123,6 +124,27 @@ open class AdobeKit : syncIds() } + override fun onIncrementUserAttribute( + key: String?, + incrementedBy: Number?, + value: String?, + user: FilteredMParticleUser?, + ) { + } + + override fun onSetUserTag( + key: String?, + user: FilteredMParticleUser?, + ) { + } + + override fun onConsentStateUpdated( + oldState: ConsentState?, + newState: ConsentState?, + user: FilteredMParticleUser?, + ) { + } + override fun setUserIdentity( identityType: MParticle.IdentityType, s: String, 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 f5688f76f..5b8208d82 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 @@ -11,15 +11,16 @@ import com.mparticle.MPEvent import com.mparticle.MParticle import com.mparticle.MParticle.IdentityType import com.mparticle.commerce.CommerceEvent +import com.mparticle.consent.ConsentState import com.mparticle.kits.KitIntegration.ModifyIdentityListener -import com.mparticle.kits.KitIntegration.BaseAttributeListener +import com.mparticle.kits.KitIntegration.UserAttributeListener import com.mparticle.kits.KitIntegration.CommerceListener import com.mparticle.kits.KitIntegration.LogoutListener import java.math.BigDecimal class ApptimizeKit : KitIntegration(), - BaseAttributeListener, + UserAttributeListener, ModifyIdentityListener, LogoutListener, KitIntegration.EventListener, @@ -164,6 +165,27 @@ class ApptimizeKit : Apptimize.setUserAttribute(key, value) } + override fun onIncrementUserAttribute( + key: String?, + incrementedBy: Number?, + value: String?, + user: FilteredMParticleUser?, + ) { + } + + override fun onSetUserTag( + key: String?, + user: FilteredMParticleUser?, + ) { + } + + override fun onConsentStateUpdated( + oldState: ConsentState?, + newState: ConsentState?, + user: FilteredMParticleUser?, + ) { + } + /** * @param identityType only Alias and CustomerId are suppoted by the Apptimize kit. */ 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 96715865b..75f1f6146 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 @@ -11,8 +11,9 @@ import com.mparticle.commerce.CommerceEvent import com.mparticle.identity.MParticleUser import com.mparticle.internal.Logger import com.mparticle.kits.KitIntegration.ApplicationStateListener +import com.mparticle.consent.ConsentState import com.mparticle.kits.KitIntegration.ModifyIdentityListener -import com.mparticle.kits.KitIntegration.BaseAttributeListener +import com.mparticle.kits.KitIntegration.UserAttributeListener import com.mparticle.kits.KitIntegration.CommerceListener import com.mparticle.kits.KitIntegration.EventListener import com.mparticle.kits.KitIntegration.IdentityListener @@ -38,7 +39,7 @@ class BranchMetricsKit : KitIntegration(), EventListener, CommerceListener, - BaseAttributeListener, + UserAttributeListener, ModifyIdentityListener, LogoutListener, ApplicationStateListener, @@ -208,6 +209,27 @@ class BranchMetricsKit : // No-op: this kit does not implement this feature. } + override fun onIncrementUserAttribute( + key: String?, + incrementedBy: Number?, + value: String?, + user: FilteredMParticleUser?, + ) { + } + + override fun onSetUserTag( + key: String?, + user: FilteredMParticleUser?, + ) { + } + + override fun onConsentStateUpdated( + oldState: ConsentState?, + newState: ConsentState?, + user: FilteredMParticleUser?, + ) { + } + override fun setUserIdentity( identityType: IdentityType, s: String, 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 687846096..f7be2fd66 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 @@ -11,8 +11,9 @@ import com.mparticle.MPEvent import com.mparticle.MParticle import com.mparticle.MParticle.IdentityType import com.mparticle.kits.KitIntegration.ActivityListener +import com.mparticle.consent.ConsentState import com.mparticle.kits.KitIntegration.ModifyIdentityListener -import com.mparticle.kits.KitIntegration.BaseAttributeListener +import com.mparticle.kits.KitIntegration.UserAttributeListener import com.mparticle.kits.KitIntegration.LogoutListener import java.util.HashMap import java.util.LinkedList @@ -20,7 +21,7 @@ import java.util.LinkedList class ComscoreKit : KitIntegration(), KitIntegration.EventListener, - BaseAttributeListener, + UserAttributeListener, ModifyIdentityListener, LogoutListener, ActivityListener { @@ -138,6 +139,27 @@ class ComscoreKit : applyEnterpriseScalarUserAttribute(key, value) } + override fun onIncrementUserAttribute( + key: String?, + incrementedBy: Number?, + value: String?, + user: FilteredMParticleUser?, + ) { + } + + override fun onSetUserTag( + key: String?, + user: FilteredMParticleUser?, + ) { + } + + override fun onConsentStateUpdated( + oldState: ConsentState?, + newState: ConsentState?, + user: FilteredMParticleUser?, + ) { + } + override fun removeUserIdentity(identityType: IdentityType) { if (isEnterprise) { Analytics.getConfiguration().removePersistentLabel(identityType.toString()) 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 29d24049a..96e7dfd6e 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 @@ -9,15 +9,16 @@ import com.mparticle.AttributionError import com.mparticle.AttributionResult import com.mparticle.MParticle.IdentityType import com.mparticle.identity.MParticleUser +import com.mparticle.consent.ConsentState import com.mparticle.kits.KitIntegration.ModifyIdentityListener -import com.mparticle.kits.KitIntegration.BaseAttributeListener +import com.mparticle.kits.KitIntegration.UserAttributeListener import com.mparticle.kits.KitIntegration.LogoutListener import org.json.JSONException import org.json.JSONObject class KochavaKit : KitIntegration(), - BaseAttributeListener, + UserAttributeListener, ModifyIdentityListener, LogoutListener, KitIntegration.IdentityListener { @@ -116,6 +117,27 @@ class KochavaKit : // No-op: this kit does not implement this feature. } + override fun onIncrementUserAttribute( + key: String?, + incrementedBy: Number?, + value: String?, + user: FilteredMParticleUser?, + ) { + } + + override fun onSetUserTag( + key: String?, + user: FilteredMParticleUser?, + ) { + } + + override fun onConsentStateUpdated( + oldState: ConsentState?, + newState: ConsentState?, + user: FilteredMParticleUser?, + ) { + } + override fun setInstallReferrer(intent: Intent) {} override fun setUserIdentity( 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 e22d41e16..6dc70f97b 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 @@ -16,8 +16,9 @@ import com.mparticle.commerce.CommerceEvent import com.mparticle.commerce.Product import com.mparticle.internal.Logger import com.mparticle.internal.MPUtility +import com.mparticle.consent.ConsentState import com.mparticle.kits.KitIntegration.ModifyIdentityListener -import com.mparticle.kits.KitIntegration.BaseAttributeListener +import com.mparticle.kits.KitIntegration.UserAttributeListener import com.mparticle.kits.KitIntegration.CommerceListener import com.mparticle.kits.KitIntegration.EventListener import com.mparticle.kits.KitIntegration.LogoutListener @@ -32,7 +33,7 @@ class LocalyticsKit : KitIntegration(), KitIntegration.EventListener, CommerceListener, - BaseAttributeListener, + UserAttributeListener, ModifyIdentityListener, LogoutListener, PushListener, @@ -194,6 +195,27 @@ class LocalyticsKit : applyScalarUserAttribute(key, value) } + override fun onIncrementUserAttribute( + key: String?, + incrementedBy: Number?, + value: String?, + user: FilteredMParticleUser?, + ) { + } + + override fun onSetUserTag( + key: String?, + user: FilteredMParticleUser?, + ) { + } + + override fun onConsentStateUpdated( + oldState: ConsentState?, + newState: ConsentState?, + user: FilteredMParticleUser?, + ) { + } + override fun setOptOut(optOutStatus: Boolean): List { Localytics.setOptedOut(optOutStatus) val messageList: MutableList = LinkedList() 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 018cfa42e..c8e0ac67d 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,8 +20,9 @@ import com.urbanairship.push.PushMessage import com.urbanairship.push.PushProviderBridge import java.math.BigDecimal import java.util.LinkedList +import com.mparticle.consent.ConsentState import com.mparticle.kits.KitIntegration.ModifyIdentityListener -import com.mparticle.kits.KitIntegration.BaseAttributeListener +import com.mparticle.kits.KitIntegration.UserAttributeListener /** * mParticle-Urban Airship Kit integration @@ -31,7 +32,7 @@ class UrbanAirshipKit : KitIntegration.PushListener, KitIntegration.EventListener, CommerceListener, - BaseAttributeListener, + UserAttributeListener, ModifyIdentityListener, LogoutListener { private var channelIdListener: ChannelIdListener? = null @@ -302,6 +303,27 @@ class UrbanAirshipKit : } } + override fun onIncrementUserAttribute( + key: String?, + incrementedBy: Number?, + value: String?, + user: FilteredMParticleUser?, + ) { + } + + override fun onSetUserTag( + key: String?, + user: FilteredMParticleUser?, + ) { + } + + override fun onConsentStateUpdated( + oldState: ConsentState?, + newState: ConsentState?, + user: FilteredMParticleUser?, + ) { + } + // not supported override fun logout(): List = emptyList()