diff --git a/android/app/src/main/java/com/naviapp/common/navigator/NaviDeepLinkNavigator.kt b/android/app/src/main/java/com/naviapp/common/navigator/NaviDeepLinkNavigator.kt index 11824401ea..fd6612d555 100644 --- a/android/app/src/main/java/com/naviapp/common/navigator/NaviDeepLinkNavigator.kt +++ b/android/app/src/main/java/com/naviapp/common/navigator/NaviDeepLinkNavigator.kt @@ -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? = 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( diff --git a/android/navi-chat/src/main/java/com/navi/chat/models/WebViewIntent.kt b/android/navi-chat/src/main/java/com/navi/chat/models/WebViewIntent.kt index 233b9124fc..7494df317d 100644 --- a/android/navi-chat/src/main/java/com/navi/chat/models/WebViewIntent.kt +++ b/android/navi-chat/src/main/java/com/navi/chat/models/WebViewIntent.kt @@ -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 ) diff --git a/android/navi-chat/src/main/java/com/navi/chat/ui/activities/CRMWebViewActivity.kt b/android/navi-chat/src/main/java/com/navi/chat/ui/activities/CRMWebViewActivity.kt index 740c349bdf..7beabaeeec 100644 --- a/android/navi-chat/src/main/java/com/navi/chat/ui/activities/CRMWebViewActivity.kt +++ b/android/navi-chat/src/main/java/com/navi/chat/ui/activities/CRMWebViewActivity.kt @@ -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 diff --git a/android/navi-chat/src/main/java/com/navi/chat/ui/activities/NaviHelpCenterActivity.kt b/android/navi-chat/src/main/java/com/navi/chat/ui/activities/NaviHelpCenterActivity.kt index 9a8191b8b5..943f26c877 100644 --- a/android/navi-chat/src/main/java/com/navi/chat/ui/activities/NaviHelpCenterActivity.kt +++ b/android/navi-chat/src/main/java/com/navi/chat/ui/activities/NaviHelpCenterActivity.kt @@ -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() diff --git a/android/navi-chat/src/main/java/com/navi/chat/ui/activities/NaviTicketViewActivity.kt b/android/navi-chat/src/main/java/com/navi/chat/ui/activities/NaviTicketViewActivity.kt index 5b72848eff..b2bff7a270 100644 --- a/android/navi-chat/src/main/java/com/navi/chat/ui/activities/NaviTicketViewActivity.kt +++ b/android/navi-chat/src/main/java/com/navi/chat/ui/activities/NaviTicketViewActivity.kt @@ -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, diff --git a/android/navi-chat/src/main/java/com/navi/chat/utils/ChatNavigator.kt b/android/navi-chat/src/main/java/com/navi/chat/utils/ChatNavigator.kt index 350b6ed328..c605e25675 100644 --- a/android/navi-chat/src/main/java/com/navi/chat/utils/ChatNavigator.kt +++ b/android/navi-chat/src/main/java/com/navi/chat/utils/ChatNavigator.kt @@ -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) } } diff --git a/android/navi-chat/src/main/java/com/navi/chat/utils/Constants.kt b/android/navi-chat/src/main/java/com/navi/chat/utils/Constants.kt index 3e2882892b..462dcd6b37 100644 --- a/android/navi-chat/src/main/java/com/navi/chat/utils/Constants.kt +++ b/android/navi-chat/src/main/java/com/navi/chat/utils/Constants.kt @@ -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" diff --git a/android/navi-chat/src/main/java/com/navi/chat/viewmodels/CRMWebSharedViewModel.kt b/android/navi-chat/src/main/java/com/navi/chat/viewmodels/CRMWebSharedViewModel.kt index d72a5afc76..b72e1a3b37 100644 --- a/android/navi-chat/src/main/java/com/navi/chat/viewmodels/CRMWebSharedViewModel.kt +++ b/android/navi-chat/src/main/java/com/navi/chat/viewmodels/CRMWebSharedViewModel.kt @@ -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() }