NTP-47660: CRM Web Redirection | Global help centre migration (#15832)
Co-authored-by: Sayed Owais Ali <sayed.owais@navi.com> Co-authored-by: Kishan Kumar <kishan.kumar@navi.com>
This commit is contained in:
@@ -139,6 +139,7 @@ import com.naviapp.utils.NaviDownloadManager
|
||||
import com.naviapp.utils.deleteCacheAndOpenLoginPage
|
||||
import com.naviapp.utils.openPlayStore
|
||||
import com.naviapp.utils.openWhatsAppChatConversation
|
||||
import com.naviapp.webredirection.presentation.utils.BUSINESS_UNIT
|
||||
import com.naviapp.webredirection.presentation.utils.WEB_PLATFORM_IDENTIFIER
|
||||
import com.naviapp.webredirection.presentation.utils.WEB_REDIRECTION_SUBTITLE
|
||||
import com.naviapp.webredirection.presentation.utils.WEB_REDIRECTION_TITLE
|
||||
@@ -742,7 +743,10 @@ object NaviDeepLinkNavigator : DeepLinkListener {
|
||||
ctaData.parameters
|
||||
?.firstOrNull { it.key == WEB_PLATFORM_IDENTIFIER }
|
||||
?.value
|
||||
intent = getWebRedirectionIntent(activity, webPlatformIdentifier)
|
||||
val businessUnit =
|
||||
ctaData.parameters?.firstOrNull { it.key == BUSINESS_UNIT }?.value
|
||||
intent =
|
||||
getWebRedirectionIntent(activity, webPlatformIdentifier, businessUnit)
|
||||
}
|
||||
CREDIT_CARD_DETAILS -> {
|
||||
intent = Intent(activity, CreditCardAdDetailsActivity::class.java)
|
||||
|
||||
@@ -28,6 +28,7 @@ const val WEB_REDIRECTION_DELAY_IN_MILLIS = "webRedirectionDelayInMillis"
|
||||
const val TIME_TAKEN = "timeTaken"
|
||||
const val DATA_PROCESSED = "dataProcessed"
|
||||
const val BUSINESS_UNIT = "businessUnit"
|
||||
const val CRM_BUSINESS_UNIT = "CRM"
|
||||
const val WEB_REDIRECTION_FIRST_LAUNCH_TIMESTAMP = "web_redirection_first_launch_timestamp"
|
||||
const val WEB_REDIRECTION_FIRST_LAUNCH = "redirection_to_web_first_launch"
|
||||
const val WEB_REDIRECTION_SUBSEQUENT_LAUNCH = "redirection_to_web_subsequent_launch"
|
||||
|
||||
@@ -12,6 +12,7 @@ import android.content.Intent
|
||||
import com.navi.analytics.utils.NaviTrackEvent
|
||||
import com.navi.base.sharedpref.PreferenceManager
|
||||
import com.navi.base.utils.orFalse
|
||||
import com.navi.chat.ui.activities.CRMWebViewActivity
|
||||
import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper
|
||||
import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper.WEB_REDIRECTION_DEFAULT_DELAY_IN_MILLIS
|
||||
import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper.WEB_REDIRECTION_SMS_UPLOADED_DELAY_IN_MILLIS
|
||||
@@ -60,11 +61,21 @@ fun calculateRedirectDelayForSmsUpload(
|
||||
}
|
||||
}
|
||||
|
||||
fun getWebRedirectionIntent(sourceActivity: Activity?, identifier: String? = null): Intent {
|
||||
fun getWebRedirectionIntent(
|
||||
sourceActivity: Activity?,
|
||||
identifier: String? = null,
|
||||
businessUnit: String? = null,
|
||||
): Intent {
|
||||
if (sourceActivity == null) return Intent()
|
||||
|
||||
if (identifier == null) {
|
||||
return Intent(sourceActivity, WebRedirectionActivity::class.java)
|
||||
return when (businessUnit) {
|
||||
CRM_BUSINESS_UNIT -> {
|
||||
Intent(sourceActivity, CRMWebViewActivity::class.java)
|
||||
}
|
||||
else -> {
|
||||
Intent(sourceActivity, WebRedirectionActivity::class.java)
|
||||
}
|
||||
}
|
||||
}
|
||||
NaviTrackEvent.trackEvent(
|
||||
eventName = WEB_TAB_REDIRECTION_INTENT,
|
||||
|
||||
@@ -56,6 +56,7 @@
|
||||
<activity
|
||||
android:name=".ui.activities.CRMWebViewActivity"
|
||||
android:exported="false"
|
||||
android:launchMode="singleTop"
|
||||
android:hardwareAccelerated="true"
|
||||
android:screenOrientation="portrait"
|
||||
android:theme="@style/BaseThemeStyle" />
|
||||
|
||||
@@ -14,5 +14,9 @@ data class WebViewIntent(
|
||||
val productType: String?,
|
||||
val fromActiveChat: Boolean? = false,
|
||||
val conversationId: String? = null,
|
||||
val webBaseUrl: String? = null,
|
||||
val webBasePath: String? = null,
|
||||
val continueUrl: String? = null,
|
||||
val continuePath: String? = null,
|
||||
val dataSource: String? = null,
|
||||
)
|
||||
|
||||
@@ -48,6 +48,10 @@ import com.navi.chat.utils.PL_WEB_URL_HOST_NAME
|
||||
import com.navi.chat.utils.PRODUCT_TYPE
|
||||
import com.navi.chat.utils.SCREEN_NAME
|
||||
import com.navi.chat.utils.SCREEN_NAME_CAPITAL
|
||||
import com.navi.chat.utils.WEB_BASE_PATH
|
||||
import com.navi.chat.utils.WEB_BASE_URL
|
||||
import com.navi.chat.utils.WEB_CONTINUE_PATH
|
||||
import com.navi.chat.utils.WEB_CONTINUE_URL
|
||||
import com.navi.chat.viewmodels.CRMWebSharedViewModel
|
||||
import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper
|
||||
import com.navi.common.model.ModuleNameV2
|
||||
@@ -77,39 +81,29 @@ class CRMWebViewActivity : BaseActivity() {
|
||||
@SuppressLint("SetJavaScriptEnabled", "JavascriptInterface")
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
setContentView(com.navi.common.R.layout.activity_navi_web_view)
|
||||
webView = findViewById(com.navi.common.R.id.web_view)
|
||||
setupWebView(webView)
|
||||
|
||||
val configId =
|
||||
intent.getStringExtra(SCREEN_NAME)
|
||||
?: 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),
|
||||
fromActiveChat = fromActiveChat.toBoolean(),
|
||||
conversationId = conversationId,
|
||||
dataSource = intent.getStringExtra(DATA_SOURCE),
|
||||
)
|
||||
pathUrl = viewModel.buildPathUrl(webViewIntent)
|
||||
|
||||
initWebIntentData()
|
||||
if (
|
||||
pathUrl.isNullOrEmpty() ||
|
||||
(webViewIntent?.naviClickActionUrl != ALL_TICKETS_V2 &&
|
||||
webViewIntent?.configId.isNullOrEmpty())
|
||||
webViewIntent?.webBaseUrl.isNullOrEmpty() &&
|
||||
webViewIntent?.continueUrl.isNullOrEmpty() &&
|
||||
(pathUrl.isNullOrEmpty() ||
|
||||
(webViewIntent?.naviClickActionUrl != ALL_TICKETS_V2 &&
|
||||
webViewIntent?.configId.isNullOrEmpty()))
|
||||
) {
|
||||
viewModel.showError.value = true
|
||||
} else {
|
||||
viewModel.showLoader.value = false
|
||||
viewModel.getCrmWebViewUrl(pathUrl = pathUrl.toString(), naeScreenName = screenName)
|
||||
viewModel.getCrmWebViewUrl(
|
||||
pathUrl = pathUrl.toString(),
|
||||
naeScreenName = screenName,
|
||||
webViewIntent = webViewIntent,
|
||||
)
|
||||
}
|
||||
|
||||
initObservers()
|
||||
@@ -127,6 +121,34 @@ class CRMWebViewActivity : BaseActivity() {
|
||||
)
|
||||
}
|
||||
|
||||
private fun initWebIntentData() {
|
||||
val configId =
|
||||
intent.getStringExtra(SCREEN_NAME)
|
||||
?: 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)
|
||||
val webBaseUrl = intent.getStringExtra(WEB_BASE_URL)
|
||||
val webContinueUrl = intent.getStringExtra(WEB_CONTINUE_URL)
|
||||
val webContinuePath = intent.getStringExtra(WEB_CONTINUE_PATH)
|
||||
val webBasePath = intent.getStringExtra(WEB_BASE_PATH)
|
||||
webViewIntent =
|
||||
WebViewIntent(
|
||||
naviClickActionUrl = intent.getStringExtra(NAVI_CLICK_ACTION_URL),
|
||||
configId = configId,
|
||||
orderId = intent.getStringExtra(ORDER_ID),
|
||||
productType = intent.getStringExtra(PRODUCT_TYPE),
|
||||
fromActiveChat = fromActiveChat.toBoolean(),
|
||||
conversationId = conversationId,
|
||||
webBaseUrl = webBaseUrl,
|
||||
continueUrl = webContinueUrl,
|
||||
webBasePath = webBasePath,
|
||||
continuePath = webContinuePath,
|
||||
dataSource = intent.getStringExtra(DATA_SOURCE),
|
||||
)
|
||||
pathUrl = viewModel.buildPathUrl(webViewIntent)
|
||||
}
|
||||
|
||||
private fun initObservers() {
|
||||
viewModel.webViewUrl.observe(this) { url -> url?.let { webView.loadUrl(it) } }
|
||||
|
||||
@@ -267,6 +289,17 @@ class CRMWebViewActivity : BaseActivity() {
|
||||
blockNotification = false
|
||||
}
|
||||
|
||||
override fun onNewIntent(intent: Intent) {
|
||||
super.onNewIntent(intent)
|
||||
viewModel.showLoader.value = true
|
||||
initWebIntentData()
|
||||
viewModel.getCrmWebViewUrl(
|
||||
pathUrl = pathUrl.toString(),
|
||||
naeScreenName = screenName,
|
||||
webViewIntent = webViewIntent,
|
||||
)
|
||||
}
|
||||
|
||||
private fun updateBlockNotification(value: Boolean) {
|
||||
blockNotification = value
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ package com.navi.chat.utils
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.Intent
|
||||
import android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP
|
||||
import android.os.Bundle
|
||||
import com.navi.chat.ui.activities.CRMWebViewActivity
|
||||
import com.navi.chat.ui.activities.NaviChatActivity
|
||||
@@ -44,13 +45,16 @@ fun getCrmWebViewIntent(
|
||||
putExtra(NAVI_CLICK_ACTION_URL, ctaUrl)
|
||||
putExtra(ACTIVE_CHAT_CONV, fromActiveChat)
|
||||
putExtra(CONVERSATION_ID_PARAM, conversationId)
|
||||
flags = FLAG_ACTIVITY_CLEAR_TOP
|
||||
}
|
||||
}
|
||||
|
||||
fun navigateToCrm(activity: Activity?, bundle: Bundle?, path: String?) {
|
||||
val intent =
|
||||
if (FirebaseRemoteConfigHelper.getBoolean(CRM_WEB_VIEW_ENABLED, true)) {
|
||||
Intent(activity, CRMWebViewActivity::class.java)
|
||||
Intent(activity, CRMWebViewActivity::class.java).apply {
|
||||
flags = FLAG_ACTIVITY_CLEAR_TOP
|
||||
}
|
||||
} else {
|
||||
when (path) {
|
||||
PRODUCT_HELP_PAGE -> Intent(activity, SupportScreenActivity::class.java)
|
||||
|
||||
@@ -80,6 +80,10 @@ const val BOT = "BOT"
|
||||
const val DIGITAL_GOLD = "DIGITAL_GOLD"
|
||||
const val FILENAME = "filename"
|
||||
const val NODE_UUID_PARAM = "nodeUuid"
|
||||
const val WEB_BASE_URL = "WEB_BASE_URL"
|
||||
const val WEB_BASE_PATH = "WEB_BASE_PATH"
|
||||
const val WEB_CONTINUE_PATH = "WEB_CONTINUE_PATH"
|
||||
const val WEB_CONTINUE_URL = "continue"
|
||||
|
||||
/* Video Player Instance Save Constant */
|
||||
const val CURRENT_VIDEO_POSITION_IN_MS = "currentVideoPositionInMs"
|
||||
|
||||
@@ -91,7 +91,11 @@ constructor(
|
||||
val showError: MutableLiveData<Boolean>
|
||||
get() = _showError
|
||||
|
||||
fun getCrmWebViewUrl(pathUrl: String, naeScreenName: String) {
|
||||
fun getCrmWebViewUrl(
|
||||
pathUrl: String,
|
||||
naeScreenName: String,
|
||||
webViewIntent: WebViewIntent? = null,
|
||||
) {
|
||||
viewModelScope.safeLaunch(Dispatchers.IO) {
|
||||
val codeVerifier = generateRandomString(32)
|
||||
val codeChallenger = generateSHA256Hash(codeVerifier)
|
||||
@@ -114,15 +118,21 @@ constructor(
|
||||
codeVerifier = codeVerifier,
|
||||
token = it.data?.code.toString(),
|
||||
pathUrl = pathUrl,
|
||||
webViewIntent = webViewIntent,
|
||||
)
|
||||
}
|
||||
|
||||
_showLoader.postValue(false)
|
||||
_showError.postValue(crmWebViewUrl.isNullOrEmpty())
|
||||
_webViewUrl.postValue(crmWebViewUrl)
|
||||
}
|
||||
}
|
||||
|
||||
private fun buildCrmWebViewUrl(codeVerifier: String, token: String, pathUrl: String): String {
|
||||
private fun buildCrmWebViewUrl(
|
||||
codeVerifier: String,
|
||||
token: String,
|
||||
pathUrl: String,
|
||||
webViewIntent: WebViewIntent? = null,
|
||||
): String {
|
||||
val urlParamsMap: MutableMap<String, String> =
|
||||
mutableMapOf(
|
||||
Pair(
|
||||
@@ -149,16 +159,20 @@ constructor(
|
||||
Pair(APP_VERSION_CODE, CommonLibManager.buildConfigDetails.appVersionCode),
|
||||
Pair(
|
||||
CONTINUE,
|
||||
FirebaseRemoteConfigHelper.getString(
|
||||
CRM_WEB_VIEW_URL_PARAM_CONTINUE,
|
||||
defaultValue = CUSTOMER_SUPPORT_PATH,
|
||||
) + pathUrl,
|
||||
if (webViewIntent?.continueUrl.isNotNullAndNotEmpty()) pathUrl
|
||||
else
|
||||
FirebaseRemoteConfigHelper.getString(
|
||||
CRM_WEB_VIEW_URL_PARAM_CONTINUE,
|
||||
defaultValue = CUSTOMER_SUPPORT_PATH,
|
||||
) + pathUrl,
|
||||
),
|
||||
)
|
||||
val baseUrl =
|
||||
FirebaseRemoteConfigHelper.getString(CRM_WEB_VIEW_BASE_URL, EMPTY) + AUTOLOGIN_PATH
|
||||
if (webViewIntent != null && webViewIntent.webBaseUrl.isNotNullAndNotEmpty())
|
||||
webViewIntent.webBaseUrl
|
||||
else FirebaseRemoteConfigHelper.getString(CRM_WEB_VIEW_BASE_URL, EMPTY) + AUTOLOGIN_PATH
|
||||
return buildUrlWithParameters(
|
||||
baseUrl,
|
||||
baseUrl!!,
|
||||
urlParamsMap.filter { it.value.isNotNullAndNotEmpty() },
|
||||
)
|
||||
}
|
||||
@@ -169,16 +183,24 @@ constructor(
|
||||
webViewIntent.configId.isNullOrEmpty() ||
|
||||
webViewIntent.naviClickActionUrl.isNullOrEmpty()
|
||||
) {
|
||||
if (webViewIntent != null && webViewIntent.naviClickActionUrl == ALL_TICKETS_V2) {
|
||||
_showError.postValue(false)
|
||||
} else {
|
||||
if (webViewIntent == null) {
|
||||
_showError.postValue(true)
|
||||
return EMPTY
|
||||
}
|
||||
if (webViewIntent.naviClickActionUrl == ALL_TICKETS_V2) {
|
||||
_showError.postValue(false)
|
||||
} else {
|
||||
if (webViewIntent.continueUrl.isNullOrEmpty()) {
|
||||
_showError.postValue(true)
|
||||
return EMPTY
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val pathUrl =
|
||||
if (
|
||||
if (webViewIntent.continueUrl.isNotNullAndNotEmpty())
|
||||
StringBuilder().append(webViewIntent.continueUrl)
|
||||
else if (
|
||||
(webViewIntent.fromActiveChat == true ||
|
||||
webViewIntent.naviClickActionUrl == CHAT_ACTIVITY) &&
|
||||
webViewIntent.configId != null
|
||||
|
||||
Reference in New Issue
Block a user