diff --git a/android/gradle/libs.versions.toml b/android/gradle/libs.versions.toml
index e1e2c9ad7e..9b1bc9c9e3 100644
--- a/android/gradle/libs.versions.toml
+++ b/android/gradle/libs.versions.toml
@@ -92,7 +92,7 @@ moengage-android-sdk = "12.6.02"
moengage-inapp = "6.5.0"
moengage-push-amp-plus = "6.2.1"
moengage-rich-notification = "4.3.2"
-navi-alfred = "1.5.0"
+navi-alfred = "1.6.0"
navi-guarddog = "1.10.0"
navi-pulse = "1.3.0"
navi-uitron = "1.9.0"
diff --git a/android/navi-analytics/src/main/java/com/navi/analytics/utils/NaviAnalyticsConstants.kt b/android/navi-analytics/src/main/java/com/navi/analytics/utils/NaviAnalyticsConstants.kt
index f11f38fdd7..9a98b49440 100644
--- a/android/navi-analytics/src/main/java/com/navi/analytics/utils/NaviAnalyticsConstants.kt
+++ b/android/navi-analytics/src/main/java/com/navi/analytics/utils/NaviAnalyticsConstants.kt
@@ -31,3 +31,5 @@ const val TICKET_STATE = "ticket_state"
const val PRODUCT = "product"
const val CONTEXT = "context"
const val OPTION_SELECTED = "option_selected"
+const val CRITICAL_JOURNEY_RESPONSE_CODE = 27
+const val CRITICAL_JOURNEY_RESPONSE_MESSAGE = "Critical journey is active"
diff --git a/android/navi-analytics/src/main/java/com/navi/analytics/utils/NaviTrackEvent.kt b/android/navi-analytics/src/main/java/com/navi/analytics/utils/NaviTrackEvent.kt
index b4d225d04a..ed0ce57ad9 100644
--- a/android/navi-analytics/src/main/java/com/navi/analytics/utils/NaviTrackEvent.kt
+++ b/android/navi-analytics/src/main/java/com/navi/analytics/utils/NaviTrackEvent.kt
@@ -1,6 +1,6 @@
/*
*
- * * Copyright © 2021-2023 by Navi Technologies Limited
+ * * Copyright © 2021-2024 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
@@ -60,7 +60,12 @@ object NaviTrackEvent {
disableAlfredLogs = analyticsConfiguration.disableAlfredLogs,
apiKey = analyticsConfiguration.alfredKey
)
- AlfredManager.init(alfredConfig, appContext)
+ AlfredManager.init(
+ alfredConfig,
+ appContext,
+ criticalJourneyResponseCode = CRITICAL_JOURNEY_RESPONSE_CODE,
+ criticalJourneyResponseMessage = CRITICAL_JOURNEY_RESPONSE_MESSAGE
+ )
}
PulseManager.init(
pulseConfig,
diff --git a/android/navi-common/src/main/java/com/navi/common/firebaseremoteconfig/FirebaseRemoteConfigHelper.kt b/android/navi-common/src/main/java/com/navi/common/firebaseremoteconfig/FirebaseRemoteConfigHelper.kt
index bd4d267935..2993483681 100644
--- a/android/navi-common/src/main/java/com/navi/common/firebaseremoteconfig/FirebaseRemoteConfigHelper.kt
+++ b/android/navi-common/src/main/java/com/navi/common/firebaseremoteconfig/FirebaseRemoteConfigHelper.kt
@@ -124,6 +124,7 @@ object FirebaseRemoteConfigHelper {
const val NAVI_PAY_POST_PAYMENT_SCREEN_BANNER_VIEW_LIMIT =
"NAVI_PAY_POST_PAYMENT_SCREEN_BANNER_VIEW_LIMIT"
const val NAVI_PAY_NPCI_KEY_CACHE_TTL_IN_HOURS = "NAVI_PAY_NPCI_KEY_CACHE_TTL_IN_HOURS"
+ const val USER_CRITICAL_JOURNEY_DELAY_IN_SECS = "USER_CRITICAL_JOURNEY_DELAY_IN_SECS"
const val NAVI_PAY_NUDGE_PRODUCT_KEY = "NAVI_PAY_NUDGE_PRODUCT_KEY"
const val NAVI_PAY_NUDGE_OBJECTIVE_KEY = "NAVI_PAY_NUDGE_OBJECTIVE_KEY"
const val NAVI_PAY_ENABLE_UPI_REQUEST_ID_CACHING = "NAVI_PAY_ENABLE_UPI_REQUEST_ID_CACHING"
diff --git a/android/navi-common/src/main/java/com/navi/common/utils/CriticalJourneyUtil.kt b/android/navi-common/src/main/java/com/navi/common/utils/CriticalJourneyUtil.kt
new file mode 100644
index 0000000000..8a99d858a5
--- /dev/null
+++ b/android/navi-common/src/main/java/com/navi/common/utils/CriticalJourneyUtil.kt
@@ -0,0 +1,46 @@
+/*
+ *
+ * * Copyright © 2024 by Navi Technologies Limited
+ * * All rights reserved. Strictly confidential
+ *
+ */
+
+package com.navi.common.utils
+
+import com.navi.alfred.AlfredManager
+import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper
+import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper.USER_CRITICAL_JOURNEY_DELAY_IN_SECS
+import java.util.concurrent.atomic.AtomicBoolean
+import kotlin.time.Duration.Companion.seconds
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.Job
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.launch
+
+object CriticalJourneyUtil {
+
+ private var activeJob: Job? = null
+
+ fun enableCriticalJourney() {
+ activeJob?.cancel()
+ activeJob =
+ CoroutineScope(Dispatchers.IO).launch {
+ updateCriticalJourneyForSDK(flag = AtomicBoolean(true))
+ delay(
+ FirebaseRemoteConfigHelper.getDouble(USER_CRITICAL_JOURNEY_DELAY_IN_SECS)
+ .seconds
+ )
+ updateCriticalJourneyForSDK(flag = AtomicBoolean(false))
+ }
+ }
+
+ fun disableCriticalJourney() {
+ activeJob?.cancel()
+ updateCriticalJourneyForSDK(flag = AtomicBoolean(false))
+ }
+
+ private fun updateCriticalJourneyForSDK(flag: AtomicBoolean) {
+ AlfredManager.updateCriticalUserJourneyStatus(flag.get())
+ }
+}
diff --git a/android/navi-common/src/main/res/xml/default_remote_config.xml b/android/navi-common/src/main/res/xml/default_remote_config.xml
index 097e93783e..eb5301b64c 100644
--- a/android/navi-common/src/main/res/xml/default_remote_config.xml
+++ b/android/navi-common/src/main/res/xml/default_remote_config.xml
@@ -513,4 +513,8 @@
NAVI_PAY_SEARCH_QUERY_DEBOUNCE_TIME_MS
500
+
+ USER_CRITICAL_JOURNEY_DELAY_IN_SECS
+ 60
+
\ No newline at end of file
diff --git a/android/navi-pay/src/main/kotlin/com/navi/pay/entry/NaviPayActivity.kt b/android/navi-pay/src/main/kotlin/com/navi/pay/entry/NaviPayActivity.kt
index d92731b7a5..df13d82dcd 100644
--- a/android/navi-pay/src/main/kotlin/com/navi/pay/entry/NaviPayActivity.kt
+++ b/android/navi-pay/src/main/kotlin/com/navi/pay/entry/NaviPayActivity.kt
@@ -27,6 +27,7 @@ import com.navi.base.model.CtaData
import com.navi.base.utils.orFalse
import com.navi.common.model.ModuleNameV2
import com.navi.common.ui.activity.BaseActivity
+import com.navi.common.utils.CriticalJourneyUtil
import com.navi.pay.R
import com.navi.pay.analytics.NaviPayAnalytics
import com.navi.pay.common.model.view.ErrorVisibilityEvent
@@ -97,6 +98,7 @@ class NaviPayActivity : BaseActivity() {
isActivityRecreated = savedInstanceState?.getBoolean(IS_ACTIVITY_RECREATED).orFalse()
initFromIntent(intent)
val naviPayAccessEligibility = NaviPayCommonUtils.getNaviPayAccessEligibility(this)
+ CriticalJourneyUtil.enableCriticalJourney()
setContent {
NaviPayMaterialTheme {
@@ -237,6 +239,7 @@ class NaviPayActivity : BaseActivity() {
}
override fun onDestroy() {
+ CriticalJourneyUtil.disableCriticalJourney()
super.onDestroy()
NaviPayEventBus.resetEventBus()
}