NTP-60270 | Divyesh | origin cta redirection (#16051)

This commit is contained in:
Divyesh Shinde
2025-05-12 13:40:32 +05:30
committed by GitHub
parent 26eaddd686
commit 3a3a4369a8
5 changed files with 76 additions and 2 deletions

View File

@@ -321,6 +321,25 @@ class NaviBbpsAnalytics private constructor() {
)
}
fun onOriginBillDetectionFlowFromExternalEntry(
source: String,
sessionAttribute: Map<String, String>,
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<String, String>,

View File

@@ -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"),

View File

@@ -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<Boolean>()
val onOriginNuxCtaClicked = _onOriginNuxCtaClicked.asSharedFlow()
private val triggerOriginFromExternalEntry: Boolean =
savedStateHandle.get<Boolean>("triggerOriginFromExternalEntry").orFalse()
private val _startOriginBillDetectionFlow = MutableSharedFlow<Boolean>(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()
}

View File

@@ -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) {

View File

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