NTP-8836 | NTP-14898 | Added Analytics Events for new app update and notify me widget (#14013)
This commit is contained in:
@@ -1467,6 +1467,51 @@ class NaviAnalytics private constructor() {
|
||||
)
|
||||
}
|
||||
|
||||
inner class InAppUpdate(val screenName: String? = null) {
|
||||
|
||||
fun appUpdateStateEvent(state: String) {
|
||||
NaviTrackEvent.trackEvent(
|
||||
eventName = "naviapp_app_update_state_event",
|
||||
eventValues = mapOf(Pair("state", state))
|
||||
)
|
||||
}
|
||||
|
||||
fun appUpdateNudgeViewEvent() {
|
||||
NaviTrackEvent.trackEvent(
|
||||
eventName = "naviapp_app_update_nudge_view_event",
|
||||
eventValues = mapOf(Pair("screen_name", screenName.orEmpty()))
|
||||
)
|
||||
}
|
||||
|
||||
fun appUpdateNudgeClickEvent() {
|
||||
NaviTrackEvent.trackEvent(
|
||||
eventName = "naviapp_app_update_nudge_click_event",
|
||||
eventValues = mapOf(Pair("screen_name", screenName.orEmpty()))
|
||||
)
|
||||
}
|
||||
|
||||
fun appInstallNudgeClickEvent() {
|
||||
NaviTrackEvent.trackEvent(
|
||||
eventName = "naviapp_app_install_nudge_click_event",
|
||||
eventValues = mapOf(Pair("screen_name", screenName.orEmpty()))
|
||||
)
|
||||
}
|
||||
|
||||
fun appUpdateNudgeDismissEvent() {
|
||||
NaviTrackEvent.trackEvent(
|
||||
eventName = "naviapp_app_update_nudge_dismiss_event",
|
||||
eventValues = mapOf(Pair("screen_name", screenName.orEmpty()))
|
||||
)
|
||||
}
|
||||
|
||||
fun appUpdateUnavailableClickEvent() {
|
||||
NaviTrackEvent.trackEvent(
|
||||
eventName = "naviapp_app_update_unavailable_click_event",
|
||||
eventValues = mapOf(Pair("screen_name", screenName.orEmpty()))
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
const val AMOUNT = "amount"
|
||||
const val SELECTED_OPTION = "selected_option"
|
||||
|
||||
@@ -98,10 +98,6 @@ class InAppUpdateHelper(
|
||||
naviAnalyticsInAppUpdate.onInAppSuccessFully()
|
||||
}
|
||||
|
||||
fun inAppUpdateSnackBarClick() {
|
||||
naviAnalyticsInAppUpdate.inAppUpdateSnackBarClick()
|
||||
}
|
||||
|
||||
fun registerAppUpdateFlow() {
|
||||
naviAnalyticsInAppUpdate.inAppUpdateBottomSheetUpdateBtn()
|
||||
}
|
||||
|
||||
@@ -1649,6 +1649,7 @@ class HomePageActivity :
|
||||
}
|
||||
|
||||
override fun setAppUpdateState(appUpdateState: AppUpdateState) {
|
||||
NaviAnalytics.naviAnalytics.InAppUpdate().appUpdateStateEvent(state = appUpdateState.name)
|
||||
sharedVM.setAppUpdateState(appUpdateState)
|
||||
}
|
||||
|
||||
@@ -1660,6 +1661,7 @@ class HomePageActivity :
|
||||
}
|
||||
|
||||
override fun installUpdate() {
|
||||
inAppUpdateHelper.registerAppUpdateSuccessAnalytics()
|
||||
inAppUpdateHelper.completeUpdate()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,6 +22,7 @@ import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
import androidx.compose.runtime.derivedStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.Alignment
|
||||
@@ -39,16 +40,20 @@ import com.navi.elex.atoms.ElexAsyncImage
|
||||
import com.navi.elex.atoms.ElexText
|
||||
import com.navi.elex.font.FontWeightEnum
|
||||
import com.navi.uitron.model.UiTronResponse
|
||||
import com.naviapp.analytics.utils.NaviAnalytics
|
||||
import com.naviapp.common.listeners.InAppUpdateBridge
|
||||
import com.naviapp.common.model.AppUpdateState
|
||||
import com.naviapp.home.utils.getHomeWidgetAnimationSpec
|
||||
import com.naviapp.utils.Constants.HOME_SCREEN_IN_CAPS
|
||||
|
||||
@Composable
|
||||
fun HomeAppUpdateWidget(
|
||||
content: AlchemistWidgetModelDefinition<UiTronResponse>,
|
||||
appUpdateState: AppUpdateState,
|
||||
inAppUpdateBridge: InAppUpdateBridge,
|
||||
dismissNudge: () -> Unit
|
||||
dismissNudge: () -> Unit,
|
||||
appUpdateAnalytics: NaviAnalytics.InAppUpdate =
|
||||
NaviAnalytics.naviAnalytics.InAppUpdate(HOME_SCREEN_IN_CAPS)
|
||||
) {
|
||||
val data = content.widgetData?.data?.get(APP_UPDATE_DATA) as? AppUpdateNudgeData
|
||||
val visible =
|
||||
@@ -58,6 +63,11 @@ fun HomeAppUpdateWidget(
|
||||
appUpdateState != AppUpdateState.UPDATE_DOWNLOADING
|
||||
}
|
||||
}
|
||||
LaunchedEffect(visible.value) {
|
||||
if (visible.value) {
|
||||
appUpdateAnalytics.appUpdateNudgeViewEvent()
|
||||
}
|
||||
}
|
||||
AnimatedVisibility(
|
||||
visible = visible.value,
|
||||
enter =
|
||||
@@ -114,8 +124,10 @@ fun HomeAppUpdateWidget(
|
||||
Modifier.clip(RoundedCornerShape(4.dp))
|
||||
.clickable {
|
||||
if (appUpdateState != AppUpdateState.UPDATE_DOWNLOADED) {
|
||||
appUpdateAnalytics.appUpdateNudgeClickEvent()
|
||||
inAppUpdateBridge.downloadUpdate()
|
||||
} else {
|
||||
appUpdateAnalytics.appInstallNudgeClickEvent()
|
||||
inAppUpdateBridge.installUpdate()
|
||||
}
|
||||
}
|
||||
@@ -139,6 +151,7 @@ fun HomeAppUpdateWidget(
|
||||
contentDescription = "",
|
||||
modifier =
|
||||
Modifier.padding(start = 12.dp, end = 4.dp).size(24.dp).clickable {
|
||||
appUpdateAnalytics.appUpdateNudgeDismissEvent()
|
||||
dismissNudge()
|
||||
},
|
||||
)
|
||||
|
||||
@@ -36,12 +36,14 @@ import com.google.accompanist.permissions.isGranted
|
||||
import com.google.accompanist.permissions.rememberPermissionState
|
||||
import com.google.accompanist.permissions.shouldShowRationale
|
||||
import com.navi.common.alchemist.model.AlchemistWidgetModelDefinition
|
||||
import com.navi.common.utils.CommonNaviAnalytics
|
||||
import com.navi.common.utils.Constants.NOTIFY_WIDGET_DATA
|
||||
import com.navi.elex.atoms.ElexAsyncImage
|
||||
import com.navi.elex.atoms.ElexText
|
||||
import com.navi.elex.font.FontWeightEnum
|
||||
import com.navi.uitron.model.UiTronResponse
|
||||
import com.naviapp.home.compose.model.NotifyMeWidgetData
|
||||
import com.naviapp.utils.Constants.HOME_SCREEN_IN_CAPS
|
||||
|
||||
@OptIn(ExperimentalPermissionsApi::class)
|
||||
@Composable
|
||||
@@ -49,7 +51,9 @@ fun HomeNotifyMeWidget(
|
||||
widget: AlchemistWidgetModelDefinition<UiTronResponse>,
|
||||
showBottomSheet: () -> Unit,
|
||||
onDismissNudge: () -> Unit,
|
||||
onPermissionGranted: (Boolean) -> Unit
|
||||
onPermissionGranted: (Boolean) -> Unit,
|
||||
notifyMeAnalytics: CommonNaviAnalytics.NotifyMe =
|
||||
CommonNaviAnalytics.naviAnalytics.NotifyMe(HOME_SCREEN_IN_CAPS)
|
||||
) {
|
||||
val notificationPermission =
|
||||
rememberPermissionState(permission = android.Manifest.permission.POST_NOTIFICATIONS)
|
||||
@@ -57,21 +61,29 @@ fun HomeNotifyMeWidget(
|
||||
val visible by remember { mutableStateOf(notificationPermission.status.isGranted.not()) }
|
||||
LaunchedEffect(notificationPermission.status.isGranted) {
|
||||
if (notificationPermission.status.isGranted) {
|
||||
notifyMeAnalytics.notifyMeNudgePermissionGrantedEvent()
|
||||
onPermissionGranted(true)
|
||||
}
|
||||
}
|
||||
if (visible) {
|
||||
notifyMeAnalytics.notifyMeNudgeViewEvent()
|
||||
NotifyMeUI(
|
||||
permissionGranted = notificationPermission.status.isGranted,
|
||||
widgetData,
|
||||
onDismissNudge
|
||||
) {
|
||||
if (notificationPermission.status.shouldShowRationale) {
|
||||
notificationPermission.launchPermissionRequest()
|
||||
} else {
|
||||
showBottomSheet()
|
||||
onDismissNudge = {
|
||||
notifyMeAnalytics.notifyMeNudgeDismissEvent()
|
||||
onDismissNudge()
|
||||
},
|
||||
onClick = {
|
||||
notifyMeAnalytics.notifyMeNudgeClickEvent()
|
||||
if (notificationPermission.status.shouldShowRationale) {
|
||||
notifyMeAnalytics.notifyMeNudgePermissionPromptShownEvent()
|
||||
notificationPermission.launchPermissionRequest()
|
||||
} else {
|
||||
showBottomSheet()
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -36,10 +36,12 @@ import androidx.lifecycle.compose.LocalLifecycleOwner
|
||||
import androidx.lifecycle.setViewTreeLifecycleOwner
|
||||
import androidx.savedstate.SavedStateRegistryOwner
|
||||
import androidx.savedstate.setViewTreeSavedStateRegistryOwner
|
||||
import com.navi.common.utils.Constants.PROFILE_SCREEN
|
||||
import com.navi.elex.atoms.ElexAsyncImage
|
||||
import com.navi.elex.atoms.ElexText
|
||||
import com.navi.elex.font.FontWeightEnum
|
||||
import com.naviapp.R
|
||||
import com.naviapp.analytics.utils.NaviAnalytics
|
||||
import com.naviapp.common.listeners.InAppUpdateBridge
|
||||
import com.naviapp.common.model.AppUpdateState
|
||||
import com.naviapp.home.compose.model.AppUpdateToastData
|
||||
@@ -49,7 +51,9 @@ import com.naviapp.home.compose.model.ProfileAppUpdateSettingData
|
||||
fun ProfileAppUpdateWidget(
|
||||
data: ProfileAppUpdateSettingData,
|
||||
appUpdateState: AppUpdateState,
|
||||
inAppUpdateBridge: InAppUpdateBridge
|
||||
inAppUpdateBridge: InAppUpdateBridge,
|
||||
appUpdateAnalytics: NaviAnalytics.InAppUpdate =
|
||||
NaviAnalytics.naviAnalytics.InAppUpdate(PROFILE_SCREEN)
|
||||
) {
|
||||
val context = LocalContext.current
|
||||
val lifecycleOwner = LocalLifecycleOwner.current
|
||||
@@ -60,6 +64,7 @@ fun ProfileAppUpdateWidget(
|
||||
modifier =
|
||||
Modifier.fillMaxWidth()
|
||||
.clickable(enabled = (appUpdateState == AppUpdateState.UPDATE_NOT_AVAILABLE)) {
|
||||
appUpdateAnalytics.appUpdateUnavailableClickEvent()
|
||||
showToast(
|
||||
content = { toast: Toast? -> AppUpdateToastUI(data.toastData, toast) },
|
||||
context = context,
|
||||
@@ -94,6 +99,7 @@ fun ProfileAppUpdateWidget(
|
||||
AppUpdateState.UPDATE_FAILED,
|
||||
AppUpdateState.UPDATE_PENDING -> {
|
||||
UpdateButton(text = data.updateCtaText.orEmpty()) {
|
||||
appUpdateAnalytics.appUpdateNudgeClickEvent()
|
||||
inAppUpdateBridge.downloadUpdate()
|
||||
}
|
||||
}
|
||||
@@ -109,6 +115,7 @@ fun ProfileAppUpdateWidget(
|
||||
}
|
||||
AppUpdateState.UPDATE_DOWNLOADED -> {
|
||||
UpdateButton(text = data.installCtaText.orEmpty()) {
|
||||
appUpdateAnalytics.appInstallNudgeClickEvent()
|
||||
inAppUpdateBridge.installUpdate()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,6 +30,7 @@ import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.text.TextStyle
|
||||
import androidx.compose.ui.unit.sp
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.navi.common.utils.CommonNaviAnalytics
|
||||
import com.navi.common.viewmodel.BaseVM
|
||||
import com.navi.design.font.FontWeightEnum
|
||||
import com.navi.design.font.getFontWeight
|
||||
@@ -47,6 +48,7 @@ import com.naviapp.home.compose.home.ui.content.HomeAppUpdateWidget
|
||||
import com.naviapp.home.compose.home.ui.content.HomeNotifyMeWidget
|
||||
import com.naviapp.home.model.HomeCustomWidgetType
|
||||
import com.naviapp.home.model.HpBottomSheetComposableType
|
||||
import com.naviapp.home.model.HpBottomSheetConfig
|
||||
import com.naviapp.home.model.HpBottomSheetContent
|
||||
import com.naviapp.home.model.HpBottomSheetRenderType
|
||||
import com.naviapp.home.model.HpBottomSheetState
|
||||
@@ -57,6 +59,7 @@ import com.naviapp.screenOverlay.nudge.model.NudgeEvent
|
||||
import com.naviapp.screenOverlay.nudge.model.StaticNudgeData
|
||||
import com.naviapp.screenOverlay.nudge.model.StaticNudgeUiState
|
||||
import com.naviapp.screenOverlay.viewModel.ScreenOverlayVM
|
||||
import com.naviapp.utils.Constants.HOME_SCREEN_IN_CAPS
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.launch
|
||||
@@ -166,6 +169,19 @@ fun WidgetRenderer(
|
||||
showBottomSheet = {
|
||||
sharedVM.updateBottomSheetState(
|
||||
state = HpBottomSheetState.Visible,
|
||||
config =
|
||||
HpBottomSheetConfig(
|
||||
onDismiss = {
|
||||
CommonNaviAnalytics.naviAnalytics
|
||||
.NotifyMe(HOME_SCREEN_IN_CAPS)
|
||||
.notifyMeNudgeOpenSettingsBottomSheetDismissEvent()
|
||||
},
|
||||
onVisible = {
|
||||
CommonNaviAnalytics.naviAnalytics
|
||||
.NotifyMe(HOME_SCREEN_IN_CAPS)
|
||||
.notifyMeNudgeOpenSettingsBottomSheetLandEvent()
|
||||
}
|
||||
),
|
||||
content =
|
||||
HpBottomSheetContent(
|
||||
composableType =
|
||||
|
||||
@@ -34,9 +34,9 @@ import com.navi.base.model.CtaData
|
||||
import com.navi.base.utils.orTrue
|
||||
import com.navi.common.uitron.model.action.CtaAction
|
||||
import com.navi.common.uitron.render.CommonCustomUiTronRenderer
|
||||
import com.navi.common.utils.CommonNaviAnalytics
|
||||
import com.navi.common.utils.Constants.HIDE
|
||||
import com.navi.common.utils.getStatusBarHeight
|
||||
import com.navi.insurance.util.REDIRECTION_CTA
|
||||
import com.navi.uitron.model.data.UiTronAction
|
||||
import com.navi.uitron.model.data.UiTronActionData
|
||||
import com.navi.uitron.render.UiTronRenderer
|
||||
@@ -52,6 +52,7 @@ import com.naviapp.home.model.HpBottomSheetRenderType
|
||||
import com.naviapp.home.model.HpBottomSheetState
|
||||
import com.naviapp.home.model.InvestmentBottomSheetData
|
||||
import com.naviapp.home.viewmodel.SharedVM
|
||||
import com.naviapp.utils.Constants.HOME_SCREEN_IN_CAPS
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
@@ -150,6 +151,9 @@ private fun BottomSheetContentRenderer(
|
||||
NotificationSettingBottomSheetContent(
|
||||
onDismiss = { viewModel.handle[BOTTOM_SHEET_VISIBILITY] = HIDE },
|
||||
onClick = {
|
||||
CommonNaviAnalytics.naviAnalytics
|
||||
.NotifyMe(HOME_SCREEN_IN_CAPS)
|
||||
.notifyMeNudgeOpenSettingsBottomSheetClickEvent()
|
||||
viewModel.handleActions(
|
||||
UiTronActionData(
|
||||
actions =
|
||||
|
||||
@@ -330,9 +330,6 @@ class CommonNaviAnalytics private constructor() {
|
||||
|
||||
fun inAppUpdateBottomSheetView() =
|
||||
NaviTrackEvent.trackEvent("in_app_update_bottomSheet_view")
|
||||
|
||||
fun inAppUpdateSnackBarClick() =
|
||||
NaviTrackEvent.trackEvent("in_app_update_snackBar_install_click")
|
||||
}
|
||||
|
||||
inner class NaviLocationManager {
|
||||
@@ -1077,6 +1074,64 @@ class CommonNaviAnalytics private constructor() {
|
||||
}
|
||||
}
|
||||
|
||||
inner class NotifyMe(val screenName: String? = null) {
|
||||
fun notifyMeNudgeViewEvent() {
|
||||
NaviTrackEvent.trackEvent(
|
||||
eventName = "notify_me_nudge_view_event",
|
||||
eventValues = mapOf(Pair("screen_name", screenName.orEmpty()))
|
||||
)
|
||||
}
|
||||
|
||||
fun notifyMeNudgeClickEvent() {
|
||||
NaviTrackEvent.trackEvent(
|
||||
eventName = "notify_me_nudge_click_event",
|
||||
eventValues = mapOf(Pair("screen_name", screenName.orEmpty()))
|
||||
)
|
||||
}
|
||||
|
||||
fun notifyMeNudgeDismissEvent() {
|
||||
NaviTrackEvent.trackEvent(
|
||||
eventName = "notify_me_nudge_dismiss_event",
|
||||
eventValues = mapOf(Pair("screen_name", screenName.orEmpty()))
|
||||
)
|
||||
}
|
||||
|
||||
fun notifyMeNudgePermissionPromptShownEvent() {
|
||||
NaviTrackEvent.trackEvent(
|
||||
eventName = "notify_me_nudge_permission_prompt_shown_event",
|
||||
eventValues = mapOf(Pair("screen_name", screenName.orEmpty()))
|
||||
)
|
||||
}
|
||||
|
||||
fun notifyMeNudgePermissionGrantedEvent() {
|
||||
NaviTrackEvent.trackEvent(
|
||||
eventName = "notify_me_nudge_permission_granted_event",
|
||||
eventValues = mapOf(Pair("screen_name", screenName.orEmpty()))
|
||||
)
|
||||
}
|
||||
|
||||
fun notifyMeNudgeOpenSettingsBottomSheetLandEvent() {
|
||||
NaviTrackEvent.trackEvent(
|
||||
eventName = "notify_me_nudge_open_settings_bottomsheet_land_event",
|
||||
eventValues = mapOf(Pair("screen_name", screenName.orEmpty()))
|
||||
)
|
||||
}
|
||||
|
||||
fun notifyMeNudgeOpenSettingsBottomSheetClickEvent() {
|
||||
NaviTrackEvent.trackEvent(
|
||||
eventName = "notify_me_nudge_open_settings_bottomsheet_click_event",
|
||||
eventValues = mapOf(Pair("screen_name", screenName.orEmpty()))
|
||||
)
|
||||
}
|
||||
|
||||
fun notifyMeNudgeOpenSettingsBottomSheetDismissEvent() {
|
||||
NaviTrackEvent.trackEvent(
|
||||
eventName = "notify_me_nudge_open_settings_bottomsheet_dismiss_event",
|
||||
eventValues = mapOf(Pair("screen_name", screenName.orEmpty()))
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
const val OVERRIDE_EVENT = "override_event"
|
||||
const val TEXT_TRUE = "true"
|
||||
|
||||
Reference in New Issue
Block a user