Skip to content

Commit 2fa1ea1

Browse files
authored
fix: update shared data (#7)
1 parent c32defe commit 2fa1ea1

3 files changed

Lines changed: 43 additions & 41 deletions

File tree

library/src/main/java/com/paypal/messages/ModalFragment.kt

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -386,17 +386,20 @@ internal class ModalFragment constructor(
386386
* See paypal-messaging-components/src/components/modal/v2/lib/zoid-polyfill.js for how it works.
387387
*/
388388
@JavascriptInterface
389-
fun paypalMessageModalCallbackHandler(args: String) {
390-
val json = JsonParser.parseString(args).asJsonObject
391-
LogCat.debug(TAG, "CallbackHandler:\n name = ${json.get("name")}\n args = ${json.get("args")}")
389+
fun paypalMessageModalCallbackHandler(passedParams: String) {
390+
val params = if (passedParams != "") passedParams else "{\"name\": \"\", \"args\": [{}]"
391+
val nameAndArgs = JsonParser.parseString(params).asJsonObject
392+
val name = nameAndArgs.get("name").asString
393+
val args = nameAndArgs.get("args").asJsonArray[0].asJsonObject
394+
LogCat.debug(TAG, "CallbackHandler:\n name = $name\n args = $args")
392395

393396
// If __shared__ does not exist, use an empty object
394-
val sharedJson = json.get("__shared__") ?: JsonParser.parseString("{}")
397+
val sharedJson = args.get("__shared__") ?: JsonParser.parseString("{}")
395398
val shared = jsonElementToMutableMap(sharedJson)
396-
when (json.get("name").asString) {
399+
when (name) {
397400
"onClick" -> {
398-
val linkName = json.get("link_name")?.asString
399-
val linkSrc = json.get("link_src")?.asString
401+
val linkName = args.get("link_name")?.asString
402+
val linkSrc = args.get("link_src")?.asString
400403
if (linkName == "Apply Now") {
401404
this.onApply()
402405
}
@@ -414,7 +417,7 @@ internal class ModalFragment constructor(
414417
}
415418

416419
"onCalculate" -> {
417-
val calculatorAmount = json.get("amount")?.asString
420+
val calculatorAmount = args.get("amount")?.asString
418421
this.onCalculate()
419422
logEvent(
420423
TrackingEvent(
@@ -448,18 +451,14 @@ internal class ModalFragment constructor(
448451
private fun jsonValueToAny(jsonElement: JsonElement): Any {
449452
return when {
450453
jsonElement.isJsonPrimitive -> {
451-
val jsonPrimitive = jsonElement.asJsonPrimitive
452-
if (jsonPrimitive.isBoolean) {
453-
jsonPrimitive.asBoolean
454-
}
455-
else if (jsonPrimitive.isNumber) {
456-
jsonPrimitive.asNumber
457-
}
458-
else {
459-
jsonPrimitive.asString
454+
val primitive = jsonElement.asJsonPrimitive
455+
when {
456+
primitive.isBoolean -> primitive.asBoolean
457+
primitive.isNumber -> primitive.asNumber
458+
else -> primitive.asString
460459
}
461460
}
462-
461+
jsonElement.isJsonArray -> jsonElement.asJsonArray
463462
jsonElement.isJsonObject -> jsonElementToMutableMap(jsonElement)
464463
else -> throw IllegalArgumentException("Unsupported JSON element type: ${jsonElement::class.java.simpleName}")
465464
}

library/src/main/java/com/paypal/messages/logger/Logger.kt

Lines changed: 25 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -43,21 +43,26 @@ class Logger private constructor() {
4343
initBasePayload()
4444
}
4545

46+
private fun resetBasePayload(isInit: Boolean = false) {
47+
LogCat.debug(TAG, if (isInit) "initBasePayload" else "resetBasePayload")
48+
this.payload = TrackingPayload(
49+
clientId = clientId,
50+
merchantId = null,
51+
partnerAttributionId = null,
52+
// merchantProfileHash will be later defined by pulling from LocalStorage
53+
merchantProfileHash = null,
54+
deviceId = Settings.Secure.ANDROID_ID,
55+
// TODO Determine SessionId for Logger
56+
sessionId = "random for now, TBD at later point to what this is specifically",
57+
integrationName = integrationName,
58+
integrationVersion = integrationVersion,
59+
components = mutableListOf(),
60+
)
61+
}
62+
4663
private fun initBasePayload() {
4764
if (clientId !== "") {
48-
this.payload = TrackingPayload(
49-
clientId = clientId,
50-
merchantId = null,
51-
partnerAttributionId = null,
52-
// merchantProfileHash can be later defined after a message request by pulling from paypalmessagelocalstorage
53-
merchantProfileHash = null,
54-
deviceId = Settings.Secure.ANDROID_ID,
55-
// TODO Determine SessionId for Logger
56-
sessionId = "random for now, TBD at later point to what this is specifically",
57-
integrationName = integrationName,
58-
integrationVersion = integrationVersion,
59-
components = mutableListOf(),
60-
)
65+
resetBasePayload(true)
6166
}
6267
else {
6368
val exception = InvalidCheckoutConfigException()
@@ -113,18 +118,16 @@ class Logger private constructor() {
113118
delay(5000) // Wait 5 seconds before sending our payload
114119

115120
val localStorage = LocalStorage(context)
116-
LogCat.debug(TAG, localStorage.merchantHash.toString())
117-
finalPayload.components.forEach { component ->
118-
component.instanceId?.let { LogCat.debug(TAG, it) }
119-
component.events.forEach { event ->
120-
LogCat.debug(TAG, event.eventType.toString())
121-
}
121+
val hash = localStorage.merchantHash
122+
val payloadSummary = finalPayload.components.joinToString("\n") {
123+
val eventsString = it.events.joinToString { event -> event.eventType.toString() }
124+
" type: ${it.type}\n instanceId: ${it.instanceId}\n events: $eventsString\n"
122125
}
126+
LogCat.debug(TAG, "merchantHash: ${hash}\npayloadSummary:\n$payloadSummary")
123127

128+
finalPayload.merchantProfileHash = hash
124129
Api.callLoggerEndpoint(finalPayload)
125-
126-
// After our response has completed, we can reset our base payload.
127-
initBasePayload()
130+
resetBasePayload()
128131
}
129132
}
130133
}

library/src/main/java/com/paypal/messages/logger/TrackingPayload.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ data class TrackingPayload(
1313
@SerializedName("partner_attribution_id")
1414
val partnerAttributionId: String? = null,
1515
@SerializedName("merchant_profile_hash")
16-
val merchantProfileHash: String? = null,
16+
var merchantProfileHash: String? = null,
1717

1818
// Global Details
1919
@SerializedName("device_id")

0 commit comments

Comments
 (0)