Skip to content

Commit cb37657

Browse files
authored
Merge pull request #2137 from OneSignal/IAM-display-forever
[FIX] IAM with dynamic trigger showing forever
2 parents 7491122 + 26a1dfd commit cb37657

File tree

3 files changed

+15
-10
lines changed

3 files changed

+15
-10
lines changed

OneSignalSDK/onesignal/in-app-messages/src/main/java/com/onesignal/inAppMessages/internal/InAppMessagesManager.kt

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -451,13 +451,17 @@ internal class InAppMessagesManager(
451451
*
452452
* Make all messages with redisplay available if:
453453
* - Already displayed
454-
* - At least one Trigger has changed
454+
* - At least one existing Trigger has changed OR a new trigger is added when there is only dynamic trigger
455455
*/
456-
private fun makeRedisplayMessagesAvailableWithTriggers(newTriggersKeys: Collection<String>) {
456+
private fun makeRedisplayMessagesAvailableWithTriggers(
457+
newTriggersKeys: Collection<String>,
458+
isNewTriggerAdded: Boolean,
459+
) {
457460
for (message in messages) {
458-
if (!message.isTriggerChanged && redisplayedInAppMessages.contains(message) &&
459-
_triggerController.isTriggerOnMessage(message, newTriggersKeys)
460-
) {
461+
val isMessageDisplayed = redisplayedInAppMessages.contains(message)
462+
val isTriggerOnMessage = _triggerController.isTriggerOnMessage(message, newTriggersKeys)
463+
val isOnlyDynamicTriggers = _triggerController.messageHasOnlyDynamicTriggers(message)
464+
if (!message.isTriggerChanged && isMessageDisplayed && (isTriggerOnMessage || isNewTriggerAdded && isOnlyDynamicTriggers)) {
461465
Logging.debug("InAppMessagesManager.makeRedisplayMessagesAvailableWithTriggers: Trigger changed for message: $message")
462466
message.isTriggerChanged = true
463467
}
@@ -643,7 +647,6 @@ internal class InAppMessagesManager(
643647
Logging.debug("InAppMessagesManager.onTriggerCompleted: called with triggerId: $triggerId")
644648
val triggerIds: MutableSet<String> = HashSet()
645649
triggerIds.add(triggerId)
646-
makeRedisplayMessagesAvailableWithTriggers(triggerIds)
647650
}
648651

649652
/**
@@ -653,9 +656,11 @@ internal class InAppMessagesManager(
653656
*
654657
* @see OSInAppMessageController.setDataForRedisplay
655658
*/
656-
override fun onTriggerConditionChanged() {
659+
override fun onTriggerConditionChanged(triggerId: String) {
657660
Logging.debug("InAppMessagesManager.onTriggerConditionChanged()")
658661

662+
makeRedisplayMessagesAvailableWithTriggers(listOf(triggerId), false)
663+
659664
suspendifyOnThread {
660665
// This method is called when a time-based trigger timer fires, meaning the message can
661666
// probably be shown now. So the current message conditions should be re-evaluated
@@ -666,7 +671,7 @@ internal class InAppMessagesManager(
666671
override fun onTriggerChanged(newTriggerKey: String) {
667672
Logging.debug("InAppMessagesManager.onTriggerChanged(newTriggerKey: $newTriggerKey)")
668673

669-
makeRedisplayMessagesAvailableWithTriggers(listOf(newTriggerKey))
674+
makeRedisplayMessagesAvailableWithTriggers(listOf(newTriggerKey), true)
670675

671676
suspendifyOnThread {
672677
// This method is called when a time-based trigger timer fires, meaning the message can

OneSignalSDK/onesignal/in-app-messages/src/main/java/com/onesignal/inAppMessages/internal/triggers/ITriggerHandler.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ internal interface ITriggerHandler {
1616
/**
1717
* Called when a time-based trigger (dynamic trigger) will now evaluate to true.
1818
*/
19-
fun onTriggerConditionChanged()
19+
fun onTriggerConditionChanged(triggerId: String)
2020

2121
/**
2222
* Called when a new trigger has been added, or an existing trigger's value has been

OneSignalSDK/onesignal/in-app-messages/src/main/java/com/onesignal/inAppMessages/internal/triggers/impl/DynamicTriggerController.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ internal class DynamicTriggerController(
8989
object : TimerTask() {
9090
override fun run() {
9191
scheduledMessages.remove(triggerId)
92-
events.fire { it.onTriggerConditionChanged() }
92+
events.fire { it.onTriggerConditionChanged(triggerId) }
9393
}
9494
},
9595
triggerId,

0 commit comments

Comments
 (0)