TP-38527 | HI nav bar redirection (#7566)
This commit is contained in:
@@ -7,20 +7,31 @@
|
||||
|
||||
package com.naviapp.common.viewmodel
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.Menu
|
||||
import androidx.lifecycle.LiveData
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.navi.base.model.CtaData
|
||||
import com.navi.base.model.GenericAnalyticsData
|
||||
import com.navi.base.utils.isNotNull
|
||||
import com.navi.base.utils.isNull
|
||||
import com.navi.base.utils.orZero
|
||||
import com.navi.common.lottie.LottieRemoteHelper
|
||||
import com.navi.common.model.ModuleName
|
||||
import com.navi.common.utils.CommonNaviAnalytics
|
||||
import com.navi.common.utils.TemporaryStorageHelper
|
||||
import com.navi.common.viewmodel.BaseVM
|
||||
import com.navi.insurance.common.fragment.LandingPageInfoFragment
|
||||
import com.navi.insurance.common.models.GiErrorMetaData
|
||||
import com.navi.insurance.network.ApiErrorTagType
|
||||
import com.navi.insurance.util.getGlobalErrorType
|
||||
import com.navi.naviwidgets.models.response.CtaDetails
|
||||
import com.naviapp.R
|
||||
import com.naviapp.analytics.utils.NaviAnalytics
|
||||
import com.naviapp.common.repository.BottomNavBarRepository
|
||||
import com.naviapp.home.activity.NewDashboardActivity
|
||||
import com.naviapp.home.dashboard.ui.ProductFragment
|
||||
import com.naviapp.home.model.BottomBarResponse
|
||||
import com.naviapp.home.model.BottomBarTab
|
||||
import com.naviapp.home.model.BottomBarTabType
|
||||
@@ -28,6 +39,8 @@ import com.naviapp.home.respository.GlobalRepo
|
||||
import com.naviapp.utils.deepCopyCheckForBottomNavData
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.asStateFlow
|
||||
import kotlinx.coroutines.launch
|
||||
import javax.inject.Inject
|
||||
|
||||
@@ -50,6 +63,9 @@ class BottomNavBarVM @Inject constructor(
|
||||
val defaultBottomBarVisible: LiveData<Boolean>
|
||||
get() = _defaultBottomBarVisible
|
||||
|
||||
private val _giNavCtaFlow = MutableStateFlow<CtaDetails?>(null)
|
||||
val giNavCtaFlow = _giNavCtaFlow.asStateFlow()
|
||||
|
||||
private var isOldDashboardEnabled = true
|
||||
|
||||
private val naviAnalyticsEventTracker = NaviAnalytics.naviAnalytics.Dashboard()
|
||||
@@ -198,6 +214,61 @@ class BottomNavBarVM @Inject constructor(
|
||||
return data
|
||||
}
|
||||
|
||||
fun fetchGiNavCta() {
|
||||
viewModelScope.launch(Dispatchers.IO) {
|
||||
val response = globalRepo.fetchGiNavCta()
|
||||
if (response.error == null && response.errors.isNullOrEmpty() && response.data != null) {
|
||||
_giNavCtaFlow.emit(response.data)
|
||||
} else {
|
||||
CommonNaviAnalytics.naviAnalytics.GiError().onGlobalError(
|
||||
response.error?.message,
|
||||
NewDashboardActivity.PAGE_HOME,
|
||||
(ModuleName.GI.name).lowercase(),
|
||||
getGlobalErrorType(response.error?.statusCode),
|
||||
response.error?.statusCode,
|
||||
null,
|
||||
GiErrorMetaData.FLOW_NAVBAR_INSURANCE,
|
||||
ApiErrorTagType.FETCH_GI_NAVBAR_CTA_ERROR.value,
|
||||
null,
|
||||
null,
|
||||
true
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun getGiNavCta(): CtaData? {
|
||||
return _giNavCtaFlow.value?.cta
|
||||
}
|
||||
|
||||
fun getInsuranceBundle(): Bundle {
|
||||
val bundle = Bundle()
|
||||
getGiNavCta()?.parameters?.forEach { lineItem ->
|
||||
bundle.putString(lineItem.key, lineItem.value)
|
||||
}
|
||||
bundle.putString(
|
||||
LandingPageInfoFragment.LANDING_PAGE_TYPE,
|
||||
LandingPageInfoFragment.HI_LP_FROM_DASHBOARD
|
||||
)
|
||||
LandingPageInfoFragment().apply {
|
||||
arguments = bundle
|
||||
}
|
||||
return bundle
|
||||
}
|
||||
|
||||
fun getInsuranceSubType(): String {
|
||||
val splitDeepLink = getGiNavCta()?.url?.split("/")
|
||||
return splitDeepLink?.let {
|
||||
when(val thirdIdentifier = it.getOrNull(2)) {
|
||||
ProductFragment.DashboardTypes.Insurance.name -> thirdIdentifier
|
||||
ProductFragment.DashboardTypes.Insurance_landing_page.name -> thirdIdentifier
|
||||
else -> ProductFragment.DashboardTypes.Insurance.name
|
||||
}
|
||||
} ?: run {
|
||||
ProductFragment.DashboardTypes.Insurance.name
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
private const val BOTTOM_BAR_MAX_TABS = 5
|
||||
}
|
||||
|
||||
@@ -54,20 +54,17 @@ import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper
|
||||
import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper.BOTTOM_BAR_COLOR_ENABLED
|
||||
import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper.BOTTOM_SCROLL_ENABLED
|
||||
import com.navi.common.juspay.HyperServicesHolder
|
||||
import com.navi.common.listeners.DashboardFragmentListener
|
||||
import com.navi.common.listeners.DialogCancelListener
|
||||
import com.navi.common.lottie.LottieRemoteHelper
|
||||
import com.navi.common.managers.PermissionsManager
|
||||
import com.navi.common.managers.UserManager
|
||||
import com.navi.common.model.ModuleNameV2
|
||||
import com.navi.common.model.UserDetail
|
||||
import com.navi.common.model.common.AppUpdateData
|
||||
import com.navi.common.ui.fragment.BaseFragment
|
||||
import com.navi.common.utils.*
|
||||
import com.navi.common.utils.Constants.SHOW_INVESTMENT_ON_BOTTOM_NAV
|
||||
import com.navi.common.utils.Constants.SKIP_PERMISSION_SCREEN
|
||||
import com.navi.common.utils.Constants.SUB_REDIRECT
|
||||
import com.navi.design.utils.CornerRadius
|
||||
import com.navi.design.utils.dpToPxInInt
|
||||
import com.navi.design.utils.getNaviDrawable
|
||||
import com.navi.design.utils.moveViewWithDistanceAnimator
|
||||
@@ -95,9 +92,13 @@ import com.naviapp.dashboard.DashboardBaseActivity
|
||||
import com.naviapp.dashboard.listeners.DialogBoxPrimaryCtaListener
|
||||
import com.naviapp.dashboard.listeners.DialogBoxResponseListener
|
||||
import com.naviapp.databinding.NewDashboardActivityBinding
|
||||
import com.naviapp.home.dashboard.models.response.DashboardTab
|
||||
import com.naviapp.home.dashboard.ui.DashboardFragment
|
||||
import com.naviapp.home.dashboard.ui.InvestmentsFragment
|
||||
import com.navi.common.listeners.DashboardFragmentListener
|
||||
import com.navi.common.model.common.AppUpdateData
|
||||
import com.navi.design.utils.CornerRadius
|
||||
import com.navi.insurance.common.fragment.LandingPageInfoFragment
|
||||
import com.naviapp.home.dashboard.models.response.DashboardTab
|
||||
import com.naviapp.home.dashboard.ui.ProductFragment
|
||||
import com.naviapp.home.fragment.HomeFragment
|
||||
import com.naviapp.home.fragment.LoanContainerFragment
|
||||
@@ -253,6 +254,10 @@ class NewDashboardActivity :
|
||||
bottomNavBarVM.getBottomBarTabData(bottomNavBarVM.getTabName(binding.bottomNavigationView.selectedItemId))?.actionData?.let {
|
||||
updateTab(HomeFragment.TAG, intent.extras)
|
||||
}
|
||||
if(TemporaryStorageHelper.fetchGiNavCta) {
|
||||
bottomNavBarVM.fetchGiNavCta()
|
||||
TemporaryStorageHelper.fetchGiNavCta = false
|
||||
}
|
||||
TempStorageHelper.clear()
|
||||
if (isAllMandatoryPermissionGranted(permissionsManager).not() && PreferenceManager.getBooleanPreference(
|
||||
SKIP_PERMISSION_SCREEN,
|
||||
@@ -296,14 +301,14 @@ class NewDashboardActivity :
|
||||
): Fragment {
|
||||
return when (screen) {
|
||||
HomeFragment.TAG -> HomeFragment.newInstance(bundle)
|
||||
DashboardFragment.TAG -> getDashboardFragment(subType ?: bundle?.getString(SUB_REDIRECT), bundle)
|
||||
DashboardFragment.TAG -> getDashboardFragment(screen, subType ?: bundle?.getString(SUB_REDIRECT), bundle)
|
||||
ProfileFragment.TAG -> ProfileFragment.newInstance(bundle)
|
||||
FundListingFragmentV2.TAG -> InvestmentsFragment.newInstance(bundle)
|
||||
else -> HomeFragment.newInstance(bundle)
|
||||
}
|
||||
}
|
||||
|
||||
private fun getDashboardFragment(subType: String?, bundle: Bundle?): Fragment {
|
||||
private fun getDashboardFragment(screen: String, subType: String?, bundle: Bundle?): Fragment {
|
||||
if (bottomNavBarVM.isOldDashboardEnabled()) {
|
||||
return DashboardFragment.getInstance(bundle)
|
||||
}
|
||||
@@ -311,8 +316,11 @@ class NewDashboardActivity :
|
||||
ProductFragment.DashboardTypes.Loans.name ->
|
||||
LoanContainerFragment.getInstance()
|
||||
|
||||
ProductFragment.DashboardTypes.Insurance.name ->
|
||||
ProductFragment.getInstance(DashboardTab(subType))
|
||||
ProductFragment.DashboardTypes.Insurance.name -> handleInsuranceDashboardTab(screen, subType)
|
||||
|
||||
ProductFragment.DashboardTypes.Insurance_landing_page.name -> LandingPageInfoFragment().apply {
|
||||
arguments = bundle
|
||||
}
|
||||
|
||||
ProductFragment.DashboardTypes.Investment.name,
|
||||
FundListingFragmentV2.TAG -> InvestmentsFragment.newInstance(
|
||||
@@ -323,6 +331,15 @@ class NewDashboardActivity :
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleInsuranceDashboardTab(screen: String, subType: String): Fragment {
|
||||
//remove landing page fragment from stack if present
|
||||
val fragment = supportFragmentManager.findFragmentByTag(screen + ProductFragment.DashboardTypes.Insurance_landing_page.name)
|
||||
if(fragment != null) {
|
||||
supportFragmentManager.beginTransaction().remove(fragment).commit()
|
||||
}
|
||||
return ProductFragment.getInstance(DashboardTab(subType))
|
||||
}
|
||||
|
||||
private fun initAppUpdate() {
|
||||
if (FirebaseRemoteConfigHelper.getBoolean(FirebaseRemoteConfigHelper.IN_APP_UPDATE)) {
|
||||
inAppUpdateVM.init()
|
||||
@@ -617,6 +634,7 @@ class NewDashboardActivity :
|
||||
permissionGranted = isAllMandatoryPermissionGranted(this),
|
||||
installedModules = getInstalledDynamicModulesCommaSeparated()
|
||||
)
|
||||
bottomNavBarVM.fetchGiNavCta()
|
||||
}
|
||||
|
||||
private fun fetchOfferDialog() {
|
||||
@@ -938,14 +956,14 @@ class NewDashboardActivity :
|
||||
BottomBarTabType.INSURANCE -> {
|
||||
navigateToNextScreen(
|
||||
defaultFragment,
|
||||
null,
|
||||
ProductFragment.DashboardTypes.Insurance.name
|
||||
bottomNavBarVM.getInsuranceBundle(),
|
||||
bottomNavBarVM.getInsuranceSubType()
|
||||
)
|
||||
}
|
||||
|
||||
else -> {
|
||||
setStatusBarColor(R.color.white)
|
||||
navigateToNextScreen(defaultFragment, null)
|
||||
navigateToNextScreen(defaultFragment, null, null)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -813,7 +813,7 @@ class ProductFragment : PartPrePaymentBaseFragment(), WidgetCallback, DashboardP
|
||||
}
|
||||
|
||||
enum class DashboardTypes {
|
||||
Loans, Insurance, Investment
|
||||
Loans, Insurance, Investment, Insurance_landing_page
|
||||
}
|
||||
|
||||
override fun reload() {
|
||||
|
||||
@@ -15,6 +15,7 @@ import com.navi.naviwidgets.utils.APP_UPDATE_ENABLE
|
||||
import com.naviapp.home.dashboard.models.response.InvestmentsResponse
|
||||
import com.naviapp.home.model.BottomBarResponse
|
||||
import com.navi.common.model.common.WidgetResponse
|
||||
import com.navi.naviwidgets.models.response.CtaDetails
|
||||
import com.naviapp.network.di.SuperAppRetroFit
|
||||
import com.naviapp.network.retrofit.ResponseCallback
|
||||
import com.naviapp.network.retrofit.RetrofitService
|
||||
@@ -138,4 +139,8 @@ class GlobalRepo @Inject constructor(@SuperAppRetroFit private val superAppRetro
|
||||
TemporaryStorageHelper.isBottomNavApiInProgress = false
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun fetchGiNavCta(): RepoResult<CtaDetails> {
|
||||
return apiResponseCallback(superAppRetrofitService.fetchGiNavCta())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,10 +9,14 @@ package com.naviapp.home.viewmodel
|
||||
|
||||
import androidx.lifecycle.LiveData
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.navi.base.model.ActionData
|
||||
import com.navi.base.model.CtaData
|
||||
import com.navi.common.viewmodel.BaseVM
|
||||
import com.navi.common.model.common.LoanTabData
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.launch
|
||||
import javax.inject.Inject
|
||||
|
||||
@HiltViewModel
|
||||
|
||||
@@ -1697,6 +1697,11 @@ interface RetrofitService {
|
||||
@Header(HEADER_INSTALLED_MODULES) installedModules: String
|
||||
): Response<GenericResponse<BottomBarResponse>>
|
||||
|
||||
@GET("/widgets/sa/gi/nav-bar/cta")
|
||||
suspend fun fetchGiNavCta(
|
||||
@Header("X-Target") target: String = ModuleName.GI.name
|
||||
): Response<GenericResponse<CtaDetails>>
|
||||
|
||||
@GET("/requests/{requestId}")
|
||||
suspend fun fetchAsyncRPDData(
|
||||
@Path("requestId") requestId: String?
|
||||
|
||||
@@ -32,7 +32,6 @@ import com.navi.base.utils.isNotNullAndNotEmpty
|
||||
import com.navi.base.utils.orFalse
|
||||
import com.navi.chat.ui.activities.NaviChatActivity
|
||||
import com.navi.chat.utils.CHAT_PN_RECEIVED
|
||||
import com.navi.common.model.ModuleName
|
||||
import com.navi.common.model.PushNotificationData
|
||||
import com.navi.common.pushnotification.CustomNotificationHandler
|
||||
import com.navi.common.pushnotification.NotificationCancelBroadcastReceiver
|
||||
@@ -41,7 +40,6 @@ import com.navi.common.pushnotification.NotificationReceiverActivity
|
||||
import com.navi.common.repositories.FcmCallbackRepository
|
||||
import com.navi.common.utils.getSessionId
|
||||
import com.navi.common.utils.log
|
||||
import com.navi.insurance.notifications.GiNotificationHandler
|
||||
import com.naviapp.R
|
||||
import com.naviapp.common.navigator.NaviDeepLinkNavigator.CHAT_ACTIVITY
|
||||
import com.naviapp.pushnotification.NotificationHandler
|
||||
@@ -66,15 +64,7 @@ class NaviFirebaseMessagingService : FirebaseMessagingService() {
|
||||
super.onMessageReceived(remoteMessage)
|
||||
sendCallbackToBackend(remoteMessage)
|
||||
Timber.d("Notification received: $remoteMessage")
|
||||
when (remoteMessage.data[NotificationConstants.MODULE]) {
|
||||
ModuleName.GI.name -> {
|
||||
GiNotificationHandler.handlePushNotification(applicationContext, remoteMessage)
|
||||
}
|
||||
else -> {
|
||||
handleNotificationForSuperApp(remoteMessage)
|
||||
Timber.d("Notification received: ${remoteMessage.data}")
|
||||
}
|
||||
}
|
||||
handleNotificationForSuperApp(remoteMessage)
|
||||
}
|
||||
|
||||
private fun sendCallbackToBackend(remoteMessage: RemoteMessage) {
|
||||
|
||||
@@ -31,6 +31,7 @@ object TemporaryStorageHelper {
|
||||
var isBottomNavApiInProgress = false
|
||||
var isInvestmentPageApiInProgress = false
|
||||
var isPermissionSkipFlow = false
|
||||
var fetchGiNavCta = false
|
||||
|
||||
fun clear() {
|
||||
apiResponse.clear()
|
||||
|
||||
@@ -83,6 +83,7 @@ class LandingPageInfoFragment : GiBaseFragment(), WidgetCallback {
|
||||
private var shouldShowFooter = false
|
||||
private var naviPolicyDocumentDownloadManager: NaviPolicyDocumentDownloadManager? = null
|
||||
private val keyPreQuoteExists = "preQuoteExists"
|
||||
private var isLandingPageFromDashboard = false
|
||||
|
||||
@Inject
|
||||
lateinit var idProvider: IdProvider
|
||||
@@ -219,14 +220,14 @@ class LandingPageInfoFragment : GiBaseFragment(), WidgetCallback {
|
||||
startIndex: Int
|
||||
): Boolean {
|
||||
return if (landingPageVersion != LANDING_PAGE_V3_CODE) {
|
||||
recyclerHolder !is TitleWithBannerInfoWidgetVH
|
||||
recyclerHolder !is TitleWithBannerInfoWidgetVH && !isLandingPageFromDashboard
|
||||
} else {
|
||||
if (shouldShowFooterViaBanner(startIndex.orZero() - 1)) {
|
||||
shouldShowFooter = true
|
||||
} else if (shouldShowFooterViaBanner(startIndex)) {
|
||||
shouldShowFooter = false
|
||||
}
|
||||
shouldShowFooter
|
||||
shouldShowFooter && !isLandingPageFromDashboard
|
||||
}
|
||||
}
|
||||
|
||||
@@ -234,7 +235,7 @@ class LandingPageInfoFragment : GiBaseFragment(), WidgetCallback {
|
||||
return (isValidIndex(currIndex.orZero(), contentWidgetList?.size.orZero()) &&
|
||||
((contentWidgetList?.getOrNull(currIndex.orZero())) as? SingleImageWidget)
|
||||
?.singleImageWidgetBody
|
||||
?.actionOnHide == true)
|
||||
?.actionOnHide == true) && !isLandingPageFromDashboard
|
||||
}
|
||||
|
||||
override fun onAttach(context: Context) {
|
||||
@@ -242,6 +243,7 @@ class LandingPageInfoFragment : GiBaseFragment(), WidgetCallback {
|
||||
listener = context as? IntroActivityCallback
|
||||
source = arguments?.get("source") as? String ?: LANDING_PAGE
|
||||
tabId = arguments?.get(TAB_ID) as? String
|
||||
isLandingPageFromDashboard = arguments?.getString(LANDING_PAGE_TYPE) == HI_LP_FROM_DASHBOARD
|
||||
}
|
||||
|
||||
override fun getViewModel(): GiBaseVM = viewModel
|
||||
@@ -299,7 +301,11 @@ class LandingPageInfoFragment : GiBaseFragment(), WidgetCallback {
|
||||
landingPageRvAdapter?.setData(landingPageInfoViewState.data.content)
|
||||
}
|
||||
landingPageInfoViewState.data?.header?.getOrNull(0)?.widgetData?.run {
|
||||
updateContainer(this, binding.headerContainer)
|
||||
if(!isLandingPageFromDashboard) {
|
||||
updateContainer(this, binding.headerContainer)
|
||||
} else {
|
||||
binding.headerContainer.isVisible = false
|
||||
}
|
||||
}
|
||||
landingPageInfoViewState.data?.pageLayoutParams?.let { pageLayoutParams ->
|
||||
if (isValidHexColor(pageLayoutParams.pageBackgroundColor)) {
|
||||
@@ -482,6 +488,8 @@ class LandingPageInfoFragment : GiBaseFragment(), WidgetCallback {
|
||||
const val LANDING_PAGE_V3_CODE = 3
|
||||
const val LANDING_PAGE_VERSION_KEY = "landingPageVersion"
|
||||
const val LINE_TEXT_BOTTOM_SHEET = "LINE_TEXT_BOTTOM_SHEET"
|
||||
const val LANDING_PAGE_TYPE = "LANDING_PAGE_TYPE"
|
||||
const val HI_LP_FROM_DASHBOARD = "HI_LP_FROM_DASHBOARD"
|
||||
}
|
||||
|
||||
override val screenName: String
|
||||
|
||||
@@ -50,6 +50,7 @@ data class GiErrorMetaData(
|
||||
const val FLOW_RENEWAL = "renewal"
|
||||
const val FEEDBACK_FORM = "feedback_form"
|
||||
const val HI_QUIZ = "hi_quiz"
|
||||
const val FLOW_NAVBAR_INSURANCE = "navbar_insurance"
|
||||
const val FLOW_FREE_INSURANCE = "free_insurance"
|
||||
const val FLOW_AVAIL_BENEFIT = "avail_benefit"
|
||||
const val FLOW_INCENTIVISE_AUTOPAY = "incentivise_autopay"
|
||||
|
||||
@@ -90,7 +90,7 @@ class NewQuoteClaimsFragmentV2 : BaseFragment() {
|
||||
}
|
||||
|
||||
binding.title.header.addOnMultipleClicksHandler {
|
||||
parentFragmentManager.popBackStackImmediate()
|
||||
activity?.onBackPressed()
|
||||
}
|
||||
|
||||
arguments?.getParcelable<CtaData>(Constants.PARAMS_EXTRA)?.let { ctaData ->
|
||||
|
||||
@@ -9,19 +9,18 @@ package com.navi.insurance.health.viewmodel
|
||||
|
||||
import androidx.lifecycle.LiveData
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.google.gson.Gson
|
||||
import com.google.gson.reflect.TypeToken
|
||||
import com.navi.analytics.utils.NaviTrackEvent
|
||||
import com.navi.base.model.CtaData
|
||||
import com.navi.common.network.models.RepoResult
|
||||
import com.navi.common.utils.TemporaryStorageHelper
|
||||
import com.navi.insurance.GILibManager
|
||||
import com.navi.insurance.R
|
||||
import com.navi.insurance.analytics.InsuranceAnalyticsConstants
|
||||
import com.navi.insurance.common.GiBaseVM
|
||||
import com.navi.insurance.common.fragment.GiSurveyBottomSheet
|
||||
import com.navi.insurance.common.models.AbExperimentInfoData
|
||||
import com.navi.insurance.common.models.GiErrorMetaData
|
||||
import com.navi.insurance.common.util.ActionHandler
|
||||
import com.navi.insurance.health.repository.QuoteRepository
|
||||
import com.navi.insurance.models.UserLocation
|
||||
@@ -31,7 +30,6 @@ import com.navi.insurance.models.request.OfferRequest
|
||||
import com.navi.insurance.models.request.QuoteOfferUpdateRequest
|
||||
import com.navi.insurance.models.response.*
|
||||
import com.navi.insurance.network.ApiErrorTagType
|
||||
import com.navi.insurance.util.APPLICATION_TYPE_EXTRA
|
||||
import com.navi.insurance.util.Constants.QUOTE_HIGHLIGHT
|
||||
import com.navi.insurance.util.GIAbExperimentConstants.BOTTOM_SHEET_WITH_DISCOUNT_VARIANT
|
||||
import com.navi.insurance.util.GIAbExperimentConstants.KEY_PAYMENT_REVIEW_REMOVAL
|
||||
@@ -164,6 +162,7 @@ constructor(private val repository: QuoteRepository, actionHandler: ActionHandle
|
||||
repository.fetchQuoteCta(OfferRequest(preQuoteId = preQuoteId))
|
||||
|
||||
if (response.error == null && response.errors.isNullOrEmpty()) {
|
||||
TemporaryStorageHelper.fetchGiNavCta = true
|
||||
_quoteLauncherCta.value = response.data
|
||||
_preQuoteId.value = preQuoteId
|
||||
} else {
|
||||
|
||||
@@ -99,6 +99,7 @@ enum class ApiErrorTagType(val value: String) {
|
||||
LANDING_INFO_PAGE_LOAD_ERROR("LANDING_INFO_PAGE_LOAD_ERROR"),
|
||||
FREE_INSURANCE_LANDING_LOAD_ERROR("FREE_INSURANCE_LANDING_LOAD_ERROR"),
|
||||
FREE_INSURANCE_GENDER_SUBMIT_ERROR("FREE_INSURANCE_GENDER_SUBMIT_ERROR"),
|
||||
FETCH_GI_NAVBAR_CTA_ERROR("FETCH_GI_NAVBAR_CTA_ERROR"),
|
||||
HRA_FI_ACTIVATION_SCREEN_LOAD_ERROR("HRA_FI_ACTIVATION_SCREEN_LOAD_ERROR"),
|
||||
HRA_FI_ACTIVATION_RESULT_ERROR("HRA_FI_ACTIVATION_RESULT_ERROR"),
|
||||
FETCH_PAYMENT_REVIEW_DATA_ERROR("FETCH_PAYMENT_REVIEW_DATA_ERROR"),
|
||||
|
||||
@@ -1,64 +0,0 @@
|
||||
/*
|
||||
*
|
||||
* * Copyright © 2019-2023 by Navi Technologies Limited
|
||||
* * All rights reserved. Strictly confidential
|
||||
*
|
||||
*/
|
||||
|
||||
package com.navi.insurance.notifications
|
||||
|
||||
import android.app.NotificationManager
|
||||
import android.content.Context
|
||||
import com.google.firebase.messaging.RemoteMessage
|
||||
import com.navi.analytics.moengage.MoengageUtil
|
||||
import com.navi.base.utils.isNotNullAndNotEmpty
|
||||
import com.navi.common.pushnotification.CustomNotificationHandler
|
||||
import com.navi.common.pushnotification.NotificationConstants
|
||||
import com.navi.insurance.R
|
||||
import com.navi.insurance.notifications.MessageDataModel.ModelMapper.from
|
||||
|
||||
object GiNotificationHandler {
|
||||
fun handlePushNotification(context: Context, remoteMessage: RemoteMessage) {
|
||||
val gcmPayLoad: MutableMap<String, String> = remoteMessage.data
|
||||
val messageDataModel = from(remoteMessage.data)
|
||||
|
||||
if(gcmPayLoad[NotificationConstants.TEMPLATE_TYPE].isNotNullAndNotEmpty()) {
|
||||
gcmPayLoad.apply {
|
||||
put(NotificationConstants.LARGE_ICON, (R.drawable.notifiaction_icon_large).toString())
|
||||
put(NotificationConstants.SMALL_ICON, (R.drawable.ic_navi_logo_white).toString())
|
||||
}
|
||||
CustomNotificationHandler.handlePushNotification(context, remoteMessage.data)
|
||||
} else if(gcmPayLoad[NotificationConstants.SILENT_NOTIFICATION_TYPE] == NotificationConstants.CANCEL_PUSH_NOTIFICATION) {
|
||||
cancelPushNotification(context, gcmPayLoad)
|
||||
} else if (MoengageUtil.isFromMoEngagePlatform(gcmPayLoad) && !MoengageUtil.isSilentPush(gcmPayLoad)) {
|
||||
if (messageDataModel.handleViaDeepLink) {
|
||||
onPushNotificationReceived(messageDataModel, gcmPayLoad)
|
||||
} else {
|
||||
MoengageUtil.passPushPayload(context, gcmPayLoad)
|
||||
}
|
||||
} else if (!MoengageUtil.isFromMoEngagePlatform(gcmPayLoad)) {
|
||||
onPushNotificationReceived(messageDataModel, gcmPayLoad)
|
||||
}
|
||||
}
|
||||
|
||||
private fun onPushNotificationReceived(
|
||||
messageDataModel: MessageDataModel,
|
||||
payload: MutableMap<String, String>?
|
||||
) {
|
||||
val notification = Notification(
|
||||
messageDataModel,
|
||||
payload
|
||||
)
|
||||
notification.createNotification()
|
||||
}
|
||||
|
||||
private fun cancelPushNotification(context: Context, data: Map<String, String>) {
|
||||
val manager = context.getSystemService(Context.NOTIFICATION_SERVICE) as? NotificationManager
|
||||
val notificationId = try {
|
||||
data[NotificationConstants.NOTIFICATION_ID]?.toInt() ?: -1
|
||||
} catch (ignore: Exception) {
|
||||
-1
|
||||
}
|
||||
manager?.cancel(notificationId)
|
||||
}
|
||||
}
|
||||
@@ -7,7 +7,8 @@
|
||||
|
||||
<layout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools">
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
xmlns:shimmer="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<RelativeLayout
|
||||
android:id="@+id/landing_page_info_layout"
|
||||
@@ -18,9 +19,23 @@
|
||||
android:id="@+id/shimmer_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:visibility="gone">
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
shimmer:duration="@integer/integer_800">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<include
|
||||
layout="@layout/landing_page_shimmer_placeholder" />
|
||||
</LinearLayout>
|
||||
|
||||
<include layout="@layout/quote_shimmer_loading_placeholder" />
|
||||
</com.facebook.shimmer.ShimmerFrameLayout>
|
||||
|
||||
<FrameLayout
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!--
|
||||
~ /*
|
||||
~ *
|
||||
~ * * Copyright © 2022 by Navi Technologies Private Limited
|
||||
~ * * All rights reserved. Strictly confidential
|
||||
~ *
|
||||
~ */
|
||||
-->
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<View
|
||||
android:id="@+id/viewTitle"
|
||||
android:layout_width="@dimen/layout_dp_150"
|
||||
android:layout_height="@dimen/layout_dp_20"
|
||||
android:layout_marginStart="@dimen/layout_dp_16"
|
||||
android:layout_marginTop="@dimen/layout_dp_42"
|
||||
android:background="@drawable/bg_grey_8dp_radius"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<View
|
||||
android:id="@+id/viewContent1"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/dp_254"
|
||||
android:layout_marginStart="@dimen/layout_dp_16"
|
||||
android:layout_marginTop="@dimen/layout_dp_24"
|
||||
android:layout_marginEnd="@dimen/layout_dp_16"
|
||||
android:background="@drawable/bg_grey_8dp_radius"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/viewTitle" />
|
||||
|
||||
<View
|
||||
android:id="@+id/viewContent2"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/layout_dp_136"
|
||||
android:layout_marginStart="@dimen/layout_dp_16"
|
||||
android:layout_marginTop="@dimen/layout_dp_4"
|
||||
android:layout_marginEnd="@dimen/layout_dp_16"
|
||||
android:background="@drawable/bg_grey_8dp_radius"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/viewContent1" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
<com.google.android.material.card.MaterialCardView
|
||||
android:id="@+id/root_card"
|
||||
style="@style/Theme.MaterialComponents.Light"
|
||||
android:theme="@style/Theme.MaterialComponents.Light"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:cardCornerRadius="@dimen/dp_8"
|
||||
|
||||
Reference in New Issue
Block a user