From e3bb54bfc2c7c3ea5845c80511f7ee87f2c8c8df Mon Sep 17 00:00:00 2001 From: Soumya Ranjan Patra Date: Tue, 11 Mar 2025 19:01:25 +0530 Subject: [PATCH] NTP-40239 | Crm notification fixes and Additional Params in CRMWebViewActivity (#15308) --- .../common/navigator/NaviDeepLinkNavigator.kt | 3 +++ .../firebase/NaviFirebaseMessagingService.kt | 13 ++++++++---- .../registration/helper/DashboardUtils.kt | 6 ++---- .../main/java/com/naviapp/utils/Constants.kt | 15 +------------ .../navi/chat/bridges/NaviChatWebBridge.kt | 6 ++++++ .../chat/ui/activities/CRMWebViewActivity.kt | 21 ++++++++++++++++++- .../java/com/navi/chat/utils/ChatNavigator.kt | 21 +++++++------------ .../chat/viewmodels/CRMWebSharedViewModel.kt | 2 ++ 8 files changed, 50 insertions(+), 37 deletions(-) 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 43457341cb..c403f2578d 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 @@ -461,6 +461,9 @@ object NaviDeepLinkNavigator : DeepLinkListener { } } } + if (conversationId == null) + conversationId = bundle.getString(CONVERSATION_ID_PARAM) + val naviChatSystemLocalData = NaviChatSystemLocalData( source = shareableLink.orEmpty(), diff --git a/android/app/src/main/java/com/naviapp/pushnotification/firebase/NaviFirebaseMessagingService.kt b/android/app/src/main/java/com/naviapp/pushnotification/firebase/NaviFirebaseMessagingService.kt index 993cfe158c..57e24fde99 100644 --- a/android/app/src/main/java/com/naviapp/pushnotification/firebase/NaviFirebaseMessagingService.kt +++ b/android/app/src/main/java/com/naviapp/pushnotification/firebase/NaviFirebaseMessagingService.kt @@ -29,7 +29,7 @@ import com.navi.base.sharedpref.PreferenceManager import com.navi.base.utils.BaseUtils.areNotificationsEnabled import com.navi.base.utils.isNotNullAndNotEmpty import com.navi.base.utils.orFalse -import com.navi.chat.ui.activities.NaviChatActivity +import com.navi.chat.ui.activities.CRMWebViewActivity import com.navi.chat.utils.CHAT_PN_RECEIVED import com.navi.common.dbcleaner.ModuleDatabaseCleanerExecutor import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper @@ -57,6 +57,7 @@ import com.naviapp.pushnotification.utils.clearSharedDbWithKeys import com.naviapp.pushnotification.utils.removeSpecificImageCache import com.naviapp.pushnotification.utils.removeSpecificPreferenceKeys import com.naviapp.utils.Constants +import com.naviapp.utils.Constants.BLOCK_NOTIFICATION import com.naviapp.utils.Constants.BRANCH import com.naviapp.utils.Constants.DELIVERED import com.naviapp.utils.Constants.FCM_DELIVERED_V2 @@ -65,6 +66,7 @@ import com.naviapp.utils.Constants.NAVILINK_SMALL import com.naviapp.utils.Constants.NOTIFICATION_PERMISSION_DENIED import com.naviapp.utils.Constants.STATUS import com.naviapp.utils.Constants.TEMPLATE_NAME +import com.naviapp.utils.Constants.TRUE import com.naviapp.utils.FCM_TOKEN import com.naviapp.utils.deleteCacheAndOpenLoginPage import dagger.hilt.android.AndroidEntryPoint @@ -266,9 +268,12 @@ class NaviFirebaseMessagingService : FirebaseMessagingService() { } if (intent.getStringExtra(Constants.DEEPLINK) == CHAT_ACTIVITY) { NaviTrackEvent.trackEventOnClickStream(CHAT_PN_RECEIVED) - if (NaviChatActivity.isChatActivityVisible) { - return - } + } + if ( + intent.getStringExtra(BLOCK_NOTIFICATION).equals(TRUE, ignoreCase = true) && + CRMWebViewActivity.blockNotification + ) { + return } val pendingIntent = getPendingIntentForActivity(intent, context) diff --git a/android/app/src/main/java/com/naviapp/registration/helper/DashboardUtils.kt b/android/app/src/main/java/com/naviapp/registration/helper/DashboardUtils.kt index dc13aec01d..6d30b8b634 100644 --- a/android/app/src/main/java/com/naviapp/registration/helper/DashboardUtils.kt +++ b/android/app/src/main/java/com/naviapp/registration/helper/DashboardUtils.kt @@ -22,6 +22,7 @@ import com.navi.base.utils.BaseUtils import com.navi.base.utils.orZero import com.navi.chat.utils.CHAT_PN_OPENED import com.navi.chat.utils.CHAT_SCREEN +import com.navi.chat.utils.CONVERSATION_ID_PARAM import com.navi.chat.utils.SCREEN_NAME import com.navi.common.utils.getDeviceSignature import com.navi.common.utils.getLocalStorageLocation @@ -98,10 +99,7 @@ fun getChatParams(intent: Intent): ArrayList { ) ) param.add( - LineItem( - key = Constants.CONVERSATION_ID, - value = intent.getStringExtra(Constants.CONVERSATION_ID), - ) + LineItem(key = CONVERSATION_ID_PARAM, value = intent.getStringExtra(CONVERSATION_ID_PARAM)) ) param.add(LineItem(key = NaviDeepLinkNavigator.IS_FROM_NOTIFICATION, value = "true")) NaviTrackEvent.trackEventOnClickStream( diff --git a/android/app/src/main/java/com/naviapp/utils/Constants.kt b/android/app/src/main/java/com/naviapp/utils/Constants.kt index b9042daa7e..0ec49aebae 100644 --- a/android/app/src/main/java/com/naviapp/utils/Constants.kt +++ b/android/app/src/main/java/com/naviapp/utils/Constants.kt @@ -14,7 +14,6 @@ object Constants { const val MILLISECONDS_PER_SECOND = 1000 const val OTP_COUNTDOWN_IN_SECOND = 30 const val EMPTY = "" - const val PACKAGE = "package:" const val DATA = "data" const val VALID_PHONE_NUMBER_LENGTH = 10 const val API_POLL_REPEAT_PERIOD_SECONDS = 10L @@ -25,14 +24,12 @@ object Constants { const val BANK_ACCOUNT_NUMBER = "BANK_ACCOUNT_NUMBER" const val REDIRECT_STATUS = "REDIRECT_STATUS" const val SUB_REDIRECT = "SUB_REDIRECT" - const val REDIRECT_PAGE_STATUS = "REDIRECT_PAGE_STATUS" const val PLAY_STORE_REQUEST_CODE = 1006 const val WhatsAppPkg = "com.whatsapp" const val WhatsAppPkgConversation = "com.whatsapp.Conversation" const val OS_ANDROID = "Android" const val TYPE_HOME_LOAN = "HOME_LOAN" const val TRUE = "true" - const val NO = "No" const val SLASH = "/" const val HOME_LOAN = "home" const val PERSONAL_LOAN = "personal" @@ -59,7 +56,6 @@ object Constants { const val ZERO = "0" const val LOAN_TYPE = "LOAN_TYPE" const val AMC = "amc" - const val KYC = "kyc" const val LEGAL_DOC_TYPE_TNC = "tnc" const val LEGAL_DOC_TYPE_PRIVACY_POLICY = "privacy-policy" const val DIVIDER = "/" @@ -76,11 +72,9 @@ object Constants { const val ACTION = "action" const val LOAN_ACCOUNT_NUMBER = "loanAccountNumber" const val KEY_REFERENCE_ID = "referenceId" - const val LOCATION = "LOCATION" const val DELIVERED = "DELIVERED" const val NOTIFICATION_PERMISSION_DENIED = "NOTIFICATION_PERMISSION_DENIED" const val HOME_FEATURE = "PPE" - const val INCOME_VERIFICATION = "INCOME_VERIFICATION" const val ANR_NAVI_REGEX = "com.navi" const val SUCCESS_CAPITAL = "SUCCESS" const val FAILED = "FAILED" @@ -107,14 +101,11 @@ object Constants { const val SOURCE = "source" const val SHOW_CSAT = "shouldShowCsat" const val SHOW_RESOLUTION = "showResolutionStatusWidgetFlag" - const val CONVERSATION_ID = "conversationId" const val CONTENT_DATA_JSON_STRING = "contentDataJsonString" const val KNOW_WHY_CONTENT_DATA_JSON_STRING = "knowWhyContentDataJsonString" - const val PL_JOURNEY_POLLING_INITIAL_DELAY_IN_SECONDS = 2L const val REFUND_AMOUNT = "REFUND_AMOUNT" const val REFUND_DATE = "REFUND_DATE" const val NEGATIVE_FORECLOSURE = "NEGATIVE_FORECLOSURE" - const val V1 = "V1" const val VERSION = "version" const val FEATURE_NAME = "FEATURE_NAME" const val PAYMENT_TYPE = "PAYMENT_TYPE" @@ -128,11 +119,9 @@ object Constants { const val POSITIVE = "POSITIVE" const val REDIRECTED_FROM_POSITIVE_REINFORCEMENT = "REDIRECTED_FROM_POSITIVE_REINFORCEMENT" const val LOTTIE_CODE = "LOTTIE_CODE" - const val UPI = "UPI" const val NEXT_EMI_DATE = "NEXT_EMI_DATE" const val SHOW_REFERRAL_LOTTIE = "SHOW_REFERRAL_LOTTIE" const val IS_PERMISSION_REQUIRED_ON_HOME = "IS_PERMISSION_REQUIRED_ON_HOME" - const val SCREEN_NAME = "screenName" const val CRM_HELP_SCREEN_NAME = "SCREEN_NAME" const val PRODUCT_HELP_PAGE = "PRODUCT_HELP_PAGE" @@ -147,7 +136,6 @@ object Constants { const val CUSTOM_AMOUNT_PAYABLE = "CUSTOM_AMOUNT_PAYABLE" const val IS_PAY_CUSTOM_AMOUNT = "IS_PAY_CUSTOM_AMOUNT" - const val MONEY_DISBURSEMENT_STATUS_V2 = "MONEY_DISBURSEMENT_STATUS_V2" const val NEEDS_RESULT = "NEEDS_RESULT" const val CLEAR_TASK = "CLEAR_TASK" const val REQUEST_CODE = "REQUEST_CODE" @@ -166,7 +154,6 @@ object Constants { const val TEN_SECONDS = 10L const val WORKER_INTERVAL_TIME_IN_SECONDS = 21600L const val INVESTMENT_TAB_SCREEN_V3 = "INVESTMENT_TAB_SCREEN_V3" - const val LOANS_TAB_SCREEN = "LOANS_TAB_SCREEN" const val HPC = "HPC" const val OVERLAY_SCREEN_TYPE = "overlayScreenType" const val UPI_LITE_BALANCE_TEXT_V2 = "upi_lite_balance_text_v2" @@ -194,7 +181,6 @@ object Constants { const val HAS_COARSE_LOCATION_PERMISSION = "hasCoarseLocationPermission" const val BACKGROUND_PERMISSION_CHECK = "background_permission_check" const val DISMISS_BOTTOMSHEET = "DISMISS_BOTTOMSHEET" - const val GO_BACK = "GO_BACK" const val SEE_MORE_BOTTOMSHEET = "SEE_MORE_BOTTOMSHEET" const val LENDING_PERMISSION_SCREEN = "LENDING_PERMISSION_SCREEN" const val ON_SYSTEM_BACK_PRESSED = "on_system_back_pressed" @@ -242,6 +228,7 @@ object Constants { const val HTTP_REGEX = "^https?://" const val NAVIHQ = "NAVIHQ" const val LOAN_TAB_OFFER_NUDGE_APPEARED_COUNT = "LOAN_TAB_OFFER_NUDGE_APPEARED_COUNT" + const val BLOCK_NOTIFICATION = "blockNotification" object Notification { const val HIDE_NOTIFICATION_COUNT = "hideNotificationCount" diff --git a/android/navi-chat/src/main/java/com/navi/chat/bridges/NaviChatWebBridge.kt b/android/navi-chat/src/main/java/com/navi/chat/bridges/NaviChatWebBridge.kt index 41f8570a9e..6d08e7fb1c 100644 --- a/android/navi-chat/src/main/java/com/navi/chat/bridges/NaviChatWebBridge.kt +++ b/android/navi-chat/src/main/java/com/navi/chat/bridges/NaviChatWebBridge.kt @@ -32,8 +32,14 @@ class NaviChatWebBridge( private val hideOrShowScreenLoader: (Boolean) -> Unit = {}, private val viewModel: CRMWebSharedViewModel, private val ctaDataListener: (CtaData) -> Unit, + private val onToggleNotificationVisibility: (Boolean) -> Unit, ) { + @JavascriptInterface + fun blockNotification(value: Boolean) { + onToggleNotificationVisibility(value) + } + @JavascriptInterface fun toggleLoader(show: String) { lifecycleScope.launch { 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 83c006e501..1a4f591701 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 @@ -88,7 +88,6 @@ class CRMWebViewActivity : BaseActivity() { val fromActiveChat = intent.getStringExtra(ACTIVE_CHAT_CONV) val conversationId = intent.getStringExtra(CONVERSATION_ID_PARAM) - webViewIntent = WebViewIntent( naviClickActionUrl = intent.getStringExtra(NAVI_CLICK_ACTION_URL), @@ -226,6 +225,7 @@ class CRMWebViewActivity : BaseActivity() { }, viewModel = viewModel, ctaDataListener = { ctaData -> handleNavigation(this, ctaData) }, + onToggleNotificationVisibility = { updateBlockNotification(it) }, ) webView.addJavascriptInterface(bridge, NAVI_JAVA_SCRIPT) @@ -254,4 +254,23 @@ class CRMWebViewActivity : BaseActivity() { } } } + + override fun onStop() { + super.onStop() + blockNotification = false + } + + override fun onDestroy() { + super.onDestroy() + blockNotification = false + } + + private fun updateBlockNotification(value: Boolean) { + blockNotification = value + } + + companion object { + var blockNotification = false + private set + } } 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 648bd840b9..5bd1ce1f10 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 @@ -27,13 +27,8 @@ fun getCrmWebViewIntent( ): 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 - } + FirebaseRemoteConfigHelper.getBoolean(CRM_WEB_VIEW_ENABLED, true) -> { + CRMWebViewActivity::class.java } else -> { when (ctaUrl) { @@ -46,17 +41,15 @@ fun getCrmWebViewIntent( } return Intent(activity, targetActivity).apply { - 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) - } + putExtra(NAVI_CLICK_ACTION_URL, ctaUrl) + putExtra(ACTIVE_CHAT_CONV, fromActiveChat) + putExtra(CONVERSATION_ID_PARAM, conversationId) } } fun navigateToCrm(activity: Activity?, bundle: Bundle?, path: String?) { val intent = - if (FirebaseRemoteConfigHelper.getBoolean(CRM_WEB_VIEW_ENABLED, false)) { + if (FirebaseRemoteConfigHelper.getBoolean(CRM_WEB_VIEW_ENABLED, true)) { Intent(activity, CRMWebViewActivity::class.java) } else { when (path) { @@ -66,7 +59,7 @@ fun navigateToCrm(activity: Activity?, bundle: Bundle?, path: String?) { else -> Intent(activity, NaviHelpCenterActivity::class.java) } } - if (FirebaseRemoteConfigHelper.getBoolean(CRM_WEB_VIEW_ENABLED, false)) { + if (FirebaseRemoteConfigHelper.getBoolean(CRM_WEB_VIEW_ENABLED, true)) { bundle?.putString(NAVI_CLICK_ACTION_URL, path) } intent.putExtras(bundle ?: Bundle()) 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 b1f62d173c..7521d11455 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 @@ -205,9 +205,11 @@ constructor( webViewIntent.orderId?.let { pathUrl.append(AMPERSAND).append(ORDER_ID).append(EQUALS).append(it) } + webViewIntent.productType?.let { pathUrl.append(AMPERSAND).append(PRODUCT).append(EQUALS).append(it) } + return pathUrl.toString() }