TP-60404 | Sohan Reddy | RnR help chatbot (#10706)

This commit is contained in:
Sohan Reddy Atukula
2024-05-03 14:28:48 +05:30
committed by GitHub
parent 7484cf0ab7
commit 060c2441ea
5 changed files with 131 additions and 15 deletions

View File

@@ -4,7 +4,6 @@ import android.app.Activity
import androidx.activity.compose.BackHandler
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
@@ -44,8 +43,11 @@ import androidx.compose.ui.unit.sp
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.google.accompanist.systemuicontroller.rememberSystemUiController
import com.navi.analytics.utils.SCREEN_NAME
import com.navi.base.deeplink.DeepLinkManager
import com.navi.base.deeplink.util.DeeplinkConstants.CHAT_ACTIVITY
import com.navi.base.model.CtaData
import com.navi.base.model.LineItem
import com.navi.base.utils.EMPTY
import com.navi.coin.R
import com.navi.coin.models.TransactionHistoryCardData
@@ -56,18 +58,23 @@ import com.navi.coin.utils.NaviCoinsAnalytics
import com.navi.coin.utils.NaviCoinsAnalytics.Companion.REWARDS_HISTORY_TRANSACTION_DETAIL_BOTTOMSHEET_APPEARS
import com.navi.coin.utils.NaviCoinsAnalytics.Companion.REWARDS_HISTORY_TRANSACTION_DETAIL_BOTTOMSHEET_DISAPPEARS
import com.navi.coin.views.NaviCoinErrorScreen
import com.navi.coin.utils.NaviCoinsAnalytics.Companion.naviCoinsAnalytics
import com.navi.coin.views.TabLayout
import com.navi.coin.views.TransactionHistoryScreenShimmer
import com.navi.coin.vm.CoinHistoryScreenState
import com.navi.coin.vm.CoinHistoryScreenVM
import com.navi.coin.widgetFactory.CoinWidgetRenderer
import com.navi.common.constants.CHAT_BOT_SCREEN_NAME
import com.navi.common.forge.model.TabConfig
import com.navi.common.forge.model.WidgetModelDefinition
import com.navi.common.uitron.model.action.CtaAction
import com.navi.common.utils.getScreenHeight
import com.navi.design.theme.composeFontFamily
import com.navi.design.theme.ttComposeFontFamily
import com.navi.design.utils.dpToPx
import com.navi.naviwidgets.models.RewardType
import com.navi.rr.common.constants.COIN_HISTORY_SCREEN
import com.navi.rr.common.constants.PROFILE_RR_SCREEN
import com.navi.rr.utils.clickable
import com.navi.uitron.model.UiTronResponse
import com.navi.uitron.model.data.SpannableTextData
import com.navi.uitron.model.data.TextData
@@ -394,6 +401,7 @@ fun CoinHistoryScreenHeader(
navigator: DestinationsNavigator
) {
val context = LocalContext.current as Activity
val coroutineScope = rememberCoroutineScope()
Box(
modifier = Modifier
.fillMaxWidth()
@@ -402,7 +410,7 @@ fun CoinHistoryScreenHeader(
Box(modifier = Modifier.padding(start = 16.dp, top = 20.dp, bottom = 20.dp, end = 40.dp)) {
Image(
modifier = Modifier
.clickable {
.clickable(disableRipple = true) {
if (!navigator.navigateUp()) {
context.finish()
}
@@ -422,12 +430,53 @@ fun CoinHistoryScreenHeader(
text = stringResource(R.string.reward_history), style = TextStyle(
fontSize = 14.sp,
lineHeight = 22.sp,
fontFamily = composeFontFamily,
fontFamily = ttComposeFontFamily,
fontWeight = FontWeight(400),
color = Color(0xFFFFFFFF),
)
)
}
Row(
modifier = Modifier
.fillMaxWidth()
.padding(end = 16.dp),
horizontalArrangement = Arrangement.End,
verticalAlignment = Alignment.CenterVertically
) {
Text(
text = stringResource(CommonR.string.help),
style = TextStyle(
fontSize = 14.sp,
lineHeight = 22.sp,
fontFamily = ttComposeFontFamily,
fontWeight = FontWeight(600),
color = Color(0xFFFFFFFF),
),
modifier = Modifier.clickable(disableRipple = true, debounceTime = 2000) {
coroutineScope.launch {
naviCoinsAnalytics.sendEvent(
eventName = NaviCoinsAnalytics.REWARDS_HELP_CTA_CLICKED,
parameters = mutableMapOf(
SCREEN_NAME to COIN_HISTORY_SCREEN
)
)
}
DeepLinkManager.getDeepLinkListener()?.navigateTo(
context,
CtaData(
url = CHAT_ACTIVITY,
parameters = listOf(
LineItem(
key = CHAT_BOT_SCREEN_NAME,
value = PROFILE_RR_SCREEN
)
)
),
finish = false
)
}
)
}
}
}

View File

@@ -11,8 +11,6 @@ import android.app.Activity
import androidx.activity.compose.BackHandler
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
@@ -46,6 +44,7 @@ import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.compose.ui.zIndex
@@ -55,7 +54,9 @@ import androidx.paging.compose.LazyPagingItems
import androidx.paging.compose.collectAsLazyPagingItems
import com.google.accompanist.systemuicontroller.rememberSystemUiController
import com.navi.base.deeplink.DeepLinkManager
import com.navi.base.deeplink.util.DeeplinkConstants.CHAT_ACTIVITY
import com.navi.base.model.CtaData
import com.navi.base.model.LineItem
import com.navi.coin.R
import com.navi.coin.models.ScratchCard
import com.navi.coin.models.states.ScratchCardHistoryScreenState
@@ -71,18 +72,21 @@ import com.navi.coin.utils.Constants.RR_BOTTOM_SHEET
import com.navi.coin.utils.Constants.SCREEN_NAME
import com.navi.coin.utils.Constants.TRANSACTION_ID
import com.navi.coin.utils.Constants.Y
import com.navi.coin.utils.NaviCoinsAnalytics
import com.navi.coin.utils.SemiCircleShape
import com.navi.coin.views.NaviCoinErrorScreen
import com.navi.coin.views.ScratchCardListView
import com.navi.coin.vm.ScratchCardScreenVM
import com.navi.common.constants.CHAT_BOT_SCREEN_NAME
import com.navi.common.forge.model.ScreenDefinition
import com.navi.common.uitron.model.action.CtaAction
import com.navi.common.utils.EMPTY
import com.navi.common.utils.getScreenHeight
import com.navi.design.font.FontWeightEnum
import com.navi.design.theme.composeFontFamily
import com.navi.design.theme.getFontWeight
import com.navi.design.theme.ttComposeFontFamily
import com.navi.design.utils.dpToPx
import com.navi.rr.common.constants.PROFILE_RR_SCREEN
import com.navi.rr.common.constants.SCRATCH_CARD_HISTORY_SCREEN
import com.navi.rr.common.renderer.InitBottomSheet
import com.navi.rr.common.states.RRBottomSheetStateHolder
@@ -93,6 +97,7 @@ import com.navi.rr.scratchcard.model.ScratchCardBackResponse
import com.navi.rr.scratchcard.model.ScratchCardResponse
import com.navi.rr.scratchcard.ui.compose.ScratchCardComposable
import com.navi.rr.utils.EventConstants
import com.navi.rr.utils.clickable
import com.navi.rr.utils.getGsonBuilders
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
@@ -555,12 +560,11 @@ fun ScratchCardHistoryScreenHeader(
.padding(top = 24.dp),
contentAlignment = Alignment.CenterStart
) {
Box(modifier = Modifier.padding(start = 16.dp, top = 20.dp, bottom = 20.dp, end = 40.dp)){
Box(modifier = Modifier.padding(start = 16.dp, top = 20.dp, bottom = 20.dp, end = 40.dp)) {
Image(
modifier = Modifier
.clickable(
interactionSource = remember { MutableInteractionSource() },
indication = null
disableRipple = true,
) {
coroutineScope.launch {
viewModel.countDownHelper.cancelAllTimers()
@@ -569,10 +573,12 @@ fun ScratchCardHistoryScreenHeader(
context.finish()
}
}
.height(24.dp).width(24.dp),
.height(24.dp)
.width(24.dp),
painter = painterResource(CommonR.drawable.ic_arrow_left_white),
contentDescription = null)
}
Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.Center,
@@ -582,12 +588,54 @@ fun ScratchCardHistoryScreenHeader(
text = stringResource(id = R.string.reward_history), style = TextStyle(
fontSize = 14.sp,
lineHeight = 22.sp,
fontFamily = composeFontFamily,
fontFamily = ttComposeFontFamily,
fontWeight = getFontWeight(FontWeightEnum.TT_MEDIUM),
color = Color.White,
)
)
}
Row(
modifier = Modifier
.fillMaxWidth()
.padding(end = 16.dp),
horizontalArrangement = Arrangement.End,
verticalAlignment = Alignment.CenterVertically
) {
Text(
text = stringResource(CommonR.string.help),
style = TextStyle(
fontSize = 14.sp,
lineHeight = 22.sp,
fontFamily = ttComposeFontFamily,
fontWeight = FontWeight(600),
color = Color(0xFFFFFFFF),
),
modifier = Modifier.clickable(disableRipple = true, debounceTime = 2000) {
coroutineScope.launch {
NaviCoinsAnalytics.naviCoinsAnalytics.sendEvent(
eventName = NaviCoinsAnalytics.REWARDS_HELP_CTA_CLICKED,
parameters = mutableMapOf(
SCREEN_NAME to SCRATCH_CARD_HISTORY_SCREEN
)
)
}
DeepLinkManager.getDeepLinkListener()?.navigateTo(
context,
CtaData(
url = CHAT_ACTIVITY,
parameters = listOf(
LineItem(
key = CHAT_BOT_SCREEN_NAME,
value = PROFILE_RR_SCREEN
)
)
),
finish = false
)
}
)
}
}
}

View File

@@ -66,6 +66,8 @@ class NaviCoinsAnalytics private constructor() {
const val DEV_REDEEM_COIN_SUCCESS_EVENT = "dev_redeem_coin_success"
const val DEV_REDEEM_COIN_FAILURE_EVENT = "dev_redeem_coin_failure"
const val REWARDS_HELP_CTA_CLICKED = "navi_coin_help_button_clicked"
val naviCoinsAnalytics: NaviCoinsAnalytics by lazy { Holder.INSTANCE }
}
}

View File

@@ -16,3 +16,9 @@ const val SCRATCH_CARD_GRATIFICATION_SCREEN = "SCRATCH_CARD_GRATIFICATION_SCREEN
const val SCRATCH_CARD_HISTORY_SCREEN = "SCRATCH_CARD_HISTORY_SCREEN"
const val VERIFY_POLLING_DETAILS_SCREEN = "VERIFY_POLLING_DETAILS"
const val KYC_VERIFY_SCREEN = "KYC_VERIFY_SCREEN"
const val COIN_HOME_SCREEN = "COIN_HOME_SCREEN"
const val COIN_HISTORY_SCREEN = "COIN_HISTORY_SCREEN"
// Misc
const val PROFILE_RR_SCREEN = "PROFILE_RR_SCREEN"

View File

@@ -28,7 +28,9 @@ import androidx.compose.ui.graphics.Brush
import androidx.compose.ui.layout.onGloballyPositioned
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.IntSize
import com.navi.common.utils.ClickDebounce
import com.navi.common.utils.EMPTY
import com.navi.common.utils.get
import com.navi.common.utils.log
import com.navi.rr.R
import org.json.JSONArray
@@ -143,17 +145,26 @@ private fun JSONObject.filterEntriesTo(
return destination
}
fun Modifier.clickable(disableRipple: Boolean? = false, enabled: Boolean? = true, onClick: () -> Unit): Modifier = composed {
fun Modifier.clickable(disableRipple: Boolean? = false, enabled: Boolean? = true, debounceTime: Long? = null, onClick: () -> Unit): Modifier = composed {
val clickDebounce = remember { ClickDebounce.get() }
if (disableRipple == true) {
clickable(interactionSource = NoRippleIndicationSource(),
indication = null,
enabled = enabled ?: true,
onClick = {
onClick()
debounceTime?.let {
clickDebounce.processClick(it) { onClick() }
} ?: run {
onClick()
}
})
} else {
clickable {
onClick()
debounceTime?.let {
clickDebounce.processClick(it) { onClick() }
} ?: run {
onClick()
}
}
}
}