TP-86612 | Home event handling (#12847)
Signed-off-by: namankhurmi <naman.khurmi@navi.com>
This commit is contained in:
@@ -36,7 +36,7 @@ class InAppUpdateVM @Inject constructor(private val application: Application) :
|
||||
val callInAppUpdate: LiveData<Boolean>
|
||||
get() = _callInAppUpdate
|
||||
|
||||
private val _showAppUpdateStrip = MutableSharedFlow<Boolean>()
|
||||
private val _showAppUpdateStrip = MutableSharedFlow<Boolean>(replay = 1)
|
||||
val showAppUpdateStrip = _showAppUpdateStrip.asSharedFlow()
|
||||
|
||||
var appUpdateManager: AppUpdateManager = AppUpdateManagerFactory.create(application)
|
||||
|
||||
@@ -71,6 +71,7 @@ constructor(
|
||||
is HpEffects.HandleCtaActionEvents -> handleCtaAction(effects.event)
|
||||
is HpEffects.AnimateInAppNotificationIcon ->
|
||||
animateInAppNotificationIcon(effects.shouldAnimate, homeVM)
|
||||
is HpEffects.HomePageUiRenderedEvent -> homeVM.logOnDataDisplayedEvent()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -196,6 +196,8 @@ private fun RenderUiTronContent(
|
||||
LaunchedEffect(renderingFirstTime) {
|
||||
if (renderingFirstTime) {
|
||||
onEffect(HpEffects.OnPrioritySectionRendered)
|
||||
} else {
|
||||
onEffect(HpEffects.HomePageUiRenderedEvent)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -120,17 +120,17 @@ fun HomeFooter(
|
||||
onNudgeEvent = onNudgeEvent,
|
||||
onNudgeEffect = onNudgeEffect
|
||||
)
|
||||
}
|
||||
bottomNudgeData?.let {
|
||||
if (it.visible) {
|
||||
BottomStickyNudgeUI(
|
||||
showAppUpdateStrip = showAppUpdateStrip,
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
nudgeState = it.bottomStickyNudgeState,
|
||||
bottomNudgeOnClick = { actionData ->
|
||||
onFooterEvent(HomeFooterEvents.BottomNudgeOnClick(actionData))
|
||||
}
|
||||
)
|
||||
bottomNudgeData?.let {
|
||||
if (it.visible) {
|
||||
BottomStickyNudgeUI(
|
||||
showAppUpdateStrip = showAppUpdateStrip,
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
nudgeState = it.bottomStickyNudgeState,
|
||||
bottomNudgeOnClick = { actionData ->
|
||||
onFooterEvent(HomeFooterEvents.BottomNudgeOnClick(actionData))
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
HomeBottomBar(
|
||||
|
||||
@@ -46,6 +46,7 @@ fun HomeScreen(
|
||||
notificationVM = notificationVM,
|
||||
naviAnalyticsEventTracker = naviAnalyticsEventTracker,
|
||||
screenOverlayVM = screenOverlayVM,
|
||||
hpStates = hpStates,
|
||||
homeScrollState = { homeScrollState },
|
||||
)
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@ import com.naviapp.dashboard.viewmodels.DashboardSharedVM
|
||||
import com.naviapp.home.compose.activity.HomePageActivity
|
||||
import com.naviapp.home.model.BottomBarTabType
|
||||
import com.naviapp.home.reducer.HpEffects
|
||||
import com.naviapp.home.reducer.HpStates
|
||||
import com.naviapp.home.viewmodel.HomeViewModel
|
||||
import com.naviapp.home.viewmodel.NotificationVM
|
||||
import com.naviapp.home.viewmodel.SharedVM
|
||||
@@ -31,6 +32,7 @@ fun InitHomeScreenComponents(
|
||||
activity: HomePageActivity,
|
||||
dashboardSharedVM: DashboardSharedVM,
|
||||
homeVM: () -> HomeViewModel,
|
||||
hpStates: () -> HpStates,
|
||||
sharedVM: SharedVM,
|
||||
notificationVM: NotificationVM,
|
||||
naviAnalyticsEventTracker: NaviAnalytics.Home,
|
||||
@@ -54,7 +56,7 @@ fun InitHomeScreenComponents(
|
||||
}
|
||||
}
|
||||
|
||||
LaunchedEffect(key1 = Unit) {
|
||||
LaunchedEffect(hpStates().renderingFirstTime.not()) {
|
||||
sharedVM.uiTronActionHandler.collect { uiTronActionHandler ->
|
||||
uiTronActionHandler?.let {
|
||||
homeVM().setEffect { HpEffects.OnActionsFromJson(it) }
|
||||
@@ -63,14 +65,14 @@ fun InitHomeScreenComponents(
|
||||
}
|
||||
}
|
||||
|
||||
LaunchedEffect(key1 = Unit) {
|
||||
LaunchedEffect(hpStates().renderingFirstTime.not()) {
|
||||
notificationVM.unReadNotificationCount.collect { count ->
|
||||
if (count > 0) naviAnalyticsEventTracker.onInAppNotificationsCountUpdate(count)
|
||||
homeVM().setEffect { HpEffects.OnNotificationUpdatedCount(count) }
|
||||
}
|
||||
}
|
||||
|
||||
LaunchedEffect(key1 = Unit) {
|
||||
LaunchedEffect(hpStates().renderingFirstTime.not()) {
|
||||
screenOverlayVM.animateInAppNotificationIcon.collect {
|
||||
homeVM().setEffect { HpEffects.AnimateInAppNotificationIcon(it) }
|
||||
}
|
||||
|
||||
@@ -31,7 +31,6 @@ import com.naviapp.home.compose.home.utils.updateScreenContent
|
||||
import com.naviapp.home.compose.model.BottomStickyNudgeState
|
||||
import com.naviapp.home.compose.model.CtaActionEvent
|
||||
import com.naviapp.home.compose.model.InitiatePaymentFromComposeData
|
||||
import com.naviapp.home.model.BottomBarTabType
|
||||
import com.naviapp.models.response.HomeFeatureResponse
|
||||
|
||||
class HomeReducer : BaseReducer<HpStates, HpEvents> {
|
||||
@@ -69,7 +68,6 @@ class HomeReducer : BaseReducer<HpStates, HpEvents> {
|
||||
previousState.copy(isError = true)
|
||||
}
|
||||
is HpEvents.HandleAppUpdateNudgeVisibility -> {
|
||||
val isHomeTab = event.selectedTab == BottomBarTabType.HOME.name
|
||||
val appUpdateData =
|
||||
previousState.screenDefinition
|
||||
?.screenStructure
|
||||
@@ -82,7 +80,7 @@ class HomeReducer : BaseReducer<HpStates, HpEvents> {
|
||||
|
||||
appUpdateData?.let { data ->
|
||||
event.bottomNavBarVM.setBottomNudge(
|
||||
isHomeTab,
|
||||
true,
|
||||
BottomStickyNudgeState.AppUpdateNudgeState(data)
|
||||
)
|
||||
}
|
||||
@@ -245,4 +243,6 @@ sealed interface HpEffects : UiEffect {
|
||||
data class HandleCtaActionEvents(val event: CtaActionEvent) : HpEffects
|
||||
|
||||
data class AnimateInAppNotificationIcon(val shouldAnimate: Boolean) : HpEffects
|
||||
|
||||
data object HomePageUiRenderedEvent : HpEffects
|
||||
}
|
||||
|
||||
@@ -20,7 +20,6 @@ import com.navi.base.sharedpref.PreferenceManager
|
||||
import com.navi.base.utils.BaseUtils
|
||||
import com.navi.base.utils.ConnectivityObserver
|
||||
import com.navi.common.basemvi.BaseMviViewModel
|
||||
import com.navi.common.uitron.helper.RotatingViewHelper
|
||||
import com.navi.common.uitron.helper.VideoViewHelper
|
||||
import com.navi.common.utils.Constants.SCREEN_HASH
|
||||
import com.navi.common.utils.Constants.UPI_NUX_SCREEN
|
||||
@@ -47,6 +46,7 @@ import com.naviapp.home.usecase.FetchHomeItemsUseCase
|
||||
import com.naviapp.home.usecase.HandleCtaUseCase
|
||||
import com.naviapp.home.usecase.HandleUpiUseCase
|
||||
import com.naviapp.nux.handler.NewUserExperienceHandler
|
||||
import com.naviapp.utils.Constants.HOME_SCREEN_IN_CAPS
|
||||
import com.naviapp.utils.Constants.HomePageConstants.FETCH_HOME_ITEMS_TIMEOUT
|
||||
import com.naviapp.utils.SelectiveRefreshHandler
|
||||
import dagger.Lazy
|
||||
@@ -77,7 +77,6 @@ constructor(
|
||||
private val connectivityObserver: ConnectivityObserver,
|
||||
val nuxHandler: NewUserExperienceHandler,
|
||||
private val upiUseCase: HandleUpiUseCase,
|
||||
val rotatingViewHelper: Lazy<RotatingViewHelper>,
|
||||
val videoViewHelper: Lazy<VideoViewHelper>,
|
||||
val sectionVisibilityTracker: HomePageSectionImpressionTracker,
|
||||
) :
|
||||
@@ -87,10 +86,11 @@ constructor(
|
||||
) {
|
||||
|
||||
var shouldRefreshHomeApi: Boolean = false
|
||||
var homeTabLastUpdateTimestamp: Long = System.currentTimeMillis()
|
||||
private var homeTabLastUpdateTimestamp: Long = System.currentTimeMillis()
|
||||
private var homePageRefreshJob: Job? = null
|
||||
val naviAnalyticsEventTracker by lazy { NaviAnalytics.naviAnalytics.Home() }
|
||||
private var analyticsStartTs = System.currentTimeMillis()
|
||||
private var isHomeUIRenderedEventLogged = false
|
||||
|
||||
// Backdrop Scaffold Progress used for updating the alpha of the top nav
|
||||
private val _backdropScaffoldProgress = MutableStateFlow(0f)
|
||||
@@ -128,10 +128,12 @@ constructor(
|
||||
}
|
||||
|
||||
suspend fun handleRemainingItemsForFirstLoad() {
|
||||
setEffect { HpEffects.LogAppLaunchTime(HOME_SCREEN_IN_CAPS) }
|
||||
val cacheEntity = naviCacheRepository.get(NaviSharedDbKeys.HOME_TAB.name)
|
||||
cacheEntity?.let {
|
||||
updateHomeScreen(it)
|
||||
sendEvent(HpEvents.FirstLoadCompleted)
|
||||
finishProcessing(it)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -283,10 +285,11 @@ constructor(
|
||||
when {
|
||||
state.value.renderingFirstTime && state.value.processPrioritySection ->
|
||||
processPriorityContent(data)
|
||||
else -> updateHomeScreen(data)
|
||||
else -> {
|
||||
updateHomeScreen(data)
|
||||
finishProcessing(data)
|
||||
}
|
||||
}
|
||||
|
||||
finishProcessing(data)
|
||||
}
|
||||
|
||||
private suspend fun processPriorityContent(data: NaviCacheEntity) {
|
||||
@@ -351,6 +354,13 @@ constructor(
|
||||
}
|
||||
}
|
||||
|
||||
fun logOnDataDisplayedEvent() {
|
||||
if (isHomeUIRenderedEventLogged.not()) {
|
||||
naviAnalyticsEventTracker.onDataDisplayed(System.currentTimeMillis() - analyticsStartTs)
|
||||
isHomeUIRenderedEventLogged = true
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCleared() {
|
||||
super.onCleared()
|
||||
videoViewHelper.get().clear()
|
||||
|
||||
Reference in New Issue
Block a user