diff --git a/android/navi-pay/src/main/kotlin/com/navi/pay/management/common/paymentsummary/ui/PaymentSummaryScreen.kt b/android/navi-pay/src/main/kotlin/com/navi/pay/management/common/paymentsummary/ui/PaymentSummaryScreen.kt index f4d3aa2cc9..71aeedd241 100644 --- a/android/navi-pay/src/main/kotlin/com/navi/pay/management/common/paymentsummary/ui/PaymentSummaryScreen.kt +++ b/android/navi-pay/src/main/kotlin/com/navi/pay/management/common/paymentsummary/ui/PaymentSummaryScreen.kt @@ -151,6 +151,8 @@ fun PaymentSummaryScreen( paymentSummaryViewModel.naviPayDefaultConfig.collectAsStateWithLifecycle() val upiAppLogoS3BaseUrl = remember(naviPayDefaultConfig) { naviPayDefaultConfig.value.config.upiAppLogoS3BaseUrl } + val shouldPlayScratchAndWinCtaAnimation by + paymentSummaryViewModel.shouldPlayScratchAndWinCtaAnimation.collectAsStateWithLifecycle() val upiAppsIconList = remember(naviPayDefaultConfig) { naviPayDefaultConfig.value.config.upiAppsIconList } @@ -488,6 +490,8 @@ fun PaymentSummaryScreen( paymentSummaryViewModel.rewardsBottomStripeSectionAnimationDuration, scratchCardBottomMovementAnimationDuration = paymentSummaryViewModel.scratchCardBottomMovementAnimationDuration, + shouldPlayScratchAndWinCtaAnimation = + shouldPlayScratchAndWinCtaAnimation ) } } diff --git a/android/navi-pay/src/main/kotlin/com/navi/pay/management/common/paymentsummary/ui/PaymentSummaryTransactionDetailSection.kt b/android/navi-pay/src/main/kotlin/com/navi/pay/management/common/paymentsummary/ui/PaymentSummaryTransactionDetailSection.kt index be300d223f..af381e0c55 100644 --- a/android/navi-pay/src/main/kotlin/com/navi/pay/management/common/paymentsummary/ui/PaymentSummaryTransactionDetailSection.kt +++ b/android/navi-pay/src/main/kotlin/com/navi/pay/management/common/paymentsummary/ui/PaymentSummaryTransactionDetailSection.kt @@ -139,7 +139,8 @@ fun SharedTransitionScope.PaymentSummaryTransactionDetailSection( isRewardsCtaVisible: Boolean, scratchCardRotationAnimationDuration: Int, rewardsBottomStripeSectionAnimationDuration: Int, - scratchCardBottomMovementAnimationDuration: Int + scratchCardBottomMovementAnimationDuration: Int, + shouldPlayScratchAndWinCtaAnimation: Boolean ) { val onViewDetailCtaClicked = { @@ -268,7 +269,8 @@ fun SharedTransitionScope.PaymentSummaryTransactionDetailSection( rewardsBottomStripeSectionAnimationDuration = rewardsBottomStripeSectionAnimationDuration, scratchCardBottomMovementAnimationDuration = - scratchCardBottomMovementAnimationDuration + scratchCardBottomMovementAnimationDuration, + shouldPlayScratchAndWinCtaAnimation = shouldPlayScratchAndWinCtaAnimation ) } ) @@ -577,7 +579,8 @@ private fun SharedTransitionScope.BottomBarSection( isRewardsCtaVisible: Boolean, scratchCardRotationAnimationDuration: Int, rewardsBottomStripeSectionAnimationDuration: Int, - scratchCardBottomMovementAnimationDuration: Int + scratchCardBottomMovementAnimationDuration: Int, + shouldPlayScratchAndWinCtaAnimation: Boolean ) { Column(modifier = Modifier.padding(top = 16.dp)) { if (isRewardsCtaVisible) { @@ -615,12 +618,24 @@ private fun SharedTransitionScope.BottomBarSection( Spacer(modifier = Modifier.width(16.dp)) if (isRewardsCtaVisible) { - ScratchAndWinButtonSection( - modifier = Modifier.weight(1f), - onClick = onRewardsCtaClicked, - scratchAndWinButtonAnimationDuration = scratchAndWinButtonAnimationDuration, - scratchAndWinButtonAnimationDelay = scratchAndWinButtonAnimationDelay - ) + if (shouldPlayScratchAndWinCtaAnimation) + ScratchAndWinButtonSectionWithProgressAnimation( + modifier = Modifier.weight(1f), + onClick = onRewardsCtaClicked, + scratchAndWinButtonAnimationDuration = scratchAndWinButtonAnimationDuration, + scratchAndWinButtonAnimationDelay = scratchAndWinButtonAnimationDelay + ) + else { + ThemeRoundedButtonWithImage( + text = stringResource(id = R.string.np_scratch_and_win), + imageResId = CommonR.drawable.ic_scratch_card, + fontSize = 12.sp, + modifier = Modifier.weight(1f), + onClick = onTransactionDetailSectionBottomNavigationCtaButtonClicked, + paddingValues = PaddingValues(horizontal = 16.dp, vertical = 12.dp), + rippleColor = NaviPayColor.bgDefault + ) + } } else { ThemeRoundedButtonV2( text = stringResource(id = R.string.done), @@ -850,7 +865,7 @@ private fun RewardsWonGratificationSection( } @Composable -private fun ScratchAndWinButtonSection( +private fun ScratchAndWinButtonSectionWithProgressAnimation( modifier: Modifier, onClick: (String) -> Unit, scratchAndWinButtonAnimationDuration: Long, diff --git a/android/navi-pay/src/main/kotlin/com/navi/pay/management/common/paymentsummary/viewmodel/PaymentSummaryViewModel.kt b/android/navi-pay/src/main/kotlin/com/navi/pay/management/common/paymentsummary/viewmodel/PaymentSummaryViewModel.kt index d6d1d421dc..a38efeb53a 100644 --- a/android/navi-pay/src/main/kotlin/com/navi/pay/management/common/paymentsummary/viewmodel/PaymentSummaryViewModel.kt +++ b/android/navi-pay/src/main/kotlin/com/navi/pay/management/common/paymentsummary/viewmodel/PaymentSummaryViewModel.kt @@ -145,6 +145,9 @@ constructor( private val _isScratchCardRotationVisible = MutableStateFlow(false) val isScratchCardRotationVisible = _isScratchCardRotationVisible.asStateFlow() + private val _shouldPlayScratchAndWinCtaAnimation = MutableStateFlow(false) + val shouldPlayScratchAndWinCtaAnimation = _shouldPlayScratchAndWinCtaAnimation.asStateFlow() + private val isNotificationPermissionAllowed = MutableStateFlow(true) private val _requestForPushNotificationPermission = MutableSharedFlow() @@ -577,9 +580,15 @@ constructor( .get(key = NAVI_PAY_AUTO_POPUP_SCRATCH_CARD_COUNTER) ?.value ?.toIntOrNull() ?: 0 + + if (autoPopupCounter < naviPayDefaultConfig.value.config.scratchCardAutoPopupMaxCount) { + _shouldPlayScratchAndWinCtaAnimation.update { true } + } + delay(scratchCardAutoPopupDelay) + if ( - autoPopupCounter <= naviPayDefaultConfig.value.config.scratchCardAutoPopupMaxCount && + autoPopupCounter < naviPayDefaultConfig.value.config.scratchCardAutoPopupMaxCount && rewardsGratificationUIState.value is PaymentSummaryRewardsGratificationUIState.Gratification ) {