Skip to content

Commit eca7329

Browse files
authored
feat: move onSetUserAttributeList to BaseAttributeListener (#690)
* Delegate onSetUserAttributeList to setUserAttributeList (dual-interface kits) Braze, AppsFlyer, and Singular implement both AttributeListener and UserAttributeListener; wire empty onSetUserAttributeList to existing setUserAttributeList behavior. Made-with: Cursor * Move onSetUserAttributeList to BaseAttributeListener - Declare onSetUserAttributeList on BaseAttributeListener; remove from UserAttributeListener. - KitManagerImpl calls BaseAttributeListener.onSetUserAttributeList for list attributes. - AttributeListener-only kits delegate onSetUserAttributeList to setUserAttributeList. - AttributeListenerTestKit implements onSetUserAttributeList via setUserAttributeList. Made-with: Cursor * test: KitManagerImplTest expect onSetUserAttributeList for list path KitManagerImpl forwards list-valued attributes via BaseAttributeListener.onSetUserAttributeList when supportsAttributeLists is true. Made-with: Cursor * refactor: remove setUserAttributeList from AttributeListener - Drop legacy two-arg setUserAttributeList from KitIntegration.AttributeListener; KitManagerImpl already forwards list attributes via onSetUserAttributeList. - Kits: use private helpers (Braze, Localytics) or inline no-ops; Adobe kits call syncIds from onSetUserAttributeList only. - AttributeListenerTestKit invokes list callback from onSetUserAttributeList. Made-with: Cursor * refactor: inline list attribute helpers into onSetUserAttributeList - Braze: remove private setUserAttributeList; duplicate Braze getCurrentUser flow in onSetUserAttributeList and setAllUserAttributes initial sync. - Localytics: call Localytics.setProfileAttribute directly from onSetUserAttributeList and setAllUserAttributes. Made-with: Cursor * Align onSetUserAttributeList parameter names with BaseAttributeListener Rename Kotlin overrides and call sites to use attributeKey, attributeValueList, and user consistently across kits and test kits. Made-with: Cursor * Document empty onSetUserAttributeList overrides with // not supported Add a consistent comment for no-op kit implementations; align AppsFlyer wording with other kits. Made-with: Cursor
1 parent e5f50e4 commit eca7329

24 files changed

Lines changed: 248 additions & 189 deletions

File tree

android-kit-base/src/androidTest/kotlin/com/mparticle/kits/testkits/AttributeListenerTestKit.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ open class AttributeListenerTestKit :
1111
AttributeListener,
1212
LogoutListener {
1313
var setUserAttributeCallback: ((attributeKey: String?, attributeValue: String?) -> Unit)? = null
14-
var setUserAttributeList: ((attributeKey: String?, attributeValueList: List<String?>?) -> Unit)? =
14+
var setUserAttributeList: ((attributeKey: String?, attributeValueList: List<String>?) -> Unit)? =
1515
null
1616
var supportsAttributeLists: (() -> Boolean)? = null
1717
var setAllUserAttributes: ((userAttributes: Map<String, String>?, userAttributeLists: Map<String, List<String>>?) -> Unit)? =
@@ -24,9 +24,10 @@ open class AttributeListenerTestKit :
2424

2525
override fun supportsAttributeLists() = supportsAttributeLists?.invoke() ?: true
2626

27-
override fun setUserAttributeList(
28-
attributeKey: String,
29-
attributeValueList: MutableList<String>,
27+
override fun onSetUserAttributeList(
28+
attributeKey: String?,
29+
attributeValueList: List<String>?,
30+
user: FilteredMParticleUser?,
3031
) {
3132
setUserAttributeList?.invoke(attributeKey, attributeValueList)
3233
onAttributeReceived?.invoke(attributeKey, attributeValueList)

android-kit-base/src/androidTest/kotlin/com/mparticle/kits/testkits/UserAttributeListenerTestKit.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ open class UserAttributeListenerTestKit :
1313
var onSetUserAttribute: ((key: String?, value: Any?, user: FilteredMParticleUser?) -> Unit)? =
1414
null
1515
var onSetUserTag: ((key: String?, user: FilteredMParticleUser?) -> Unit)? = null
16-
var onSetUserAttributeList: ((attributeKey: String?, attributeValueList: List<String?>?, user: FilteredMParticleUser?) -> Unit)? =
16+
var onSetUserAttributeList: ((attributeKey: String?, attributeValueList: List<String>?, user: FilteredMParticleUser?) -> Unit)? =
1717
null
1818
var onSetAllUserAttributes: (
1919
(
@@ -75,7 +75,7 @@ open class UserAttributeListenerTestKit :
7575

7676
override fun onSetUserAttributeList(
7777
attributeKey: String?,
78-
attributeValueList: MutableList<String>?,
78+
attributeValueList: List<String>?,
7979
user: FilteredMParticleUser?,
8080
) {
8181
onSetUserAttributeList?.invoke(attributeKey, attributeValueList, user)

android-kit-base/src/main/java/com/mparticle/kits/KitIntegration.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -396,12 +396,22 @@ public interface BaseAttributeListener {
396396
* @param user filtered user context for this kit
397397
*/
398398
void onSetUserAttribute(String key, Object value, FilteredMParticleUser user);
399+
400+
/**
401+
* Called when a list-valued user attribute is set and {@link #supportsAttributeLists()} returns true.
402+
*
403+
* @param attributeKey attribute key (may be null)
404+
* @param attributeValueList attribute values (may be null)
405+
* @param user filtered user context for this kit (may be null)
406+
*/
407+
void onSetUserAttributeList(
408+
@Nullable String attributeKey,
409+
@Nullable List<String> attributeValueList,
410+
@Nullable FilteredMParticleUser user);
399411
}
400412

401413
public interface AttributeListener extends BaseAttributeListener {
402414

403-
void setUserAttributeList(String attributeKey, List<String> attributeValueList);
404-
405415
void setAllUserAttributes(Map<String, String> userAttributes, Map<String, List<String>> userAttributeLists);
406416

407417
void setUserIdentity(MParticle.IdentityType identityType, String identity);
@@ -565,8 +575,6 @@ public interface UserAttributeListener extends BaseAttributeListener {
565575

566576
void onSetUserTag(String key, FilteredMParticleUser user);
567577

568-
void onSetUserAttributeList(String attributeKey, List<String> attributeValueList, FilteredMParticleUser user);
569-
570578
void onSetAllUserAttributes(Map<String, String> userAttributes, Map<String, List<String>> userAttributeLists, FilteredMParticleUser user);
571579

572580
void onConsentStateUpdated(ConsentState oldState, ConsentState newState, FilteredMParticleUser user);

android-kit-base/src/main/java/com/mparticle/kits/KitManagerImpl.java

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -681,24 +681,15 @@ public void setUserAttributeList(String attributeKey, List<String> valuesList, l
681681
}
682682

683683
private void setUserAttribute(KitIntegration provider, String attributeKey, List<String> valueList, long mpid) {
684-
if ((provider instanceof KitIntegration.AttributeListener || provider instanceof KitIntegration.UserAttributeListener)
684+
if ((provider instanceof KitIntegration.BaseAttributeListener listener)
685685
&& !provider.isDisabled()
686686
&& KitConfiguration.shouldForwardAttribute(provider.getConfiguration().getUserAttributeFilters(), attributeKey)) {
687-
boolean supportsAttributeLists = ((KitIntegration.BaseAttributeListener) provider).supportsAttributeLists();
687+
boolean supportsAttributeLists = listener.supportsAttributeLists();
688688
FilteredMParticleUser user = FilteredMParticleUser.getInstance(mpid, provider);
689-
if (provider instanceof KitIntegration.AttributeListener) {
690-
if (supportsAttributeLists) {
691-
((KitIntegration.AttributeListener) provider).setUserAttributeList(attributeKey, valueList);
692-
} else {
693-
((KitIntegration.BaseAttributeListener) provider).onSetUserAttribute(attributeKey, KitUtils.join(valueList), user);
694-
}
695-
}
696-
if (provider instanceof KitIntegration.UserAttributeListener) {
697-
if (supportsAttributeLists) {
698-
((KitIntegration.UserAttributeListener) provider).onSetUserAttributeList(attributeKey, valueList, user);
699-
} else {
700-
((KitIntegration.UserAttributeListener) provider).onSetUserAttribute(attributeKey, KitUtils.join(valueList), user);
701-
}
689+
if (supportsAttributeLists) {
690+
listener.onSetUserAttributeList(attributeKey, valueList, user);
691+
} else {
692+
listener.onSetUserAttribute(attributeKey, KitUtils.join(valueList), user);
702693
}
703694
}
704695
}

android-kit-base/src/test/kotlin/com/mparticle/kits/KitManagerImplTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -558,8 +558,8 @@ class KitManagerImplTest {
558558
attributeList.add("2")
559559
attributeList.add("3")
560560
manager.setUserAttributeList("test key", attributeList, 1)
561-
verify(integration as AttributeListener, Mockito.times(1))
562-
.setUserAttributeList("test key", attributeList)
561+
verify(integration as BaseAttributeListener, Mockito.times(1))
562+
.onSetUserAttributeList(eq("test key"), eq(attributeList), any())
563563
verify(integration2 as BaseAttributeListener, Mockito.times(1))
564564
.onSetUserAttribute(eq("test key"), eq("1,2,3"), isNull())
565565
}

kits/adobe/adobe-5/src/main/kotlin/com/mparticle/kits/AdobeKitBase.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,10 @@ abstract class AdobeKitBase :
4848
syncIds()
4949
}
5050

51-
override fun setUserAttributeList(
52-
s: String,
53-
list: List<String>,
51+
override fun onSetUserAttributeList(
52+
attributeKey: String?,
53+
attributeValueList: List<String>?,
54+
user: FilteredMParticleUser?,
5455
) {
5556
syncIds()
5657
}

kits/adobemedia/adobemedia-5/src/main/kotlin/com/mparticle/kits/AdobeKit.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,10 @@ open class AdobeKit :
8585
syncIds()
8686
}
8787

88-
override fun setUserAttributeList(
89-
s: String,
90-
list: List<String>,
88+
override fun onSetUserAttributeList(
89+
attributeKey: String?,
90+
attributeValueList: List<String>?,
91+
user: FilteredMParticleUser?,
9192
) {
9293
syncIds()
9394
}

kits/appsflyer/appsflyer-6/src/main/kotlin/com/mparticle/kits/AppsFlyerKit.kt

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -248,11 +248,6 @@ class AppsFlyerKit :
248248
return messageList
249249
}
250250

251-
override fun setUserAttributeList(
252-
s: String,
253-
list: List<String>,
254-
) {}
255-
256251
override fun onIncrementUserAttribute(
257252
key: String?,
258253
incrementedBy: Number?,
@@ -283,9 +278,10 @@ class AppsFlyerKit :
283278

284279
override fun onSetUserAttributeList(
285280
attributeKey: String?,
286-
attributeValueList: MutableList<String>?,
281+
attributeValueList: List<String>?,
287282
user: FilteredMParticleUser?,
288283
) {
284+
// not supported
289285
}
290286

291287
override fun onSetAllUserAttributes(

kits/apptentive/apptentive-6/src/main/kotlin/com/mparticle/kits/ApptentiveKit.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ class ApptentiveKit :
143143

144144
override fun onSetUserAttributeList(
145145
attributeKey: String?,
146-
attributeValueList: MutableList<String>?,
146+
attributeValueList: List<String>?,
147147
user: FilteredMParticleUser?,
148148
) {
149149
// Ignored

kits/apptimize/apptimize-3/src/main/kotlin/com/mparticle/kits/ApptimizeKit.kt

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -121,14 +121,12 @@ class ApptimizeKit :
121121

122122
override fun getName(): String = KIT_NAME
123123

124-
/**
125-
* Not supported by the Apptimize kit.
126-
*/
127-
override fun setUserAttributeList(
128-
key: String,
129-
list: List<String>,
124+
override fun onSetUserAttributeList(
125+
attributeKey: String?,
126+
attributeValueList: List<String>?,
127+
user: FilteredMParticleUser?,
130128
) {
131-
// not supported
129+
// not supported by the Apptimize kit
132130
}
133131

134132
override fun supportsAttributeLists(): Boolean = false

0 commit comments

Comments
 (0)