diff --git a/android/navi-common/src/main/java/com/navi/common/model/common/WidgetResponse.kt b/android/navi-common/src/main/java/com/navi/common/model/common/WidgetResponse.kt index 4d00772e93..bad3954e3b 100644 --- a/android/navi-common/src/main/java/com/navi/common/model/common/WidgetResponse.kt +++ b/android/navi-common/src/main/java/com/navi/common/model/common/WidgetResponse.kt @@ -73,6 +73,7 @@ data class ExtraDataDetails( @SerializedName("loaderScreen") val loaderScreen: ActionCheckResponse? = null, @SerializedName("isUserInvested") val isUserInvested: Boolean? = null, @SerializedName("reward") val reward: Reward? = null, + @SerializedName("backOnRefresh") val backOnRefresh: Boolean? = null, ) : Parcelable @Parcelize data class CacheConfig(val ttl: Long? = 0, val maxConsumptions: Int? = 0) : Parcelable diff --git a/android/navi-gold/src/main/java/com/navi/gold/repo/DigitalGoldSellRepo.kt b/android/navi-gold/src/main/java/com/navi/gold/repo/DigitalGoldSellRepo.kt index 539793ada9..231afa9739 100644 --- a/android/navi-gold/src/main/java/com/navi/gold/repo/DigitalGoldSellRepo.kt +++ b/android/navi-gold/src/main/java/com/navi/gold/repo/DigitalGoldSellRepo.kt @@ -70,9 +70,15 @@ class DigitalGoldSellRepo @Inject constructor(private val retrofitService: Retro metricInfo = getGoldMetricInfo(isNae = { !it.isSuccessWithData() }), ) - suspend fun fetchUpiValidationV2(upiId: String) = + suspend fun fetchUpiValidationV2(upiId: String, source: String?) = apiResponseCallback( - retrofitService.fetchUpiValidationV2( + retrofitService.fetchUpiValidationV2(upiId = upiId, source = source.toString()), + metricInfo = getGoldMetricInfo(isNae = { !it.isSuccessWithData() }), + ) + + suspend fun fetchUpiValidationV3(upiId: String) = + apiResponseCallback( + retrofitService.fetchUpiValidationV3( upiValidationRequest = UpiValidationRequest(upiId) ), metricInfo = getGoldMetricInfo(isNae = { !it.isSuccessWithData() }), diff --git a/android/navi-gold/src/main/java/com/navi/gold/retrofit/RetrofitService.kt b/android/navi-gold/src/main/java/com/navi/gold/retrofit/RetrofitService.kt index ba662eaf3b..ae920584d6 100644 --- a/android/navi-gold/src/main/java/com/navi/gold/retrofit/RetrofitService.kt +++ b/android/navi-gold/src/main/java/com/navi/gold/retrofit/RetrofitService.kt @@ -179,8 +179,14 @@ interface RetrofitService { @GET("/kuber/order/add-upi-page-content") suspend fun fetchAddUpiPageContent(): Response> - @POST("/kuber/upi/v2") + @GET("/kuber/upi/v2/validate") suspend fun fetchUpiValidationV2( + @Query("upiId") upiId: String, + @Query("source") source: String, + ): Response> + + @POST("/kuber/upi/v2") + suspend fun fetchUpiValidationV3( @Body upiValidationRequest: UpiValidationRequest ): Response> diff --git a/android/navi-gold/src/main/java/com/navi/gold/ui/DigitalGoldSellActivity.kt b/android/navi-gold/src/main/java/com/navi/gold/ui/DigitalGoldSellActivity.kt index 5083d48f27..1124cfcef2 100644 --- a/android/navi-gold/src/main/java/com/navi/gold/ui/DigitalGoldSellActivity.kt +++ b/android/navi-gold/src/main/java/com/navi/gold/ui/DigitalGoldSellActivity.kt @@ -303,7 +303,7 @@ class DigitalGoldSellActivity : GoldBaseActivity(), WidgetCallback, NewBottomShe } private fun handleBackPress() { - if (sharedVM.isAddUpiIdScreenVisible()) { + if (sharedVM.isAddUpiIdScreenVisible() && sharedVM.getBackOnRefresh() == false) { sharedVM.setRefreshScreen(true) return } diff --git a/android/navi-gold/src/main/java/com/navi/gold/ui/DigitalGoldSellUpiFragment.kt b/android/navi-gold/src/main/java/com/navi/gold/ui/DigitalGoldSellUpiFragment.kt index d01170777e..661cda664d 100644 --- a/android/navi-gold/src/main/java/com/navi/gold/ui/DigitalGoldSellUpiFragment.kt +++ b/android/navi-gold/src/main/java/com/navi/gold/ui/DigitalGoldSellUpiFragment.kt @@ -143,11 +143,15 @@ class DigitalGoldSellUpiFragment : widgetResponse -> clearInputWidgetValues() + widgetResponse.extraData?.backOnRefresh?.let { sharedVM.setBackOnRefresh(it) } sharedVM.setAddUpiIdScreenVisible(false) binding.rvItems.isVisible = true sharedVM.setActivityComponent(true) stopShimmer() - widgetResponse.header?.let { header -> sharedVM.setHeaders(header) } + widgetResponse.header?.let { header -> + viewModel.prefetchData(header.actionData?.url, screenName = screenName) + sharedVM.setHeaders(header) + } widgetResponse.footerWidget?.let { listOfWidgets -> useCommonFooter = widgetResponse.extraData?.useCommonFooter.orTrue() if (useCommonFooter) { @@ -230,7 +234,13 @@ class DigitalGoldSellUpiFragment : TemporaryStorageHelper.SOFT_REF_CACHE.remove(SELL_GOLD_INPUT_SCREEN) TemporaryStorageHelper.setIsDataModified(SELL_GOLD_INPUT_SCREEN, true) } - fetchDigitalSellUpiScreen(isPriceExpired = !sharedVM.isAddUpiIdScreenVisible()) + if (sharedVM.getBackOnRefresh() == false) { + fetchDigitalSellUpiScreen( + isPriceExpired = !sharedVM.isAddUpiIdScreenVisible() + ) + } else { + activity?.onBackPressed() + } sharedVM.setRefreshScreen(false) } } @@ -247,7 +257,9 @@ class DigitalGoldSellUpiFragment : upiValidationResponse.data?.bottomSheetData?.let { widgetNaviAnalyticsEventTracker.onWidgetViewedEvent(it.metaData?.viewedData) showCommonBottomSheet(it) - navigateWith(upiValidationResponse.data?.actionData) + if (sharedVM.getBackOnRefresh() == false) { + navigateWith(upiValidationResponse.data?.actionData) + } } ?: run { upiValidationResponse.data?.widgetBottomSheetData?.let { bottomSheetData -> @@ -434,13 +446,19 @@ class DigitalGoldSellUpiFragment : fetchUpiValidationResponse(naviClickAction.actionData) return } - if (naviClickAction.actionData?.url.equals(ADD_NEW_UPI_ID_SCREEN)) { + if ( + naviClickAction.actionData?.url.equals(ADD_NEW_UPI_ID_SCREEN) && + sharedVM.getBackOnRefresh() == false + ) { showShimmer() viewModel.fetchAddUpiPageContent() widgetBottomSheet?.safelyDismissDialog() return } - if (naviClickAction.actionData?.url.equals(CONTINUE_WITH_SELECTED_UPI)) { + if ( + naviClickAction.actionData?.url.equals(CONTINUE_WITH_SELECTED_UPI) && + sharedVM.getBackOnRefresh() == false + ) { widgetBottomSheet?.safelyDismissDialog() return } @@ -481,7 +499,10 @@ class DigitalGoldSellUpiFragment : } } is NaviWidgetClickWithCtaData -> { - if (naviClickAction.ctaData?.url.equals(ADD_NEW_UPI_ID_SCREEN)) { + if ( + naviClickAction.ctaData?.url.equals(ADD_NEW_UPI_ID_SCREEN) && + sharedVM.getBackOnRefresh() == false + ) { showShimmer() viewModel.fetchAddUpiPageContent() widgetBottomSheet?.safelyDismissDialog() @@ -492,8 +513,12 @@ class DigitalGoldSellUpiFragment : } private fun fetchUpiValidationResponse(actionData: ActionData?) { - actionData?.bottomSheetData?.let { showCommonBottomSheet(it) } - viewModel.fetchUpiValidationV2(sharedVM.getUpiId()) + if (sharedVM.getBackOnRefresh() == false) { + viewModel.fetchUpiValidationV3(sharedVM.getUpiId()) + } else { + actionData?.bottomSheetData?.let { showCommonBottomSheet(it) } + viewModel.fetchUpiValidationV2(upiId = sharedVM.getUpiId(), source = null) + } } private fun toShowBottomSheet(action: ActionData?) { @@ -622,7 +647,10 @@ class DigitalGoldSellUpiFragment : commonBottomSheet.dismiss() } - if (actionData?.url.equals(REFRESH_AFTER_UPI_VERIFICATION)) { + if ( + actionData?.url.equals(REFRESH_AFTER_UPI_VERIFICATION) && + sharedVM.getBackOnRefresh() == false + ) { fetchDigitalSellUpiScreen() commonBottomSheet.dismiss() return diff --git a/android/navi-gold/src/main/java/com/navi/gold/viewmodels/DigitalGoldSellSharedVM.kt b/android/navi-gold/src/main/java/com/navi/gold/viewmodels/DigitalGoldSellSharedVM.kt index 7e91cc0a18..a38c8be880 100644 --- a/android/navi-gold/src/main/java/com/navi/gold/viewmodels/DigitalGoldSellSharedVM.kt +++ b/android/navi-gold/src/main/java/com/navi/gold/viewmodels/DigitalGoldSellSharedVM.kt @@ -69,6 +69,14 @@ class DigitalGoldSellSharedVM : BaseVM(isExceptionNeedToShow = false) { private var exchangeRateId: String = "" + private var backOnRefresh: Boolean? = null + + fun setBackOnRefresh(backOnRefresh: Boolean) { + this.backOnRefresh = backOnRefresh + } + + fun getBackOnRefresh() = backOnRefresh + fun setActualSellAmount(actualSellAmount: Double) { this.actualSellAmount = actualSellAmount } diff --git a/android/navi-gold/src/main/java/com/navi/gold/viewmodels/DigitalGoldSellVM.kt b/android/navi-gold/src/main/java/com/navi/gold/viewmodels/DigitalGoldSellVM.kt index 48050cd519..c3a3688fdc 100644 --- a/android/navi-gold/src/main/java/com/navi/gold/viewmodels/DigitalGoldSellVM.kt +++ b/android/navi-gold/src/main/java/com/navi/gold/viewmodels/DigitalGoldSellVM.kt @@ -175,9 +175,20 @@ class DigitalGoldSellVM @Inject constructor(private val goldSellRepo: DigitalGol } } - fun fetchUpiValidationV2(upiId: String) { + fun fetchUpiValidationV2(upiId: String, source: String?) { coroutineScope.launch { - val response = goldSellRepo.fetchUpiValidationV2(upiId) + val response = goldSellRepo.fetchUpiValidationV2(upiId, source = source) + if (response.error.isNull() && response.errors.isNullOrEmpty()) { + _upiIdValidationResponse.value = response.data + } else { + setErrorData(response.errors, response.error) + } + } + } + + fun fetchUpiValidationV3(upiId: String) { + coroutineScope.launch { + val response = goldSellRepo.fetchUpiValidationV3(upiId) if (response.error.isNull() && response.errors.isNullOrEmpty()) { _upiIdValidationResponse.value = response.data } else {