Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 43 additions & 3 deletions src/main/kotlin/com/mparticle/kits/AppboyKit.kt
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ open class AppboyKit : KitIntegration(), AttributeListener, CommerceListener,
var bundleCommerceEvents = false
var isMpidIdentityType = false
var identityType: IdentityType? = null
var subscriptionGroupIds: MutableMap<String, String>? = mutableMapOf()
private val dataFlushHandler = Handler()
private var dataFlushRunnable: Runnable? = null
private var forwardScreenViews = false
Expand Down Expand Up @@ -85,6 +86,9 @@ open class AppboyKit : KitIntegration(), AttributeListener, CommerceListener,
}
}
forwardScreenViews = settings[FORWARD_SCREEN_VIEWS].toBoolean()
subscriptionGroupIds = settings[SUBSCRIPTION_GROUP_MAPPING]?.let {
getSubscriptionGroupIds(it)
}
if (key != null) {
val config = BrazeConfig.Builder().setApiKey(key)
.setSdkFlavor(SdkFlavor.MPARTICLE)
Expand Down Expand Up @@ -318,10 +322,27 @@ open class AppboyKit : KitIntegration(), AttributeListener, CommerceListener,
else value.setGender(Gender.MALE)
}
else -> {
if (key.startsWith("$")) {
key = key.substring(1)
if (subscriptionGroupIds?.containsKey(key) == true) {
if (attributeValue == "true") {
value.addToSubscriptionGroup(
subscriptionGroupIds?.get(key).toString()
)
} else if (attributeValue == "false") {
value.removeFromSubscriptionGroup(
subscriptionGroupIds?.get(key).toString()
)
} else {
Logger.warning(
"unable to set Subscription Group ID for user attribute: "
+ key + "due to invalid value data type. expected value data type should be Boolean"
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
+ key + "due to invalid value data type. expected value data type should be Boolean"
+ key + " due to invalid value data type. expected value data type should be Boolean"

)
}
} else {
if (key.startsWith("$")) {
key = key.substring(1)
}
userAttributeSetter?.parseValue(key, attributeValue)
}
userAttributeSetter?.parseValue(key, attributeValue)
}
}
queueDataFlush()
Expand Down Expand Up @@ -966,6 +987,24 @@ open class AppboyKit : KitIntegration(), AttributeListener, CommerceListener,
return promotionArray
}

private fun getSubscriptionGroupIds(subscriptionGroupMap: String): MutableMap<String, String> {
val subscriptionGroupsArray = JSONArray(subscriptionGroupMap)
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
val subscriptionGroupsArray = JSONArray(subscriptionGroupMap)
if (subscriptionGroupMap.isEmpty()) {
return subscriptionGroupIds
}
val subscriptionGroupsArray = JSONArray(subscriptionGroupMap)

Check if the map string is empty before creating the JSON array, so you can avoid a JSONException

val subscriptionGroupIds = mutableMapOf<String, String>()

if (subscriptionGroupMap.isEmpty()) {
return subscriptionGroupIds
}

for (i in 0 until subscriptionGroupsArray.length()) {
val subscriptionGroup = subscriptionGroupsArray.getJSONObject(i)
val key = subscriptionGroup.getString("map")
val value = subscriptionGroup.getString("value")
subscriptionGroupIds[key] = value
}

Comment thread
mmustafa-tse marked this conversation as resolved.
return subscriptionGroupIds
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
return subscriptionGroupIds

Not needed because the code already returns subscriptionGroupIds above.

}

fun getImpressionListParameters(impressionList: List<Impression>): JSONArray {
val impressionArray = JSONArray()
for ((i, impression) in impressionList.withIndex()) {
Expand Down Expand Up @@ -1083,6 +1122,7 @@ open class AppboyKit : KitIntegration(), AttributeListener, CommerceListener,
const val USER_IDENTIFICATION_TYPE = "userIdentificationType"
const val ENABLE_TYPE_DETECTION = "enableTypeDetection"
const val BUNDLE_COMMERCE_EVENTS = "bundleCommerceEventData"
const val SUBSCRIPTION_GROUP_MAPPING = "subscriptionGroupMapping"
const val HOST = "host"
const val PUSH_ENABLED = "push_enabled"
const val NAME = "Appboy"
Expand Down
10 changes: 10 additions & 0 deletions src/test/kotlin/com/braze/BrazeUser.kt
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,16 @@ class BrazeUser {
return true
}

fun addToSubscriptionGroup(key: String): Boolean {
customUserAttributes[key] = true
return true
}

fun removeFromSubscriptionGroup(key: String): Boolean {
customUserAttributes[key] = false
return true
}

fun getCustomAttribute(): HashMap<String, MutableList<String>> {
return customAttributeArray
}
Expand Down
19 changes: 19 additions & 0 deletions src/test/kotlin/com/mparticle/kits/AppboyKitTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -238,6 +238,25 @@ class AppboyKitTests {
Assert.assertNull(kit.getCalendarMinusYears(-1))
}

@Test
fun testSetSubscriptionGroupIds() {
val settings = HashMap<String, String>()
settings[AppboyKit.APPBOY_KEY] = "key"
settings[AppboyKit.HOST] = hostName
settings["subscriptionGroupMapping"] = "" +
"[{\"jsmap\":null,\"map\":\"test1\",\"maptype\":\"UserAttributeClass.Name\",\"value\":\"00000000-0000-0000-0000-000000000000\"}," +
"{\"jsmap\":null,\"map\":\"test2\",\"maptype\":\"UserAttributeClass.Name\",\"value\":\"00000000-0000-0000-0000-000000000001\"}," +
"{\"jsmap\":null,\"map\":\"test3\",\"maptype\":\"UserAttributeClass.Name\",\"value\":\"00000000-0000-0000-0000-000000000002\"}]"
val kit = MockAppboyKit()
val currentUser = braze.currentUser

kit.onKitCreate(settings, MockContextApplication())
kit.setUserAttribute("test1", "true");
kit.setUserAttribute("test2", "false");
kit.setUserAttribute("test3", "notABoolean");
Assert.assertEquals(2, currentUser.getCustomUserAttribute().size.toLong())
}

// @Test
// fun testSetUserAttributeAge() {
// val currentYear = Calendar.getInstance()[Calendar.YEAR]
Expand Down
Loading