diff --git a/navi-pay/src/main/kotlin/com/navi/pay/analytics/NaviPayAnalytics.kt b/navi-pay/src/main/kotlin/com/navi/pay/analytics/NaviPayAnalytics.kt index f3e5170e33..da7fa3fd1b 100644 --- a/navi-pay/src/main/kotlin/com/navi/pay/analytics/NaviPayAnalytics.kt +++ b/navi-pay/src/main/kotlin/com/navi/pay/analytics/NaviPayAnalytics.kt @@ -1261,7 +1261,7 @@ class NaviPayAnalytics private constructor() { NaviTrackEvent.trackEventOnClickStream("NaviTrackEvent.NaviPay_SendMoney_BankSelectClicked") } - fun onKebabMenuClick() { + fun onBlockAndSpamOptionClick() { NaviTrackEvent.trackEventOnClickStream("NaviPay_SendMoney_MenuIconClick") } diff --git a/navi-pay/src/main/kotlin/com/navi/pay/common/model/config/NaviPayDefaultConfig.kt b/navi-pay/src/main/kotlin/com/navi/pay/common/model/config/NaviPayDefaultConfig.kt index 58d7cb37a6..8ee6b81875 100644 --- a/navi-pay/src/main/kotlin/com/navi/pay/common/model/config/NaviPayDefaultConfig.kt +++ b/navi-pay/src/main/kotlin/com/navi/pay/common/model/config/NaviPayDefaultConfig.kt @@ -27,5 +27,5 @@ data class ConfigMessage( @SerializedName("invalidAmountGenericMessage") val invalidAmountGenericMessage: String = "Invalid amount", @SerializedName("sendMoneyDefaultRemarks") val sendMoneyDefaultRemarks: String = "Paid via Navi", @SerializedName("requestMoneyDefaultRemarks") val requestMoneyDefaultRemarks: String = "Requested via Navi", - @SerializedName("collectRequestMenuCtaText") val collectRequestMenuCtaText: String = "Don't know this user?" + @SerializedName("blockAndSpamCtaText") val blockAndSpamCtaText: String = "Don't know this user?" ) diff --git a/navi-pay/src/main/kotlin/com/navi/pay/common/ui/PayeeDetailsView.kt b/navi-pay/src/main/kotlin/com/navi/pay/common/ui/PayeeDetailsView.kt index 1e1c8a713e..e12d3b1275 100644 --- a/navi-pay/src/main/kotlin/com/navi/pay/common/ui/PayeeDetailsView.kt +++ b/navi-pay/src/main/kotlin/com/navi/pay/common/ui/PayeeDetailsView.kt @@ -22,7 +22,7 @@ import com.navi.design.theme.ttComposeFontFamily import com.navi.design.utils.clickableWithNoGesture import com.navi.pay.R import com.navi.pay.common.theme.color.NaviPayColor -import com.navi.pay.management.common.sendmoney.model.view.PayeeDetailsCtaWidgetData +import com.navi.pay.management.common.sendmoney.model.view.BlockAndSpamCtaData import com.navi.pay.utils.clickableDebounce import com.navi.pay.utils.shimmerEffect @@ -35,7 +35,7 @@ fun PayeeDetailsView( userNameText: String, userVpaText: String, @DrawableRes endImageResId: Int, - payeeDetailsCtaWidgetData: PayeeDetailsCtaWidgetData? = null + blockAndSpamCtaData: BlockAndSpamCtaData? = null ) { ConstraintLayout( modifier = modifier.then( @@ -108,7 +108,7 @@ fun PayeeDetailsView( color = NaviPayColor.textPrimary, fontWeight = getFontWeight(FontWeightEnum.NAVI_BODY_REGULAR)) - if (payeeDetailsCtaWidgetData?.isUserActionCtaVisible == true) { + if (blockAndSpamCtaData?.isUserActionCtaVisible == true) { Text(modifier = Modifier .constrainAs(userCtaAction) { top.linkTo(userVpa.bottom, 16.dp) @@ -118,9 +118,9 @@ fun PayeeDetailsView( } .layoutId(userCtaAction) .clickableWithNoGesture { - payeeDetailsCtaWidgetData.onActionClick.invoke() + blockAndSpamCtaData.onActionClick.invoke() }, - text = payeeDetailsCtaWidgetData.userActionCtaText, + text = blockAndSpamCtaData.userActionCtaText, textDecoration = TextDecoration.Underline, maxLines = 2, overflow = TextOverflow.Ellipsis, diff --git a/navi-pay/src/main/kotlin/com/navi/pay/management/common/sendmoney/model/view/PayeeDetailsCtaWidgetData.kt b/navi-pay/src/main/kotlin/com/navi/pay/management/common/sendmoney/model/view/BlockAndSpamCtaData.kt similarity index 83% rename from navi-pay/src/main/kotlin/com/navi/pay/management/common/sendmoney/model/view/PayeeDetailsCtaWidgetData.kt rename to navi-pay/src/main/kotlin/com/navi/pay/management/common/sendmoney/model/view/BlockAndSpamCtaData.kt index 624502403a..af0b299de5 100644 --- a/navi-pay/src/main/kotlin/com/navi/pay/management/common/sendmoney/model/view/PayeeDetailsCtaWidgetData.kt +++ b/navi-pay/src/main/kotlin/com/navi/pay/management/common/sendmoney/model/view/BlockAndSpamCtaData.kt @@ -1,6 +1,6 @@ package com.navi.pay.management.common.sendmoney.model.view -data class PayeeDetailsCtaWidgetData( +data class BlockAndSpamCtaData( val isUserActionCtaVisible: Boolean = false, val userActionCtaText: String = "", val onActionClick: () -> Unit diff --git a/navi-pay/src/main/kotlin/com/navi/pay/management/common/sendmoney/ui/SendMoneyScreen.kt b/navi-pay/src/main/kotlin/com/navi/pay/management/common/sendmoney/ui/SendMoneyScreen.kt index 3f36de5bdb..e87e2a49b2 100644 --- a/navi-pay/src/main/kotlin/com/navi/pay/management/common/sendmoney/ui/SendMoneyScreen.kt +++ b/navi-pay/src/main/kotlin/com/navi/pay/management/common/sendmoney/ui/SendMoneyScreen.kt @@ -249,9 +249,9 @@ fun SendMoneyScreen( } } - val onCollectRequestMenuClick = { + val onBlockAndSpamOptionClick = { keyboardController?.customHide(context = context, view = view) - naviPayAnalytics.onKebabMenuClick() + naviPayAnalytics.onBlockAndSpamOptionClick() sendMoneyViewModel.updateCurrentBottomSheet( SendMoneyBottomSheetType.UserMenuOption ) @@ -302,7 +302,7 @@ fun SendMoneyScreen( closeSheet = closeSheet, onPayButtonClick = onPayButtonClick, onMoreAccountsClick = onMoreAccountsClick, - onCollectRequestMenuClick = onCollectRequestMenuClick + onBlockAndSpamOptionClick = onBlockAndSpamOptionClick ) } diff --git a/navi-pay/src/main/kotlin/com/navi/pay/management/common/sendmoney/ui/SendMoneySection.kt b/navi-pay/src/main/kotlin/com/navi/pay/management/common/sendmoney/ui/SendMoneySection.kt index dce3d7aece..d8b8a08028 100644 --- a/navi-pay/src/main/kotlin/com/navi/pay/management/common/sendmoney/ui/SendMoneySection.kt +++ b/navi-pay/src/main/kotlin/com/navi/pay/management/common/sendmoney/ui/SendMoneySection.kt @@ -42,7 +42,6 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.constraintlayout.compose.ConstraintLayout -import androidx.constraintlayout.compose.Dimension import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.navi.design.font.FontWeightEnum import com.navi.design.snackbar.ErrorSnackBar @@ -59,8 +58,8 @@ import com.navi.pay.common.ui.PayeeDetailsView import com.navi.pay.common.ui.ThemeRoundedButton import com.navi.pay.common.utils.SnackBarPredefinedConfig import com.navi.pay.management.common.sendmoney.model.view.BankAccountsState +import com.navi.pay.management.common.sendmoney.model.view.BlockAndSpamCtaData import com.navi.pay.management.common.sendmoney.model.view.LinkedAccountEntityState -import com.navi.pay.management.common.sendmoney.model.view.PayeeDetailsCtaWidgetData import com.navi.pay.management.common.sendmoney.model.view.PayeeEntity import com.navi.pay.management.common.sendmoney.model.view.SendMoneyScreenSource import com.navi.pay.management.common.sendmoney.viewmodel.SendMoneyViewModel @@ -88,7 +87,7 @@ fun SendMoneySection( closeSheet: () -> Unit, onPayButtonClick: (String) -> Unit, onMoreAccountsClick: () -> Unit, - onCollectRequestMenuClick: () -> Unit + onBlockAndSpamOptionClick: () -> Unit ) { val note by sendMoneyViewModel.note.collectAsStateWithLifecycle() val snackbarState by sendMoneyViewModel.snackbarState.collectAsStateWithLifecycle() @@ -100,7 +99,8 @@ fun SendMoneySection( val isSelectedAccountEligible by sendMoneyViewModel.isSelectedAccountEligible.collectAsStateWithLifecycle() val payButtonText by sendMoneyViewModel.payButtonText.collectAsStateWithLifecycle() val bankAccountsState by sendMoneyViewModel.bankAccountsState.collectAsStateWithLifecycle() - val menuText by sendMoneyViewModel.menuText.collectAsStateWithLifecycle() + val blockAndSpamOptionEnabled by sendMoneyViewModel.blockAndSpamOptionEnabled.collectAsStateWithLifecycle() + val blockAndSpamCtaText by sendMoneyViewModel.blockAndSpamCtaText.collectAsStateWithLifecycle() val focusManager = LocalFocusManager.current val keyboardController = LocalSoftwareKeyboardController.current @@ -134,13 +134,11 @@ fun SendMoneySection( userNameText = payeeEntity.name, userVpaText = vpaToDisplay, endImageResId = R.drawable.ic_send_money, - payeeDetailsCtaWidgetData = if (sendMoneyViewModel.isMenuOptionVisible) PayeeDetailsCtaWidgetData( - isUserActionCtaVisible = true, - userActionCtaText = menuText, - onActionClick = { - onCollectRequestMenuClick() - }, - ) else null + blockAndSpamCtaData = BlockAndSpamCtaData( + isUserActionCtaVisible = blockAndSpamOptionEnabled, + userActionCtaText = blockAndSpamCtaText, + onActionClick = onBlockAndSpamOptionClick + ) ) SelectAccountView( diff --git a/navi-pay/src/main/kotlin/com/navi/pay/management/common/sendmoney/viewmodel/SendMoneyViewModel.kt b/navi-pay/src/main/kotlin/com/navi/pay/management/common/sendmoney/viewmodel/SendMoneyViewModel.kt index 979c077ef5..2016db45e5 100644 --- a/navi-pay/src/main/kotlin/com/navi/pay/management/common/sendmoney/viewmodel/SendMoneyViewModel.kt +++ b/navi-pay/src/main/kotlin/com/navi/pay/management/common/sendmoney/viewmodel/SendMoneyViewModel.kt @@ -110,6 +110,7 @@ import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.asSharedFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch @@ -208,8 +209,6 @@ class SendMoneyViewModel @Inject constructor( val transactionType = upiTransactionTypeEnumNavType.get(savedStateHandle, "transactionType") ?: UpiTransactionType.P2P_PAY - val isMenuOptionVisible = - (source is SendMoneyScreenSource.CollectRequest && (payeeEntity.value.isMerchantVerified == null || payeeEntity.value.isMerchantVerified == false)) val updateCurrentBottomSheet: (SendMoneyBottomSheetType) -> Unit = { newValue: SendMoneyBottomSheetType -> @@ -238,9 +237,18 @@ class SendMoneyViewModel @Inject constructor( MutableStateFlow(if (source is SendMoneyScreenSource.CollectRequest) R.drawable.ic_three_dots_option_icon else null) val actionIconResId = _actionIconResId.asStateFlow() - private val _menuText = - MutableStateFlow(naviPayDefaultConfig.config.configMessage.collectRequestMenuCtaText) - val menuText = _menuText.asStateFlow() + private val _blockAndSpamCtaText = + MutableStateFlow(naviPayDefaultConfig.config.configMessage.blockAndSpamCtaText) + val blockAndSpamCtaText = _blockAndSpamCtaText.asStateFlow() + + val blockAndSpamOptionEnabled = payeeEntity.map { + (source is SendMoneyScreenSource.CollectRequest && (it.isMerchantVerified == null || it.isMerchantVerified == false)) + }.stateIn( + scope = viewModelScope, + started = SharingStarted.WhileSubscribed(), + initialValue = if (payeeEntity.value.isVerifiedVpa) (source is SendMoneyScreenSource.CollectRequest && (payeeEntity.value.isMerchantVerified == null || payeeEntity.value.isMerchantVerified == false)) + else false + ) /** * Possible values and their meaning @@ -302,7 +310,7 @@ class SendMoneyViewModel @Inject constructor( ) ?: NaviPayDefaultConfig() - _menuText.update { naviPayDefaultConfig.config.configMessage.collectRequestMenuCtaText } + _blockAndSpamCtaText.update { naviPayDefaultConfig.config.configMessage.blockAndSpamCtaText } } }