From 323acf7afea5b5f1bbc6f4d9acb10c4d6b69f972 Mon Sep 17 00:00:00 2001 From: Dmytro Date: Fri, 19 Sep 2025 14:20:02 +0200 Subject: [PATCH 1/4] add `supportLegacyUSPString` logic --- .../kotlin/com/sourcepoint/mobile_core/Coordinator.kt | 1 + .../com/sourcepoint/mobile_core/network/requests/IncludeData.kt | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/core/src/commonMain/kotlin/com/sourcepoint/mobile_core/Coordinator.kt b/core/src/commonMain/kotlin/com/sourcepoint/mobile_core/Coordinator.kt index 900fd94d..f2e3e72a 100644 --- a/core/src/commonMain/kotlin/com/sourcepoint/mobile_core/Coordinator.kt +++ b/core/src/commonMain/kotlin/com/sourcepoint/mobile_core/Coordinator.kt @@ -206,6 +206,7 @@ class Coordinator( language: SPMessageLanguage ): List { this.authId = authId + this.includeData.gppData.uspString = campaigns.usnat?.supportLegacyUSPString resetStateIfAuthIdChanged() var messages: List = emptyList() try { diff --git a/core/src/commonMain/kotlin/com/sourcepoint/mobile_core/network/requests/IncludeData.kt b/core/src/commonMain/kotlin/com/sourcepoint/mobile_core/network/requests/IncludeData.kt index 0e6d7f26..33ffdef1 100644 --- a/core/src/commonMain/kotlin/com/sourcepoint/mobile_core/network/requests/IncludeData.kt +++ b/core/src/commonMain/kotlin/com/sourcepoint/mobile_core/network/requests/IncludeData.kt @@ -24,7 +24,7 @@ data class IncludeData( val MspaCoveredTransaction: MspaBinaryFlag? = null, val MspaOptOutOptionMode: MspaTernaryFlag? = null, val MspaServiceProviderMode: MspaTernaryFlag? = null, - val uspString: Boolean? = true + var uspString: Boolean? = true ) { override fun toString() = json.encodeToString(this) } From 9e7a1722112b87ca9f80bcced5b7a8009de7428c Mon Sep 17 00:00:00 2001 From: Dmytro Date: Mon, 22 Sep 2025 13:12:52 +0200 Subject: [PATCH 2/4] code review fixes --- .../kotlin/com/sourcepoint/mobile_core/Coordinator.kt | 7 +++++-- .../mobile_core/network/requests/IncludeData.kt | 4 ++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/core/src/commonMain/kotlin/com/sourcepoint/mobile_core/Coordinator.kt b/core/src/commonMain/kotlin/com/sourcepoint/mobile_core/Coordinator.kt index f2e3e72a..47995485 100644 --- a/core/src/commonMain/kotlin/com/sourcepoint/mobile_core/Coordinator.kt +++ b/core/src/commonMain/kotlin/com/sourcepoint/mobile_core/Coordinator.kt @@ -38,6 +38,7 @@ import com.sourcepoint.mobile_core.network.requests.ConsentStatusRequest import com.sourcepoint.mobile_core.network.requests.GDPRChoiceRequest import com.sourcepoint.mobile_core.network.requests.GlobalCmpChoiceRequest import com.sourcepoint.mobile_core.network.requests.IncludeData +import com.sourcepoint.mobile_core.network.requests.IncludeData.GPPConfig import com.sourcepoint.mobile_core.network.requests.MessagesRequest import com.sourcepoint.mobile_core.network.requests.MetaDataRequest import com.sourcepoint.mobile_core.network.requests.PreferencesChoiceRequest @@ -74,7 +75,10 @@ class Coordinator( private val idfaStatus: SPIDFAStatus? get() = getIDFAStatus() // TODO: implement using expect/actual var getIDFAStatus: (() -> SPIDFAStatus?) = { SPIDFAStatus.current() } // workaround for ios - private val includeData: IncludeData = IncludeData() + private val includeData: IncludeData = IncludeData(gppConfig = + if(campaigns.usnat?.gppConfig != null) + campaigns.usnat.gppConfig.copy(uspString = campaigns.usnat.supportLegacyUSPString) + else GPPConfig(uspString = campaigns.usnat?.supportLegacyUSPString)) private var needsNewUSNatData = false private var needsNewGlobalCmpData = false @@ -206,7 +210,6 @@ class Coordinator( language: SPMessageLanguage ): List { this.authId = authId - this.includeData.gppData.uspString = campaigns.usnat?.supportLegacyUSPString resetStateIfAuthIdChanged() var messages: List = emptyList() try { diff --git a/core/src/commonMain/kotlin/com/sourcepoint/mobile_core/network/requests/IncludeData.kt b/core/src/commonMain/kotlin/com/sourcepoint/mobile_core/network/requests/IncludeData.kt index 33ffdef1..21ee71a3 100644 --- a/core/src/commonMain/kotlin/com/sourcepoint/mobile_core/network/requests/IncludeData.kt +++ b/core/src/commonMain/kotlin/com/sourcepoint/mobile_core/network/requests/IncludeData.kt @@ -12,7 +12,7 @@ data class IncludeData( val localState: TypeString = TypeString(), val categories: Boolean = true, var translateMessage: Boolean? = null, - @SerialName("GPPData") val gppData: GPPConfig = GPPConfig() + @SerialName("GPPData") val gppConfig: GPPConfig = GPPConfig() ) { @Serializable data class TypeString(val type: String = "string") { @@ -24,7 +24,7 @@ data class IncludeData( val MspaCoveredTransaction: MspaBinaryFlag? = null, val MspaOptOutOptionMode: MspaTernaryFlag? = null, val MspaServiceProviderMode: MspaTernaryFlag? = null, - var uspString: Boolean? = true + var uspString: Boolean? = false ) { override fun toString() = json.encodeToString(this) } From 16dd48d4077f16edb2f8cdb81b0b73f6f5377aca Mon Sep 17 00:00:00 2001 From: Dmytro Date: Mon, 22 Sep 2025 13:18:13 +0200 Subject: [PATCH 3/4] fix test --- .../com/sourcepoint/mobile_core/network/IncludeDataTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/commonTest/kotlin/com/sourcepoint/mobile_core/network/IncludeDataTest.kt b/core/src/commonTest/kotlin/com/sourcepoint/mobile_core/network/IncludeDataTest.kt index 7e2d3b5f..5ed12146 100644 --- a/core/src/commonTest/kotlin/com/sourcepoint/mobile_core/network/IncludeDataTest.kt +++ b/core/src/commonTest/kotlin/com/sourcepoint/mobile_core/network/IncludeDataTest.kt @@ -10,7 +10,7 @@ class IncludeDataTest { fun defaultValues() { val includeData = IncludeData().toString() assertEquals( - "{\"TCData\":{\"type\":\"string\"},\"webConsentPayload\":{\"type\":\"string\"},\"localState\":{\"type\":\"string\"},\"categories\":true,\"GPPData\":{\"uspString\":true}}", + "{\"TCData\":{\"type\":\"string\"},\"webConsentPayload\":{\"type\":\"string\"},\"localState\":{\"type\":\"string\"},\"categories\":true,\"GPPData\":{\"uspString\":false}}", includeData ) } From 941d036d580d59cbf3d5c483a2e78b646d6e93f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Herculano?= Date: Mon, 22 Sep 2025 16:02:11 +0200 Subject: [PATCH 4/4] set IncludeData.GPPConfig.uspstring based on supportLegacyUSPString --- .../kotlin/com/sourcepoint/mobile_core/Coordinator.kt | 5 +---- .../com/sourcepoint/mobile_core/models/SPCampaign.kt | 8 ++++---- .../mobile_core/network/requests/IncludeData.kt | 2 +- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/core/src/commonMain/kotlin/com/sourcepoint/mobile_core/Coordinator.kt b/core/src/commonMain/kotlin/com/sourcepoint/mobile_core/Coordinator.kt index 47995485..2c40b002 100644 --- a/core/src/commonMain/kotlin/com/sourcepoint/mobile_core/Coordinator.kt +++ b/core/src/commonMain/kotlin/com/sourcepoint/mobile_core/Coordinator.kt @@ -75,10 +75,7 @@ class Coordinator( private val idfaStatus: SPIDFAStatus? get() = getIDFAStatus() // TODO: implement using expect/actual var getIDFAStatus: (() -> SPIDFAStatus?) = { SPIDFAStatus.current() } // workaround for ios - private val includeData: IncludeData = IncludeData(gppConfig = - if(campaigns.usnat?.gppConfig != null) - campaigns.usnat.gppConfig.copy(uspString = campaigns.usnat.supportLegacyUSPString) - else GPPConfig(uspString = campaigns.usnat?.supportLegacyUSPString)) + private val includeData: IncludeData = IncludeData(gppConfig = campaigns.usnat?.gppConfig ?: GPPConfig()) private var needsNewUSNatData = false private var needsNewGlobalCmpData = false diff --git a/core/src/commonMain/kotlin/com/sourcepoint/mobile_core/models/SPCampaign.kt b/core/src/commonMain/kotlin/com/sourcepoint/mobile_core/models/SPCampaign.kt index 021cd602..0e3d73ed 100644 --- a/core/src/commonMain/kotlin/com/sourcepoint/mobile_core/models/SPCampaign.kt +++ b/core/src/commonMain/kotlin/com/sourcepoint/mobile_core/models/SPCampaign.kt @@ -1,11 +1,11 @@ package com.sourcepoint.mobile_core.models -import com.sourcepoint.mobile_core.network.requests.IncludeData +import com.sourcepoint.mobile_core.network.requests.IncludeData.GPPConfig data class SPCampaign ( val targetingParams: SPTargetingParams = emptyMap(), val groupPmId: String? = null, - val gppConfig: IncludeData.GPPConfig? = null, - val transitionCCPAAuth: Boolean? = null, - val supportLegacyUSPString: Boolean? = null + val supportLegacyUSPString: Boolean? = null, + val gppConfig: GPPConfig = GPPConfig(uspString = supportLegacyUSPString ?: false), + val transitionCCPAAuth: Boolean? = null ) diff --git a/core/src/commonMain/kotlin/com/sourcepoint/mobile_core/network/requests/IncludeData.kt b/core/src/commonMain/kotlin/com/sourcepoint/mobile_core/network/requests/IncludeData.kt index 21ee71a3..6b82ed74 100644 --- a/core/src/commonMain/kotlin/com/sourcepoint/mobile_core/network/requests/IncludeData.kt +++ b/core/src/commonMain/kotlin/com/sourcepoint/mobile_core/network/requests/IncludeData.kt @@ -24,7 +24,7 @@ data class IncludeData( val MspaCoveredTransaction: MspaBinaryFlag? = null, val MspaOptOutOptionMode: MspaTernaryFlag? = null, val MspaServiceProviderMode: MspaTernaryFlag? = null, - var uspString: Boolean? = false + val uspString: Boolean = false ) { override fun toString() = json.encodeToString(this) }