NTP-16964: Webview redirection for crm tickets (#13920)

This commit is contained in:
Raaj Gopal
2024-12-04 15:33:15 +05:30
committed by GitHub
parent 65e824dca2
commit 4e2c02529c
8 changed files with 82 additions and 30 deletions

View File

@@ -47,8 +47,9 @@ import com.navi.base.utils.replaceAngularBrackets
import com.navi.bbps.entry.NaviBbpsRouter
import com.navi.chat.models.NaviChatSystemLocalData
import com.navi.chat.ui.activities.NaviHelpCenterActivity
import com.navi.chat.ui.activities.NaviTicketViewActivity
import com.navi.chat.utils.ACTIVE_CHAT_CONV
import com.navi.chat.utils.CHAT_TOUCH_POINT_CLICKED
import com.navi.chat.utils.CONVERSATION_ID_PARAM
import com.navi.chat.utils.DEFAULT_SOURCE_ID_FOR_PL
import com.navi.chat.utils.NAVI_CHAT_SYSTEM_LOCAL_DATA
import com.navi.chat.utils.SOURCE
@@ -426,7 +427,7 @@ object NaviDeepLinkNavigator : DeepLinkListener {
intent = Intent(activity, NaviHelpCenterActivity::class.java)
}
ALL_TICKETS_V2 -> {
intent = Intent(activity, NaviTicketViewActivity::class.java)
intent = getCrmWebViewIntent(activity = activity, ctaUrl = ALL_TICKETS_V2)
}
PRODUCT_HELP_PAGE -> {
intent =
@@ -442,7 +443,8 @@ object NaviDeepLinkNavigator : DeepLinkListener {
var metaData: HashMap<String?, String?>? = null
var fetchHistoryByScreenName = true
var idempotencyKey: String? = null
var targetPlatform: String? = null
var fromActiveChatConv: String? = null
var conversationId: String? = null
if (ctaData.parameters.isNullOrEmpty()) {
bundle.getString(CHAT_BOT_SCREEN_NAME)?.let { keyValue ->
shareableLink = keyValue
@@ -477,8 +479,11 @@ object NaviDeepLinkNavigator : DeepLinkListener {
CHAT_IDEMPOTENCY_KEY -> {
idempotencyKey = keyValue.value.toString()
}
TARGET_PLATFORM -> {
targetPlatform = keyValue.value.toString()
ACTIVE_CHAT_CONV -> {
fromActiveChatConv = keyValue.value.toString()
}
CONVERSATION_ID_PARAM -> {
conversationId = keyValue.value.toString()
}
}
}
@@ -502,7 +507,8 @@ object NaviDeepLinkNavigator : DeepLinkListener {
getCrmWebViewIntent(
activity = activity,
ctaUrl = CHAT_ACTIVITY,
platform = targetPlatform
fromActiveChat = fromActiveChatConv,
conversationId = conversationId
)
bundle.putParcelable(NAVI_CHAT_SYSTEM_LOCAL_DATA, naviChatSystemLocalData)
NaviTrackEvent.trackEventOnClickStream(

View File

@@ -11,5 +11,7 @@ data class WebViewIntent(
val naviClickActionUrl: String?,
val configId: String?,
val orderId: String?,
val productType: String?
val productType: String?,
val fromActiveChat: Boolean? = false,
val conversationId: String? = null
)

View File

@@ -31,12 +31,15 @@ import com.navi.chat.R
import com.navi.chat.bridges.NaviChatWebBridge
import com.navi.chat.models.WebViewIntent
import com.navi.chat.network.retrofit.CRMWebViewClient
import com.navi.chat.utils.ACTIVE_CHAT_CONV
import com.navi.chat.utils.CHAT_BOT_SCREEN_NAME
import com.navi.chat.utils.CONVERSATION_ID_PARAM
import com.navi.chat.utils.CRM_WEB_VIEW_ACTIVITY
import com.navi.chat.utils.EXTERNAL_DEEPLINK_BASE_URL
import com.navi.chat.utils.NAVI_CLICK_ACTION_URL
import com.navi.chat.utils.NAVI_JAVA_SCRIPT
import com.navi.chat.utils.NaviChatAnalytics
import com.navi.chat.utils.NaviChatAnalytics.Companion.ALL_TICKETS_V2
import com.navi.chat.utils.NaviChatAnalytics.Companion.CRM_WEB_VIEW_LAND
import com.navi.chat.utils.NaviChatAnalytics.Companion.SOURCE_SCREEN
import com.navi.chat.utils.ORDER_ID
@@ -83,16 +86,25 @@ class CRMWebViewActivity : BaseActivity() {
?: intent.getStringExtra(SCREEN_NAME_CAPITAL)
?: intent.getStringExtra(CHAT_BOT_SCREEN_NAME)
val fromActiveChat = intent.getStringExtra(ACTIVE_CHAT_CONV)
val conversationId = intent.getStringExtra(CONVERSATION_ID_PARAM)
webViewIntent =
WebViewIntent(
naviClickActionUrl = intent.getStringExtra(NAVI_CLICK_ACTION_URL),
configId = configId,
orderId = intent.getStringExtra(ORDER_ID),
productType = intent.getStringExtra(PRODUCT_TYPE)
productType = intent.getStringExtra(PRODUCT_TYPE),
fromActiveChat = fromActiveChat.toBoolean(),
conversationId = conversationId
)
pathUrl = viewModel.buildPathUrl(webViewIntent)
if (pathUrl.isNullOrEmpty() || webViewIntent?.configId.isNullOrEmpty()) {
if (
pathUrl.isNullOrEmpty() ||
(webViewIntent?.naviClickActionUrl != ALL_TICKETS_V2 &&
webViewIntent?.configId.isNullOrEmpty())
) {
viewModel.showError.value = true
} else {
viewModel.showLoader.value = false

View File

@@ -20,6 +20,7 @@ import com.navi.base.model.NaviClickAction
import com.navi.chat.R
import com.navi.chat.databinding.ActivityHelpCenterBinding
import com.navi.chat.ui.activities.SupportScreenActivity.Companion.KEY_SCREEN_NAME
import com.navi.chat.utils.ACTIVE_CHAT_CONV
import com.navi.chat.utils.ANDROID
import com.navi.chat.utils.CONVERSATION_ID
import com.navi.chat.utils.CONVERSATION_ID_PARAM
@@ -173,6 +174,7 @@ class NaviHelpCenterActivity : BaseActivity(), HeaderInteractionListener, Widget
hashMapOf(CONVERSATION_ID to conversationId)
)
actionDataParams?.add(LineItem(TARGET_PLATFORM, ANDROID))
actionDataParams?.add(LineItem(ACTIVE_CHAT_CONV, true.toString()))
}
DeepLinkManager.getDeepLinkListener()

View File

@@ -19,6 +19,7 @@ import com.navi.base.sharedpref.PreferenceManager
import com.navi.chat.db.utils.crmEventTracker
import com.navi.chat.models.TicketDetailsData
import com.navi.chat.ui.compose.TicketScreen
import com.navi.chat.utils.ACTIVE_CHAT_CONV
import com.navi.chat.utils.ANDROID
import com.navi.chat.utils.CONVERSATION_ID
import com.navi.chat.utils.CONVERSATION_ID_PARAM
@@ -89,6 +90,8 @@ class NaviTicketViewActivity : BaseActivity() {
val actionDataParams = ticketDetailsData.actionData.parameters?.toMutableList()
actionDataParams?.add(LineItem(CONVERSATION_ID_PARAM, ticketDetailsData.conversationId))
actionDataParams?.add(LineItem(TARGET_PLATFORM, ANDROID))
actionDataParams?.add(LineItem(ACTIVE_CHAT_CONV, true.toString()))
DeepLinkManager.getDeepLinkListener()
?.navigateTo(
this@NaviTicketViewActivity,

View File

@@ -13,25 +13,24 @@ import android.os.Bundle
import com.navi.chat.ui.activities.CRMWebViewActivity
import com.navi.chat.ui.activities.NaviChatActivity
import com.navi.chat.ui.activities.NaviHelpCenterActivity
import com.navi.chat.ui.activities.NaviTicketViewActivity
import com.navi.chat.ui.activities.SupportScreenActivity
import com.navi.chat.utils.NaviChatAnalytics.Companion.ALL_TICKETS_V2
import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper
import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper.CRM_WEB_VIEW_ENABLED
fun getCrmWebViewIntent(activity: Activity?, ctaUrl: String, platform: String? = null): Intent {
if (platform == ANDROID) {
return when (ctaUrl) {
PRODUCT_HELP_PAGE -> Intent(activity, SupportScreenActivity::class.java)
CHAT_ACTIVITY -> Intent(activity, NaviChatActivity::class.java)
else -> Intent(activity, NaviHelpCenterActivity::class.java)
}
}
fun getCrmWebViewIntent(
activity: Activity?,
ctaUrl: String,
fromActiveChat: String? = null,
conversationId: String? = null
): Intent {
val targetActivity =
when {
FirebaseRemoteConfigHelper.getBoolean(CRM_WEB_VIEW_ENABLED, false) -> {
when (ctaUrl) {
PRODUCT_HELP_PAGE,
ALL_TICKETS_V2,
CHAT_ACTIVITY -> CRMWebViewActivity::class.java
else -> NaviHelpCenterActivity::class.java
}
@@ -40,14 +39,17 @@ fun getCrmWebViewIntent(activity: Activity?, ctaUrl: String, platform: String? =
when (ctaUrl) {
PRODUCT_HELP_PAGE -> SupportScreenActivity::class.java
CHAT_ACTIVITY -> NaviChatActivity::class.java
ALL_TICKETS_V2 -> NaviTicketViewActivity::class.java
else -> NaviHelpCenterActivity::class.java
}
}
}
return Intent(activity, targetActivity).apply {
if (ctaUrl == PRODUCT_HELP_PAGE || ctaUrl == CHAT_ACTIVITY) {
if (ctaUrl == PRODUCT_HELP_PAGE || ctaUrl == CHAT_ACTIVITY || ctaUrl == ALL_TICKETS_V2) {
putExtra(NAVI_CLICK_ACTION_URL, ctaUrl)
putExtra(ACTIVE_CHAT_CONV, fromActiveChat)
putExtra(CONVERSATION_ID_PARAM, conversationId)
}
}
}
@@ -60,6 +62,7 @@ fun navigateToCrm(activity: Activity?, bundle: Bundle?, path: String?) {
when (path) {
PRODUCT_HELP_PAGE -> Intent(activity, SupportScreenActivity::class.java)
CHAT_ACTIVITY -> Intent(activity, NaviChatActivity::class.java)
ALL_TICKETS_V2 -> Intent(activity, NaviTicketViewActivity::class.java)
else -> Intent(activity, NaviHelpCenterActivity::class.java)
}
}

View File

@@ -72,6 +72,7 @@ const val UPLOAD_FROM_GALLERY = "Upload from gallery"
const val FILE_TYPE_PARAM = "fileType"
const val CONVERSATION_ID_PARAM = "conversationId"
const val TARGET_PLATFORM = "targetPlatform"
const val ACTIVE_CHAT_CONV = "activeChatConversation"
const val ANDROID = "Android"
const val TYPING_CUES_PATH_AGENT = "agent"
const val TYPING_CUES_PATH_USER = "user"
@@ -140,6 +141,8 @@ const val CODE_VERIFIER = "codeVerifier"
const val CHAT_ACTIVITY = "chatInHouse"
const val PRODUCT_HELP_PAGE = "PRODUCT_HELP_PAGE"
const val HELP_PATH = "/help"
const val ISSUES_PATH = "/issues"
const val CHAT_PATH = "/chat"
const val AUTOLOGIN_PATH = "/autologin"
const val CUSTOMER_SUPPORT_PATH = "/customer-support"
const val NAVI_CLICK_ACTION_URL = "NAVI_CLICK_ACTION_URL"

View File

@@ -23,8 +23,10 @@ import com.navi.chat.utils.AMPERSAND
import com.navi.chat.utils.APPLICANT_TYPE
import com.navi.chat.utils.APPLICATION_TYPE
import com.navi.chat.utils.AUTOLOGIN_PATH
import com.navi.chat.utils.CHAT_PATH
import com.navi.chat.utils.CODE_VERIFIER
import com.navi.chat.utils.CONTINUE
import com.navi.chat.utils.CONVERSATION_ID_PARAM
import com.navi.chat.utils.CRM_WEB_APPLICANT_TYPE
import com.navi.chat.utils.CRM_WEB_APPLICATION_TYPE
import com.navi.chat.utils.CRM_WEB_PLATFORM_TYPE
@@ -33,8 +35,11 @@ import com.navi.chat.utils.CRM_WEB_VIEW_URL_PARAM_CONTINUE
import com.navi.chat.utils.CUSTOMER
import com.navi.chat.utils.CUSTOMER_SUPPORT_PATH
import com.navi.chat.utils.EQUALS
import com.navi.chat.utils.FORWARD_SLASH
import com.navi.chat.utils.HELP_PATH
import com.navi.chat.utils.ISSUES_PATH
import com.navi.chat.utils.IS_LANDING_ROUTE_TRUE
import com.navi.chat.utils.NaviChatAnalytics.Companion.ALL_TICKETS_V2
import com.navi.chat.utils.ORDER_ID
import com.navi.chat.utils.PATH_PARAM_SCREEN_NAME
import com.navi.chat.utils.PLATFORM_TYPE
@@ -156,18 +161,35 @@ constructor(
webViewIntent.configId.isNullOrEmpty() ||
webViewIntent.naviClickActionUrl.isNullOrEmpty()
) {
_showError.postValue(true)
return EMPTY
if (webViewIntent != null && webViewIntent.naviClickActionUrl == ALL_TICKETS_V2) {
_showError.postValue(false)
} else {
_showError.postValue(true)
return EMPTY
}
}
_showError.postValue(false)
val pathUrl = StringBuilder().append(HELP_PATH)
val pathUrl =
if (webViewIntent.fromActiveChat == true && webViewIntent.configId != null)
StringBuilder()
.append(CHAT_PATH)
.append(FORWARD_SLASH)
.append(webViewIntent.configId)
else if (webViewIntent.naviClickActionUrl == ALL_TICKETS_V2)
StringBuilder().append(ISSUES_PATH)
else StringBuilder().append(HELP_PATH)
pathUrl
.append(QUESTION_MARK)
.append(PATH_PARAM_SCREEN_NAME)
.append(EQUALS)
.append(webViewIntent.configId)
pathUrl.append(QUESTION_MARK).append(IS_LANDING_ROUTE_TRUE)
webViewIntent.configId?.let {
if (webViewIntent.fromActiveChat != true) {
pathUrl.append(AMPERSAND).append(PATH_PARAM_SCREEN_NAME).append(EQUALS).append(it)
}
}
webViewIntent.conversationId?.let {
pathUrl.append(AMPERSAND).append(CONVERSATION_ID_PARAM).append(EQUALS).append(it)
}
webViewIntent.orderId?.let {
pathUrl.append(AMPERSAND).append(ORDER_ID).append(EQUALS).append(it)
@@ -175,7 +197,6 @@ constructor(
webViewIntent.productType?.let {
pathUrl.append(AMPERSAND).append(PRODUCT).append(EQUALS).append(it)
}
pathUrl.append(AMPERSAND).append(IS_LANDING_ROUTE_TRUE)
return pathUrl.toString()
}