diff --git a/android/navi-bbps/src/main/kotlin/com/navi/bbps/common/NaviBbpsAnalytics.kt b/android/navi-bbps/src/main/kotlin/com/navi/bbps/common/NaviBbpsAnalytics.kt index 34642368d4..16db1de753 100644 --- a/android/navi-bbps/src/main/kotlin/com/navi/bbps/common/NaviBbpsAnalytics.kt +++ b/android/navi-bbps/src/main/kotlin/com/navi/bbps/common/NaviBbpsAnalytics.kt @@ -321,6 +321,25 @@ class NaviBbpsAnalytics private constructor() { ) } + fun onOriginBillDetectionFlowFromExternalEntry( + source: String, + sessionAttribute: Map, + initialSource: String, + triggerOriginFromExternalEntry: Boolean, + ) { + NaviTrackEvent.trackEventOnClickStream( + eventName = "NaviBBPS_CategoryPage_OriginBillDetectionFlowFromExternalEntry", + eventValues = + mapOf( + NAVI_BBPS_SOURCE to source, + NAVI_BBPS_SESSION_ID to sessionAttribute[NAVI_BBPS_SESSION_ID].orEmpty(), + NAVI_BBPS_INITIAL_SOURCE to initialSource, + "triggerOriginFromExternalEntry" to + triggerOriginFromExternalEntry.toString(), + ), + ) + } + fun onOriginWidgetAddDetectedBillsClicked( source: String, sessionAttribute: Map, diff --git a/android/navi-bbps/src/main/kotlin/com/navi/bbps/common/NaviBbpsScreen.kt b/android/navi-bbps/src/main/kotlin/com/navi/bbps/common/NaviBbpsScreen.kt index 63e0f1f07f..681beb741c 100644 --- a/android/navi-bbps/src/main/kotlin/com/navi/bbps/common/NaviBbpsScreen.kt +++ b/android/navi-bbps/src/main/kotlin/com/navi/bbps/common/NaviBbpsScreen.kt @@ -10,6 +10,7 @@ package com.navi.bbps.common enum class NaviBbpsScreen(val screenName: String) { NAVI_BBPS_MAIN(screenName = "MainVm"), NAVI_BBPS_BILL_CATEGORIES(screenName = "NaviBBPS_CategoryPage"), + NAVI_BBPS_BILL_CATEGORIES_WITH_PARAMS(screenName = "NaviBBPS_CategoryPage"), NAVI_BBPS_BILL_CATEGORIES_V2(screenName = "NaviBBPS_CategoryPageV2"), NAVI_BBPS_MY_SAVED_BILLS(screenName = "NaviBBPS_MyBills"), NAVI_BBPS_MY_BILL_HISTORY_DETAILS(screenName = "NaviBBPS_MyBillsTransactionHistory"), diff --git a/android/navi-bbps/src/main/kotlin/com/navi/bbps/feature/category/BillCategoryViewModelV2.kt b/android/navi-bbps/src/main/kotlin/com/navi/bbps/feature/category/BillCategoryViewModelV2.kt index 9407a4ba7f..604322b17e 100644 --- a/android/navi-bbps/src/main/kotlin/com/navi/bbps/feature/category/BillCategoryViewModelV2.kt +++ b/android/navi-bbps/src/main/kotlin/com/navi/bbps/feature/category/BillCategoryViewModelV2.kt @@ -58,6 +58,7 @@ import com.navi.common.network.models.isSuccessWithData import dagger.Lazy import dagger.hilt.android.lifecycle.HiltViewModel import javax.inject.Inject +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asSharedFlow @@ -144,6 +145,12 @@ constructor( private val _onOriginNuxCtaClicked = MutableSharedFlow() val onOriginNuxCtaClicked = _onOriginNuxCtaClicked.asSharedFlow() + private val triggerOriginFromExternalEntry: Boolean = + savedStateHandle.get("triggerOriginFromExternalEntry").orFalse() + + private val _startOriginBillDetectionFlow = MutableSharedFlow(replay = 1) + val startOriginBillDetectionFlow = _startOriginBillDetectionFlow.asSharedFlow() + internal fun setOnOriginNuxCtaClicked(value: Boolean) { viewModelScope.launch { _onOriginNuxCtaClicked.emit(value) } } @@ -167,6 +174,21 @@ constructor( _permissionResult.update { permissionResult } } + suspend fun startOriginFlow() { + naviBbpsAnalytics.onOriginBillDetectionFlowFromExternalEntry( + source = source, + initialSource = initialSource, + sessionAttribute = getNaviBbpsSessionAttributes(), + triggerOriginFromExternalEntry = triggerOriginFromExternalEntry, + ) + _startOriginBillDetectionFlow.emit(true) + } + + @OptIn(ExperimentalCoroutinesApi::class) + fun resetOriginBillDetectionReplayCache() { + _startOriginBillDetectionFlow.resetReplayCache() + } + init { viewModelScope.launch(dispatcherProvider.io) { launch { billCategoriesStateV2.collect { initBottomSheetHandler() } } @@ -189,7 +211,9 @@ constructor( val originSessionAttributes = updateOriginAttributes() - val isOriginNuxSeen = originSessionAttributes.isOriginNuxSeen + val isOriginNuxSeen = + originSessionAttributes.isOriginNuxSeen || triggerOriginFromExternalEntry + naviBbpsAnalytics.onProjectOriginExperimentFetched( initialSource = initialSource, isExperimentEnabled = abTestingItemResponse.isEnabled.orFalse(), @@ -211,6 +235,11 @@ constructor( originSessionHandler.setOriginNuxSeen() } + if (triggerOriginFromExternalEntry) { + originSessionHandler.setOriginNuxSeen() + startOriginFlow() + } + detectedBillsRepository.getCachedDetectedBillsAsFlow().collect { updateOriginAttributes() } diff --git a/android/navi-bbps/src/main/kotlin/com/navi/bbps/feature/category/ui/BillCategoryScreenV2.kt b/android/navi-bbps/src/main/kotlin/com/navi/bbps/feature/category/ui/BillCategoryScreenV2.kt index df95cbcad6..de9785f962 100644 --- a/android/navi-bbps/src/main/kotlin/com/navi/bbps/feature/category/ui/BillCategoryScreenV2.kt +++ b/android/navi-bbps/src/main/kotlin/com/navi/bbps/feature/category/ui/BillCategoryScreenV2.kt @@ -190,8 +190,8 @@ fun BillCategoriesScreenV2( initialSource: String = NaviBbpsScreen.NAVI_BBPS_BILL_CATEGORIES_V2.name, naviBbpsAnalytics: NaviBbpsAnalytics.BillCategories = NaviBbpsAnalytics.INSTANCE.BillCategories(), + triggerOriginFromExternalEntry: Boolean = false, ) { - val billCategoryStateV2 by viewModel.billCategoriesStateV2.collectAsStateWithLifecycle() val rewardsDetails by viewModel.rewardsDetails.collectAsStateWithLifecycle() val billCategoryBottomSheetType by @@ -647,6 +647,21 @@ fun BillCategoryScreenRenderer( } } + LaunchedEffect(Unit) { + viewModel.startOriginBillDetectionFlow.collectLatest { startOriginBillDetectionFlow -> + viewModel.resetOriginBillDetectionReplayCache() + if (startOriginBillDetectionFlow) { + if (fetchSmsPermissionState.allPermissionsGranted) { + viewModel.showLoadingBottomSheet() + openSheet() + viewModel.startDetectingBills() + } else { + requestPermission() + } + } + } + } + LaunchedEffect(Unit) { viewModel.onOriginNuxCtaClicked.collectLatest { isCtaClicked -> if (isCtaClicked) { diff --git a/android/navi-bbps/src/main/kotlin/com/navi/bbps/feature/common/ui/BbpsRoutingLauncherScreen.kt b/android/navi-bbps/src/main/kotlin/com/navi/bbps/feature/common/ui/BbpsRoutingLauncherScreen.kt index 0dbcbc3f76..89d6be4f67 100644 --- a/android/navi-bbps/src/main/kotlin/com/navi/bbps/feature/common/ui/BbpsRoutingLauncherScreen.kt +++ b/android/navi-bbps/src/main/kotlin/com/navi/bbps/feature/common/ui/BbpsRoutingLauncherScreen.kt @@ -17,6 +17,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Modifier +import com.navi.base.utils.orFalse import com.navi.bbps.common.BBPS_BILLER_SEARCH_BOX_PLACEHOLDER_TEXT import com.navi.bbps.common.BBPS_CATEGORY_ICON_URL import com.navi.bbps.common.BBPS_CATEGORY_ID @@ -114,6 +115,15 @@ fun BbpsRoutingLauncherScreen( initialSource = NAVI_HOME, ) } + NaviBbpsScreen.NAVI_BBPS_BILL_CATEGORIES_WITH_PARAMS.name -> { + BillCategoriesScreenV2Destination( + triggerOriginFromExternalEntry = + bundle + .getString("triggerOriginFromExternalEntry") + ?.toBooleanStrictOrNull() + .orFalse() + ) + } else -> BillCategoriesScreenV2Destination() }