Skip to content

Commit 7e7f611

Browse files
committed
fixup: removed CustomEvent and updated comparison keys
- removed CustomEvent and immediately save custom event properties into a JSONObject - renamed TrackEventOperation to TrackCustomEventOperation - removed app_id in body - fix comparison key to unique custom event key - fix some test units to prevent them from failing
1 parent 5c3112b commit 7e7f611

File tree

14 files changed

+117
-109
lines changed

14 files changed

+117
-109
lines changed

OneSignalSDK/onesignal/core/src/main/java/com/onesignal/core/internal/operations/impl/OperationModelStore.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import com.onesignal.user.internal.operations.RefreshUserOperation
1414
import com.onesignal.user.internal.operations.SetAliasOperation
1515
import com.onesignal.user.internal.operations.SetPropertyOperation
1616
import com.onesignal.user.internal.operations.SetTagOperation
17-
import com.onesignal.user.internal.operations.TrackEventOperation
17+
import com.onesignal.user.internal.operations.TrackCustomEventOperation
1818
import com.onesignal.user.internal.operations.TrackPurchaseOperation
1919
import com.onesignal.user.internal.operations.TrackSessionEndOperation
2020
import com.onesignal.user.internal.operations.TrackSessionStartOperation
@@ -62,7 +62,7 @@ internal class OperationModelStore(prefs: IPreferencesService) : ModelStore<Oper
6262
UpdateUserOperationExecutor.TRACK_SESSION_START -> TrackSessionStartOperation()
6363
UpdateUserOperationExecutor.TRACK_SESSION_END -> TrackSessionEndOperation()
6464
UpdateUserOperationExecutor.TRACK_PURCHASE -> TrackPurchaseOperation()
65-
CustomEventOperationExecutor.CUSTOM_EVENT -> TrackEventOperation()
65+
CustomEventOperationExecutor.CUSTOM_EVENT -> TrackCustomEventOperation()
6666
else -> throw Exception("Unrecognized operation: $operationName")
6767
}
6868

OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/UserManager.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import com.onesignal.debug.internal.logging.Logging
1212
import com.onesignal.user.IUserManager
1313
import com.onesignal.user.internal.backend.IdentityConstants
1414
import com.onesignal.user.internal.customEvents.ICustomEventController
15-
import com.onesignal.user.internal.customEvents.impl.CustomEvent
1615
import com.onesignal.user.internal.identity.IdentityModel
1716
import com.onesignal.user.internal.identity.IdentityModelStore
1817
import com.onesignal.user.internal.properties.PropertiesModel
@@ -257,7 +256,7 @@ internal open class UserManager(
257256
return
258257
}
259258

260-
_customEventController.sendCustomEvent(CustomEvent(name, properties))
259+
_customEventController.sendCustomEvent(name, properties)
261260
}
262261

263262
override fun onModelReplaced(

OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/customEvents/ICustomEvent.kt

Lines changed: 0 additions & 6 deletions
This file was deleted.

OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/customEvents/ICustomEventBackendService.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.onesignal.user.internal.customEvents
22

33
import com.onesignal.core.internal.operations.ExecutionResponse
4-
import com.onesignal.user.internal.customEvents.impl.CustomEvent
54
import com.onesignal.user.internal.customEvents.impl.CustomEventMetadata
65

76
/**
@@ -18,7 +17,8 @@ interface ICustomEventBackendService {
1817
onesignalId: String,
1918
externalId: String?,
2019
timestamp: Long,
21-
customEvent: CustomEvent,
20+
eventName: String,
21+
eventProperties: String?,
2222
metadata: CustomEventMetadata,
2323
): ExecutionResponse
2424
}
Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
package com.onesignal.user.internal.customEvents
22

3-
import com.onesignal.user.internal.customEvents.impl.CustomEvent
4-
53
interface ICustomEventController {
6-
fun sendCustomEvent(event: CustomEvent)
4+
fun sendCustomEvent(
5+
name: String,
6+
properties: Map<String, Any>?,
7+
)
78
}

OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/customEvents/impl/CustomEvent.kt

Lines changed: 0 additions & 42 deletions
This file was deleted.

OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/customEvents/impl/CustomEventBackendService.kt

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import com.onesignal.core.internal.operations.ExecutionResult
88
import com.onesignal.user.internal.customEvents.ICustomEventBackendService
99
import org.json.JSONArray
1010
import org.json.JSONObject
11+
import java.util.TimeZone
1112

1213
internal class CustomEventBackendService(
1314
private val _httpClient: IHttpClient,
@@ -17,17 +18,25 @@ internal class CustomEventBackendService(
1718
onesignalId: String,
1819
externalId: String?,
1920
timestamp: Long,
20-
customEvent: CustomEvent,
21+
eventName: String,
22+
eventProperties: String?,
2123
metadata: CustomEventMetadata,
2224
): ExecutionResponse {
2325
val body = JSONObject()
24-
body.put("name", customEvent.name)
25-
body.put("app_id", appId)
26+
body.put("name", eventName)
2627
body.put("onesignal_id", onesignalId)
2728
externalId?.let { body.put("external_id", it) }
28-
body.put("timestamp", DateUtils.iso8601Format().format(timestamp))
29+
body.put(
30+
"timestamp",
31+
DateUtils.iso8601Format().apply {
32+
timeZone = TimeZone.getTimeZone("UTC")
33+
}.format(
34+
timestamp,
35+
),
36+
)
37+
38+
val payload = eventProperties?.let { JSONObject(it) } ?: JSONObject()
2939

30-
val payload = customEvent.propertiesJson
3140
payload.put("os_sdk", metadata.toJSONObject())
3241

3342
body.put("payload", payload)

OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/customEvents/impl/CustomEventController.kt

Lines changed: 42 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,61 @@ import com.onesignal.core.internal.operations.IOperationRepo
55
import com.onesignal.core.internal.time.ITime
66
import com.onesignal.user.internal.customEvents.ICustomEventController
77
import com.onesignal.user.internal.identity.IdentityModelStore
8-
import com.onesignal.user.internal.operations.TrackEventOperation
8+
import com.onesignal.user.internal.operations.TrackCustomEventOperation
9+
import org.json.JSONArray
10+
import org.json.JSONObject
911

1012
class CustomEventController(
1113
private val _identityModelStore: IdentityModelStore,
1214
private val _configModelStore: ConfigModelStore,
1315
private val _time: ITime,
1416
private val _opRepo: IOperationRepo,
1517
) : ICustomEventController {
16-
override fun sendCustomEvent(event: CustomEvent) {
18+
override fun sendCustomEvent(
19+
name: String,
20+
properties: Map<String, Any>?,
21+
) {
1722
val op =
18-
TrackEventOperation(
23+
TrackCustomEventOperation(
1924
_configModelStore.model.appId,
2025
_identityModelStore.model.onesignalId,
2126
_identityModelStore.model.externalId,
2227
_time.currentTimeMillis,
23-
event,
28+
name,
29+
properties?.let { mapToJson(it).toString() },
2430
)
2531
_opRepo.enqueue(op)
2632
}
33+
34+
/**
35+
* Recursively convert a JSON-serializable map into a JSON-compatible format, handling
36+
* nested Maps and Lists appropriately.
37+
*/
38+
private fun mapToJson(map: Map<String, Any>): JSONObject {
39+
val json = JSONObject()
40+
for ((key, value) in map) {
41+
json.put(key, convertToJson(value))
42+
}
43+
return json
44+
}
45+
46+
private fun convertToJson(value: Any): Any {
47+
return when (value) {
48+
is Map<*, *> -> {
49+
val subMap =
50+
value.entries
51+
.filter { it.key is String }
52+
.associate {
53+
it.key as String to convertToJson(it.value!!)
54+
}
55+
mapToJson(subMap)
56+
}
57+
is List<*> -> {
58+
val array = JSONArray()
59+
value.forEach { array.put(convertToJson(it!!)) }
60+
array
61+
}
62+
else -> value
63+
}
64+
}
2765
}
Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,9 @@ package com.onesignal.user.internal.operations
33
import com.onesignal.common.IDManager
44
import com.onesignal.core.internal.operations.GroupComparisonType
55
import com.onesignal.core.internal.operations.Operation
6-
import com.onesignal.user.internal.customEvents.impl.CustomEvent
76
import com.onesignal.user.internal.operations.impl.executors.CustomEventOperationExecutor
87

9-
class TrackEventOperation() : Operation(CustomEventOperationExecutor.CUSTOM_EVENT) {
8+
class TrackCustomEventOperation() : Operation(CustomEventOperationExecutor.CUSTOM_EVENT) {
109
/**
1110
* The OneSignal appId the custom event was created.
1211
*/
@@ -45,28 +44,38 @@ class TrackEventOperation() : Operation(CustomEventOperationExecutor.CUSTOM_EVEN
4544
}
4645

4746
/**
48-
* The custom event instance containing the event name and properties.
47+
* The name for the custom event.
4948
*/
50-
var event: CustomEvent
51-
get() = getAnyProperty(::event.name) as CustomEvent
49+
var eventName: String
50+
get() = getStringProperty(::eventName.name)
5251
set(value) {
53-
setAnyProperty(::event.name, value)
52+
setAnyProperty(::eventName.name, value)
5453
}
5554

56-
override val createComparisonKey: String get() = "$appId.User.$onesignalId"
57-
override val modifyComparisonKey: String get() = "$appId.User.$onesignalId.CustomEvent.$name"
55+
/**
56+
* The nullable properties for the custom event.
57+
*/
58+
var eventProperties: String?
59+
get() = getOptStringProperty(::eventProperties.name)
60+
set(value) {
61+
setOptStringProperty(::eventProperties.name, value)
62+
}
63+
64+
override val createComparisonKey: String get() = "$appId.User.$onesignalId.CustomEvent.$eventName"
65+
override val modifyComparisonKey: String get() = "$appId.User.$onesignalId.CustomEvent.$eventName"
5866

5967
// TODO: no batching of custom events until finalized
6068
override val groupComparisonType: GroupComparisonType = GroupComparisonType.NONE
6169
override val canStartExecute: Boolean get() = !IDManager.isLocalId(onesignalId)
6270
override val applyToRecordId: String get() = onesignalId
6371

64-
constructor(appId: String, onesignalId: String, externalId: String?, timeStamp: Long, event: CustomEvent) : this() {
72+
constructor(appId: String, onesignalId: String, externalId: String?, timeStamp: Long, eventName: String, eventProperties: String?) : this() {
6573
this.appId = appId
6674
this.onesignalId = onesignalId
6775
this.externalId = externalId
6876
this.timeStamp = timeStamp
69-
this.event = event
77+
this.eventName = eventName
78+
this.eventProperties = eventProperties
7079
}
7180

7281
override fun translateIds(map: Map<String, String>) {

OneSignalSDK/onesignal/core/src/main/java/com/onesignal/user/internal/operations/impl/executors/CustomEventOperationExecutor.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import com.onesignal.core.internal.operations.IOperationExecutor
1313
import com.onesignal.core.internal.operations.Operation
1414
import com.onesignal.user.internal.customEvents.ICustomEventBackendService
1515
import com.onesignal.user.internal.customEvents.impl.CustomEventMetadata
16-
import com.onesignal.user.internal.operations.TrackEventOperation
16+
import com.onesignal.user.internal.operations.TrackCustomEventOperation
1717

1818
internal class CustomEventOperationExecutor(
1919
private val _customEventBackendService: ICustomEventBackendService,
@@ -40,13 +40,14 @@ internal class CustomEventOperationExecutor(
4040

4141
try {
4242
when (operation) {
43-
is TrackEventOperation -> {
43+
is TrackCustomEventOperation -> {
4444
_customEventBackendService.sendCustomEvent(
4545
operation.appId,
4646
operation.onesignalId,
4747
operation.externalId,
4848
operation.timeStamp,
49-
operation.event,
49+
operation.eventName,
50+
operation.eventProperties,
5051
eventMetadataJson,
5152
)
5253
}

0 commit comments

Comments
 (0)