Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
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
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,12 @@ internal class InAppMessagesManager(
private val fetchIAMMutex = Mutex()
private var lastTimeFetchedIAMs: Long? = null

// Tracks whether the first IAM fetch has completed since this cold start
private var hasCompletedFirstFetch: Boolean = false

// Tracks trigger keys added early on cold start (before first fetch completes), for redisplay logic
private val earlySessionTriggers: MutableSet<String> = java.util.Collections.synchronizedSet(mutableSetOf())

private val identityModelChangeHandler =
object : ISingletonModelStoreChangeHandler<IdentityModel> {
override fun onModelReplaced(
Expand Down Expand Up @@ -308,6 +314,26 @@ internal class InAppMessagesManager(

if (newMessages != null) {
this.messages = newMessages as MutableList<InAppMessage>

// Apply isTriggerChanged for messages that match triggers added too early on cold start
synchronized(earlySessionTriggers) {
if (earlySessionTriggers.isNotEmpty()) {
Logging.verbose("InAppMessagesManager: Processing triggers added early on cold start: $earlySessionTriggers")
for (message in this.messages) {
val isMessageDisplayed = redisplayedInAppMessages.contains(message)
val isTriggerOnMessage =
_triggerController.isTriggerOnMessage(message, earlySessionTriggers)
if (isMessageDisplayed && isTriggerOnMessage) {
Logging.verbose("InAppMessagesManager: Setting isTriggerChanged=true for message ${message.messageId}")
message.isTriggerChanged = true
}
}
earlySessionTriggers.clear()
}
// Mark that first fetch has completed
hasCompletedFirstFetch = true
}

evaluateInAppMessages()
}
}
Expand Down Expand Up @@ -565,6 +591,14 @@ internal class InAppMessagesManager(
) {
Logging.debug("InAppMessagesManager.addTrigger(key: $key, value: $value)")

// Track triggers added early on cold start (before first fetch completes) for redisplay logic
synchronized(earlySessionTriggers) {
if (!hasCompletedFirstFetch) {
Logging.verbose("InAppMessagesManager: Tracking trigger added early on cold start: $key")
earlySessionTriggers.add(key)
}
}

var triggerModel = _triggerModelStore.get(key)
if (triggerModel != null) {
triggerModel.value = value
Expand All @@ -588,11 +622,24 @@ internal class InAppMessagesManager(
override fun removeTrigger(key: String) {
Logging.debug("InAppMessagesManager.removeTrigger(key: $key)")

synchronized(earlySessionTriggers) {
if (!hasCompletedFirstFetch) {
earlySessionTriggers.remove(key)
}
}

_triggerModelStore.remove(key)
}

override fun clearTriggers() {
Logging.debug("InAppMessagesManager.clearTriggers()")

synchronized(earlySessionTriggers) {
if (!hasCompletedFirstFetch) {
earlySessionTriggers.clear()
}
}

_triggerModelStore.clear()
}

Expand Down
Loading