TP-86612 | Home event handling (#12847)

Signed-off-by: namankhurmi <naman.khurmi@navi.com>
This commit is contained in:
Naman Khurmi
2024-09-30 23:14:50 +05:30
committed by GitHub
parent e616939c87
commit 58545a2c39
8 changed files with 40 additions and 24 deletions

View File

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

View File

@@ -71,6 +71,7 @@ constructor(
is HpEffects.HandleCtaActionEvents -> handleCtaAction(effects.event)
is HpEffects.AnimateInAppNotificationIcon ->
animateInAppNotificationIcon(effects.shouldAnimate, homeVM)
is HpEffects.HomePageUiRenderedEvent -> homeVM.logOnDataDisplayedEvent()
}
}

View File

@@ -196,6 +196,8 @@ private fun RenderUiTronContent(
LaunchedEffect(renderingFirstTime) {
if (renderingFirstTime) {
onEffect(HpEffects.OnPrioritySectionRendered)
} else {
onEffect(HpEffects.HomePageUiRenderedEvent)
}
}
}

View File

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

View File

@@ -46,6 +46,7 @@ fun HomeScreen(
notificationVM = notificationVM,
naviAnalyticsEventTracker = naviAnalyticsEventTracker,
screenOverlayVM = screenOverlayVM,
hpStates = hpStates,
homeScrollState = { homeScrollState },
)

View File

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

View File

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

View File

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