Skip to content

Commit 155fce2

Browse files
authored
Merge pull request #783 from qonversion/release-nocodes/1.6.0
No-Codes Release 1.6.0
2 parents 349be6f + daeb9cf commit 155fce2

File tree

18 files changed

+305
-9
lines changed

18 files changed

+305
-9
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ buildscript {
1010
versionCode: 1
1111
]
1212
nocodes = [
13-
versionName: "1.5.2",
13+
versionName: "1.6.0",
1414
versionCode: 1
1515
]
1616
}

fastlane/report.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66

77

8-
<testcase classname="fastlane.lanes" name="0: default_platform" time="0.0002">
8+
<testcase classname="fastlane.lanes" name="0: default_platform" time="0.000241">
99

1010
</testcase>
1111

nocodes/src/main/java/io/qonversion/nocodes/dto/QAction.kt

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ import io.qonversion.nocodes.error.NoCodesError
44

55
data class QAction(
66
val type: Type,
7-
val parameters: Map<Parameter, Any>? = null
7+
val parameters: Map<Parameter, Any>? = null,
8+
val rawParameters: Map<String, Any>? = null
89
) {
910
var error: NoCodesError? = null
1011

@@ -20,7 +21,8 @@ data class QAction(
2021
Close("close"),
2122
CloseAll("closeAll"),
2223
LoadProducts("getProducts"),
23-
ShowScreen("showScreen");
24+
ShowScreen("showScreen"),
25+
ScreenAnalytics("screenAnalytics");
2426

2527
companion object {
2628
fun from(type: String?): Type {
@@ -37,7 +39,9 @@ data class QAction(
3739
Deeplink("deeplink"),
3840
ProductId("productId"),
3941
ProductIds("productIds"),
40-
ScreenId("screenId");
42+
ScreenId("screenId"),
43+
AnalyticsType("type"),
44+
PageIndex("page_index");
4145

4246
companion object {
4347
fun from(key: String?) = entries.find { it.key == key }

nocodes/src/main/java/io/qonversion/nocodes/internal/NoCodesInternal.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import io.qonversion.nocodes.internal.dto.config.PurchaseDelegateWithCallbacksAd
1414
import kotlinx.coroutines.CoroutineScope
1515
import kotlinx.coroutines.Dispatchers
1616
import kotlinx.coroutines.launch
17+
import kotlinx.coroutines.runBlocking
1718

1819
internal class NoCodesInternal(
1920
private val internalConfig: InternalConfig,
@@ -23,6 +24,7 @@ internal class NoCodesInternal(
2324

2425
private val screenController = dependenciesAssembly.screenController()
2526
private val screenService = dependenciesAssembly.screenService()
27+
private val screenEventsService = dependenciesAssembly.screenEventsService()
2628
private val logger = dependenciesAssembly.logger()
2729

2830
init {
@@ -60,6 +62,9 @@ internal class NoCodesInternal(
6062
}
6163

6264
override fun close() {
65+
runBlocking {
66+
screenEventsService.flushAndWait()
67+
}
6368
screenController.close()
6469
}
6570

nocodes/src/main/java/io/qonversion/nocodes/internal/common/mappers/ActionMapper.kt

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,26 @@ internal class ActionMapper : Mapper<QAction> {
99
val type = QAction.Type.from(typeString)
1010

1111
var parameters: MutableMap<QAction.Parameter, Any>? = null
12+
var rawParameters: MutableMap<String, Any>? = null
13+
1214
if (data.containsKey("parameters")) {
1315
parameters = mutableMapOf()
16+
rawParameters = mutableMapOf()
1417
val parametersMap = data["parameters"] as? Map<*, *>
1518
parametersMap?.forEach { (key, value) ->
16-
key.takeIf { it is String }
17-
?.let { QAction.Parameter.from(it as String) }
18-
?.let { parameter ->
19-
value?.let { parameters[parameter] = value }
19+
if (key is String && value != null) {
20+
rawParameters[key] = value // Always preserve raw
21+
QAction.Parameter.from(key)?.let { parameter ->
22+
parameters[parameter] = value
2023
}
24+
}
2125
}
2226
}
2327

2428
return QAction(
2529
type,
2630
parameters,
31+
rawParameters,
2732
)
2833
}
2934
}

nocodes/src/main/java/io/qonversion/nocodes/internal/di/controllers/ControllersAssemblyImpl.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ internal class ControllersAssemblyImpl(
3535
miscAssembly.noCodesDelegateProvider(),
3636
miscAssembly.jsonSerializer(),
3737
mappersAssembly.actionMapper(),
38+
servicesAssembly.screenEventsService(),
3839
{ miscAssembly.customLocale() },
3940
{ miscAssembly.theme() }
4041
)

nocodes/src/main/java/io/qonversion/nocodes/internal/di/services/ServicesAssembly.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package io.qonversion.nocodes.internal.di.services
22

33
import io.qonversion.nocodes.internal.screen.service.FallbackService
44
import io.qonversion.nocodes.internal.screen.service.ImagePreloader
5+
import io.qonversion.nocodes.internal.screen.service.ScreenEventsService
56
import io.qonversion.nocodes.internal.screen.service.ScreenService
67

78
internal interface ServicesAssembly {
@@ -11,4 +12,6 @@ internal interface ServicesAssembly {
1112
fun fallbackService(): FallbackService?
1213

1314
fun imagePreloader(): ImagePreloader
15+
16+
fun screenEventsService(): ScreenEventsService
1417
}

nocodes/src/main/java/io/qonversion/nocodes/internal/di/services/ServicesAssemblyImpl.kt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import io.qonversion.nocodes.internal.screen.service.FallbackService
88
import io.qonversion.nocodes.internal.screen.service.FallbackServiceImpl
99
import io.qonversion.nocodes.internal.screen.service.ImagePreloader
1010
import io.qonversion.nocodes.internal.screen.service.ImagePreloaderImpl
11+
import io.qonversion.nocodes.internal.screen.service.ScreenEventsService
12+
import io.qonversion.nocodes.internal.screen.service.ScreenEventsServiceImpl
1113
import io.qonversion.nocodes.internal.screen.service.ScreenService
1214
import io.qonversion.nocodes.internal.screen.service.ScreenServiceImpl
1315
import io.qonversion.nocodes.internal.utils.FallbackUtils
@@ -56,4 +58,16 @@ internal class ServicesAssemblyImpl(
5658
override fun imagePreloader(): ImagePreloader {
5759
return imagePreloaderInstance
5860
}
61+
62+
private val screenEventsServiceInstance by lazy {
63+
ScreenEventsServiceImpl(
64+
networkAssembly.requestConfigurator(),
65+
networkAssembly.exponentialApiInteractor(),
66+
miscAssembly.logger()
67+
)
68+
}
69+
70+
override fun screenEventsService(): ScreenEventsService {
71+
return screenEventsServiceInstance
72+
}
5973
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package io.qonversion.nocodes.internal.dto
2+
3+
internal data class ScreenEvent(
4+
val data: Map<String, Any>
5+
) {
6+
fun toMap(): Map<String, Any> = data
7+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package io.qonversion.nocodes.internal.dto
2+
3+
/**
4+
* SDK-originated screen lifecycle events only.
5+
* JS-originated events (e.g. CTA taps, page views) are passed through
6+
* via [ScreenEvent] without validation against this enum.
7+
*/
8+
internal enum class ScreenEventType(val value: String) {
9+
ScreenShown("screen_shown"),
10+
ScreenClosed("screen_closed");
11+
}

0 commit comments

Comments
 (0)