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() }