NTP-63568 | NaviLink support for CRM WebView (#16680)
This commit is contained in:
committed by
GitHub
parent
f5e3603314
commit
83abfe5e8b
@@ -31,13 +31,13 @@ import com.navi.base.utils.isNotNull
|
||||
import com.navi.base.utils.orFalse
|
||||
import com.navi.common.uitron.model.action.CtaAction
|
||||
import com.navi.common.utils.Constants.ADVERSE
|
||||
import com.navi.common.utils.Constants.NAVILINK
|
||||
import com.navi.common.utils.Constants.PAGE_LAUNCH_SOURCE
|
||||
import com.navi.common.utils.getSessionId
|
||||
import com.navi.common.utils.registerUiTronDeSerializers
|
||||
import com.navi.uitron.model.action.AnalyticsAction
|
||||
import com.navi.uitron.model.data.UiTronAction
|
||||
import com.naviapp.deeplinkmanagement.ui.DeeplinkManagementActivity
|
||||
import com.naviapp.utils.Constants.NAVILINK
|
||||
import com.naviapp.utils.Constants.NAVILINK_SMALL
|
||||
import retrofit2.Response
|
||||
|
||||
|
||||
@@ -17,7 +17,9 @@ import com.navi.base.utils.BaseUtils
|
||||
import com.navi.base.utils.isNotNull
|
||||
import com.navi.base.utils.isNotNullAndNotEmpty
|
||||
import com.navi.base.utils.orFalse
|
||||
import com.navi.base.utils.orTrue
|
||||
import com.navi.common.constants.DEVICE_ID
|
||||
import com.navi.common.extensions.or
|
||||
import com.navi.common.utils.Constants
|
||||
import com.navi.common.utils.Constants.CHANNEL
|
||||
import com.navi.common.utils.Constants.EVENT_NAME
|
||||
@@ -26,6 +28,7 @@ import com.navi.common.utils.Constants.REWARDS_EXPERIMENT_NAME
|
||||
import com.navi.common.utils.Constants.REWARD_CAMPAIGN_NAME
|
||||
import com.navi.common.utils.Constants.SECONDARY_URL
|
||||
import com.navi.common.utils.Constants.TYPE
|
||||
import com.navi.common.utils.isValidResponse
|
||||
import com.navi.common.utils.log
|
||||
import com.navi.pay.utils.NAVI_PAY_CTA_URL_PREFIX
|
||||
import com.navi.pay.utils.NAVI_PAY_OF_TYPE_INTENT_TRANSACTION
|
||||
@@ -56,6 +59,7 @@ import io.branch.referral.Branch
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
import org.json.JSONObject
|
||||
|
||||
class DeeplinkManager(
|
||||
@@ -71,7 +75,6 @@ class DeeplinkManager(
|
||||
private const val META_DATA = "metadata"
|
||||
|
||||
private const val IS_UPI_DYNAMIC_DEEP_LINK = "isUpiDynamicDeeplink"
|
||||
private const val NAVI_PAY_HOME_PAGE_URL = "naviPayHomePageUrl"
|
||||
const val DEEPLINK_TYPE = "deeplinkType"
|
||||
const val DEEPLINK_MANAGER = "DeeplinkManager"
|
||||
const val NAVILINK_IDENTIFIER = "naviLinkIdentifier"
|
||||
@@ -504,6 +507,32 @@ class DeeplinkManager(
|
||||
}
|
||||
}
|
||||
|
||||
fun processNaviLink(activity: Activity, naviLink: String, finish: Boolean? = true) {
|
||||
CoroutineScope(Dispatchers.IO).launch {
|
||||
val naviLinkIdentifier = naviLink.substringAfter("/", "")
|
||||
naviAnalytics.sendNaviLinkDeeplinkEvent(naviLinkIdentifier)
|
||||
val response = DeeplinkRepository().fetchNaviLinkData(naviLinkIdentifier)
|
||||
if (response.isValidResponse()) {
|
||||
withContext(Dispatchers.Main) {
|
||||
naviAnalytics.sendNaviLinkSuccessEvent(
|
||||
response.data?.nextCta,
|
||||
wasUserLoggedIn = true,
|
||||
)
|
||||
navigateTo(
|
||||
ctaData = response.data?.nextCta ?: CtaData(url = HOME_SMALL),
|
||||
bundle = response.data?.nextCta?.bundle ?: Bundle(),
|
||||
activity = activity,
|
||||
finish = finish.orTrue(),
|
||||
)
|
||||
}
|
||||
} else {
|
||||
naviAnalytics.sendNaviLinkFailureEvent(
|
||||
response.error?.message.or(response.errors?.firstOrNull()?.message)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun sendEvent(originalLink: String?) {
|
||||
naviAnalytics.sendSplashEvent(originalLink)
|
||||
}
|
||||
|
||||
@@ -565,13 +565,6 @@ class NaviAnalytics private constructor() {
|
||||
NaviTrackEvent.trackEvent("jusPayAdditionalTracking_$log")
|
||||
}
|
||||
|
||||
fun onNaviPayRequestCodeReceived(actionString: String?) {
|
||||
NaviTrackEvent.trackEvent(
|
||||
"onNaviPayRequestCodeReceived",
|
||||
mapOf("actionString" to actionString.toString()),
|
||||
)
|
||||
}
|
||||
|
||||
fun trackEvent(eventName: String, screenName: String? = null) {
|
||||
NaviTrackEvent.trackEvent(
|
||||
eventName,
|
||||
@@ -616,16 +609,6 @@ class NaviAnalytics private constructor() {
|
||||
}
|
||||
}
|
||||
|
||||
inner class PaymentTransaction {
|
||||
fun onEmiPaymentsClick() {
|
||||
NaviTrackEvent.trackEvent(HL_TRANCHE_EMI_PAYMENTS_TAB_CLICK)
|
||||
}
|
||||
|
||||
fun onEmiDisbursalClick() {
|
||||
NaviTrackEvent.trackEvent(HL_TRANCHE_EMI_DISBURSALS_TAB_CLICK)
|
||||
}
|
||||
}
|
||||
|
||||
inner class PartPrePayment {
|
||||
fun onPageLaunch(widgetId: String?) {
|
||||
if (widgetId == com.navi.common.utils.Constants.HOME_LOAN) {
|
||||
@@ -733,18 +716,6 @@ class NaviAnalytics private constructor() {
|
||||
mapOf(Pair("type", type.lowercase(Locale.ENGLISH))),
|
||||
)
|
||||
|
||||
fun paymentProviderSuccess(type: String) =
|
||||
NaviTrackEvent.trackEvent(
|
||||
"payment_provider_success",
|
||||
mapOf(Pair("type", type.lowercase(Locale.ENGLISH))),
|
||||
)
|
||||
|
||||
fun paymentProviderFailure(type: String) =
|
||||
NaviTrackEvent.trackEvent(
|
||||
"payment_provider_failure",
|
||||
mapOf(Pair("type", type.lowercase(Locale.ENGLISH))),
|
||||
)
|
||||
|
||||
fun onPaymentButtonTap() = NaviTrackEvent.trackEvent("payment_button_tap")
|
||||
|
||||
fun onPaymentSDKInitializationFailed(provider: String, description: String) =
|
||||
@@ -757,15 +728,6 @@ class NaviAnalytics private constructor() {
|
||||
),
|
||||
)
|
||||
|
||||
fun onPlPaymentTokenRecieved(isValidToken: Boolean) =
|
||||
NaviTrackEvent.trackEvent(
|
||||
eventName = "pl_payment_token_received",
|
||||
mapOf(
|
||||
Pair("sync", "true"),
|
||||
Pair(PaymentAnalytics.IS_TOKEN_VALID, isValidToken.toString()),
|
||||
),
|
||||
)
|
||||
|
||||
fun onPlPaymentInitiatePaymentCalled(loanType: String?) =
|
||||
NaviTrackEvent.trackEvent(
|
||||
eventName = "pl_initiate_payment_called",
|
||||
@@ -970,6 +932,13 @@ class NaviAnalytics private constructor() {
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
fun sendNaviLinkFailureEvent(errorMessage: String? = null) {
|
||||
NaviTrackEvent.trackEventOnClickStream(
|
||||
"NaviLink_Deeplink_Failure_Event",
|
||||
mapOf(Pair("errorMessage", errorMessage.orEmpty())),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
inner class TopUpLoanIntro(val screenName: String? = null) {
|
||||
@@ -1251,8 +1220,6 @@ class NaviAnalytics private constructor() {
|
||||
const val SPLASH = "splash"
|
||||
const val PHONE_NUMBER = "phone_number"
|
||||
const val OTP_NUMBER = "otp_screen"
|
||||
const val KYC = "kyc"
|
||||
const val BANK_DETAILS = "bank_details"
|
||||
const val HOME = "home"
|
||||
const val NEW_HOME = "NaviApp_HomePage_Lands"
|
||||
const val IS_GPS_ENABLED = "is_gps_enabled"
|
||||
@@ -1269,7 +1236,6 @@ class NaviAnalytics private constructor() {
|
||||
const val PROFILE_SCREEN = "profile_screen"
|
||||
const val NEW_USER_EXPERIENCE_ACTIVITY = "new_user_experience_activity"
|
||||
const val NAVI_DEEPLINK_MANAGEMENT_ACTIVITY = "NaviDeeplinkManagementActivityLanded"
|
||||
const val LOAN_DETAILS = "loan_details"
|
||||
const val CUSTOMER_SUPPORT = "customer_support"
|
||||
const val ABOUT_US = "about_us"
|
||||
const val REGISTRATION = "registration"
|
||||
@@ -1277,12 +1243,9 @@ class NaviAnalytics private constructor() {
|
||||
|
||||
const val TRUE = "true"
|
||||
const val FALSE = "false"
|
||||
const val NO = "no"
|
||||
const val INSTALLMENT = "installment"
|
||||
const val AUTO_PAY = "autopay"
|
||||
|
||||
const val CURRENCY = "INR"
|
||||
|
||||
private const val BOTTOM_SHEET = "bottom_sheet"
|
||||
const val CSAT_BOTTOM_SHEET = "csat_$BOTTOM_SHEET"
|
||||
|
||||
@@ -1291,10 +1254,7 @@ class NaviAnalytics private constructor() {
|
||||
const val CUSTOM_PAYMENT_TYPE_SCREEN = "custom_payment_type_screen"
|
||||
const val LOAN_REPAYMENT_TYPE_SCREEN = "loan_repayment_type_screen"
|
||||
const val CUSTOM_PAYMENT_SCREEN = "custom_payment_screen"
|
||||
const val PART_PRE_PAYMENT_TYPE_SCREEN = "part_pre_payment_type_screen"
|
||||
const val PART_PRE_PAYMENT_SCREEN = "part_pre_payment_screen"
|
||||
const val PART_PRE_PAYMENT_CUSTOM_AMOUNT_SCREEN = "part_pre_payment_custom_amount_screen"
|
||||
const val PART_PRE_PAYMENT_EMI_CALENDAR_SCREEN = "part_pre_payment_emi_calendar_screen"
|
||||
const val UPFRONT_PAYMENT_SCREEN = "upfront_payment_screen"
|
||||
const val PAYMENT_SCREEN = "payment_screen"
|
||||
const val COMMON_BOTTOM_SHEET = "common_bottom_sheet"
|
||||
@@ -1313,8 +1273,6 @@ class NaviAnalytics private constructor() {
|
||||
const val PL_PAY_CUSTOM_AMOUNT_PAY_NOW_FLOW = "pay_custom_amount_pay_now"
|
||||
const val PL_DETAILS_FORECLOSE_PAY_CLICK = "PL_forecloseLoan_CTA_Pay_click"
|
||||
const val PL_FORECLOSE_PAY_CLICK = "PL_foreclose_pay_click"
|
||||
const val HL_TRANCHE_EMI_PAYMENTS_TAB_CLICK = "HL_tranche_txns_my_payments_tab_click"
|
||||
const val HL_TRANCHE_EMI_DISBURSALS_TAB_CLICK = "HL_tranche_txns_disbsl_by_navi_tab_click"
|
||||
const val HL_PPP_PAGE_LAUNCH = "HL_ppp_page_lands"
|
||||
const val PL_PPP_PAGE_LAUNCH = "PL_ppp_page_lands"
|
||||
const val HL_PPP_PAY_CLICK = "HL_ppp_CTA_pay_click"
|
||||
@@ -1333,12 +1291,9 @@ class NaviAnalytics private constructor() {
|
||||
const val METHOD_NAME = "method_name"
|
||||
const val LINE_NUMBER = "line_number"
|
||||
const val ANR_MESSAGE = "anr_message"
|
||||
const val ANR_STACK_TRACE = "anr_stack_trace"
|
||||
const val VERTICAL = "vertical"
|
||||
const val FOREGROUND_SCREEN = "foregroundScreen"
|
||||
const val ALFRED_SESSION_ID = "alfredSessionId"
|
||||
const val CUSTOM_DNS_ENABLED = "customDnsV2Enabled"
|
||||
const val NETWORK_CONNECTIVITY_INTERCEPTOR_ENABLED = "networkConnectivityInterceptorEnabled"
|
||||
const val FOREGROUND_VERTICAL = "foregroundVertical"
|
||||
const val EXTERNAL = "EXTERNAL"
|
||||
const val TRACE_SIZE = "trace_size"
|
||||
@@ -1363,8 +1318,6 @@ class NaviAnalytics private constructor() {
|
||||
|
||||
const val PL_LOAN_REPAYMENT_BOTTOMSHEET_POPUP = "pl_post_more_options_bottomsheet_popup"
|
||||
|
||||
const val CUSTOM_AMOUNT_CALENDAR_REVIEW_SCREEN = "custom_amount_calendar_review_screen"
|
||||
|
||||
const val LOGIN_FLAG = "login_flag"
|
||||
|
||||
const val POLICY_GRID_BOTTOMSHEET = "policy_grid_bottomsheet"
|
||||
@@ -1377,15 +1330,12 @@ class NaviAnalytics private constructor() {
|
||||
|
||||
const val ELIGIBLE_FOR_BALANCE_TRANSFER = "Eligible for balance transfer"
|
||||
const val COLENDING_BALANCE_TRANSFER_EVENT = "coLendingBalanceTransferEvent"
|
||||
const val PL_FORECLOSE_PRE_APPROVED_VIEW = "PL_foreclose_preapproved_view"
|
||||
|
||||
const val AMC_BTN_DASHBOARD_INVEST_NOW = "amc_btn_dashboard_invest_now"
|
||||
|
||||
const val PAYMENT_BEHAVIOUR_ACTIVITY = "payment_behaviour_activity"
|
||||
const val PAYMENT_BEHAVIOUR_SCREEN = "payment_behaviour_screen"
|
||||
|
||||
const val DISBURSEMENT_PAGE_LAND = "disbursementsPageLand"
|
||||
|
||||
const val REASON_PAYMENT_REQUEST_OBJ_NULL = "Payment request object is null"
|
||||
const val ACTIVITY_REF_NULL = "Activity reference is null"
|
||||
const val PAYMENT_PROVIDER_NULL = "Payment provider is null"
|
||||
|
||||
@@ -942,6 +942,10 @@ object NaviDeepLinkNavigator : DeepLinkListener {
|
||||
DeeplinkManager().fetchBranchSDKData(activity, deeplink, clearTask, finish)
|
||||
}
|
||||
|
||||
override fun processNaviLink(activity: Activity, naviLink: String, finish: Boolean?) {
|
||||
DeeplinkManager().processNaviLink(activity = activity, naviLink = naviLink, finish = finish)
|
||||
}
|
||||
|
||||
private fun getBottomSheet(url: String?): Pair<String, BottomSheetDialogFragment>? {
|
||||
return when (url) {
|
||||
BOTTOM_SHEET_R11_PAYMENT -> Pair(R11PaymentBottomSheet.TAG, R11PaymentBottomSheet())
|
||||
|
||||
@@ -16,6 +16,7 @@ import com.navi.base.utils.BaseUtils
|
||||
import com.navi.chat.utils.CHAT_PN_OPENED
|
||||
import com.navi.chat.utils.HOME_SCREEN
|
||||
import com.navi.chat.utils.SCREEN_NAME
|
||||
import com.navi.common.utils.Constants.NAVILINK
|
||||
import com.naviapp.analytics.deeplink.DeeplinkType
|
||||
import com.naviapp.common.navigator.NaviDeepLinkNavigator
|
||||
import com.naviapp.deeplinkmanagement.analytics.NaviDeeplinkAnalytics
|
||||
@@ -23,7 +24,6 @@ import com.naviapp.models.DeeplinkData
|
||||
import com.naviapp.registration.helper.getChatParams
|
||||
import com.naviapp.registration.helper.isNotificationAlive
|
||||
import com.naviapp.utils.Constants
|
||||
import com.naviapp.utils.Constants.NAVILINK
|
||||
import com.naviapp.utils.isPublicPage
|
||||
import kotlin.reflect.KFunction1
|
||||
|
||||
|
||||
@@ -34,7 +34,6 @@ object Constants {
|
||||
const val HOME_LOAN = "home"
|
||||
const val PERSONAL_LOAN = "personal"
|
||||
const val MESSAGE_ID = "messageId"
|
||||
const val NAVILINK = "NAVILINK"
|
||||
const val NAVILINK_SMALL = "navilink"
|
||||
const val BRANCH = "branch"
|
||||
const val DEEPLINK = "deeplink"
|
||||
@@ -49,8 +48,6 @@ object Constants {
|
||||
const val INPUT_TEXT_MAX_LENGTH = 50
|
||||
const val TYPE_PERSONAL_LOAN = "PERSONAL_LOAN"
|
||||
const val IS_COMING_FROM_INREVIEW_PAGE = "is_coming_from_inreview_page"
|
||||
const val PREVIOUS_SCREEN = "PREVIOUS_SCREEN"
|
||||
const val LOAN_CLOSED = "Loan_Closed"
|
||||
const val SUCCESS = "Success"
|
||||
const val DATE_FORMAT_MONTH_YEAR = "MM/yyyy"
|
||||
const val ZERO = "0"
|
||||
@@ -75,7 +72,6 @@ object Constants {
|
||||
const val DELIVERED = "DELIVERED"
|
||||
const val NOTIFICATION_PERMISSION_DENIED = "NOTIFICATION_PERMISSION_DENIED"
|
||||
const val HOME_FEATURE = "PPE"
|
||||
const val ANR_NAVI_REGEX = "com.navi"
|
||||
const val SUCCESS_CAPITAL = "SUCCESS"
|
||||
const val FAILED = "FAILED"
|
||||
const val TEMPLATE_NAME = "templateName"
|
||||
@@ -166,7 +162,6 @@ object Constants {
|
||||
const val SHOW_LOW_UPI_LITE_BALANCE = "show_low_upi_lite_balance"
|
||||
const val HIDE = "hide"
|
||||
const val JOURNEY_SOURCE = "JOURNEY_SOURCE"
|
||||
const val ALFRED_MODULE = "Alfred"
|
||||
const val PAGE_HOME = "home"
|
||||
const val HOME_SCREEN_IN_CAPS = "HOME_SCREEN"
|
||||
const val PUSH_NOTIFICATION = "PUSH_NOTIFICATION"
|
||||
|
||||
@@ -29,4 +29,14 @@ interface DeepLinkListener {
|
||||
clearTask: Boolean?,
|
||||
finish: Boolean?,
|
||||
)
|
||||
|
||||
/**
|
||||
* This is a generic method that should be used to process NaviLink from any activity/module.
|
||||
*
|
||||
* @param activity: The activity from which the link is being processed.
|
||||
* @param naviLink: The Navi link to be processed. Example: "NAVILINK/NAVIQA_xyz"
|
||||
* @param finish: Optional parameter to indicate whether to finish the activity after processing
|
||||
* the link.
|
||||
*/
|
||||
fun processNaviLink(activity: Activity, naviLink: String, finish: Boolean? = true)
|
||||
}
|
||||
|
||||
@@ -59,6 +59,7 @@ import com.navi.common.model.ModuleNameV2
|
||||
import com.navi.common.network.models.GenericErrorResponse
|
||||
import com.navi.common.ui.activity.BaseActivity
|
||||
import com.navi.common.utils.Constants
|
||||
import com.navi.common.utils.Constants.NAVILINK
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
|
||||
@AndroidEntryPoint
|
||||
@@ -211,6 +212,13 @@ class CRMWebViewActivity : BaseActivity() {
|
||||
finish = ctaData.finish.orFalse(),
|
||||
clearTask = ctaData.clearTask.orFalse(),
|
||||
)
|
||||
} else if (it.startsWith(NAVILINK)) {
|
||||
DeepLinkManager.getDeepLinkListener()
|
||||
?.processNaviLink(
|
||||
activity = activity,
|
||||
naviLink = it,
|
||||
finish = ctaData.finish.orFalse(),
|
||||
)
|
||||
} else {
|
||||
DeepLinkManager.getDeepLinkListener()
|
||||
?.navigateTo(
|
||||
|
||||
@@ -81,6 +81,7 @@ object Constants {
|
||||
const val UTM_SOURCE = "utm_source"
|
||||
const val UTM_MEDIUM = "utm_medium"
|
||||
const val LINK_CLICK_ID = "link_click_id"
|
||||
const val NAVILINK = "NAVILINK"
|
||||
|
||||
const val SECONDARY_URL = "secondaryUrl"
|
||||
const val DATA = "data"
|
||||
|
||||
Reference in New Issue
Block a user