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 8492c7cbbe..4d00772e93 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 @@ -72,7 +72,7 @@ data class ExtraDataDetails( @SerializedName("sipInfo") val sipInfo: SipInfo? = null, @SerializedName("loaderScreen") val loaderScreen: ActionCheckResponse? = null, @SerializedName("isUserInvested") val isUserInvested: Boolean? = null, - @SerializedName("isScratchCardEnabled") val isScratchCardEnabled: Boolean? = null, + @SerializedName("reward") val reward: Reward? = null, ) : Parcelable @Parcelize data class CacheConfig(val ttl: Long? = 0, val maxConsumptions: Int? = 0) : Parcelable @@ -154,3 +154,12 @@ data class SipInfo( @SerializedName("installmentDate") val installmentDate: Int? = null, @SerializedName("source") val source: String? = null, ) : Parcelable + +@Parcelize +data class Reward( + @SerializedName("isScratchCardEnabled") val isScratchCardEnabled: Boolean? = null, + @SerializedName("actionData") val actionData: ActionData? = null, + @SerializedName("sourceType") val sourceType: String? = null, + @SerializedName("scratchCardRewardType") val scratchCardRewardType: String? = null, + @SerializedName("rewardEventId") val rewardEventId: String? = null, +) : Parcelable diff --git a/android/navi-gold/src/main/java/com/navi/gold/ui/DigitalGoldTransactionActivity.kt b/android/navi-gold/src/main/java/com/navi/gold/ui/DigitalGoldTransactionActivity.kt index 1a3f256069..b37ef70f69 100644 --- a/android/navi-gold/src/main/java/com/navi/gold/ui/DigitalGoldTransactionActivity.kt +++ b/android/navi-gold/src/main/java/com/navi/gold/ui/DigitalGoldTransactionActivity.kt @@ -67,6 +67,9 @@ import com.navi.gold.util.CommonUtils.updateColorsBasedOnPosition import com.navi.gold.util.Constants import com.navi.gold.util.Constants.CSAT_POPUP_DELAY import com.navi.gold.util.Constants.CSAT_POPUP_DELAY_TIME +import com.navi.gold.util.Constants.GOLD_FIRST_INVESTMENT +import com.navi.gold.util.Constants.NAVI_UPI_TXN +import com.navi.gold.util.Constants.NONE import com.navi.gold.util.Constants.REDIRECTION_SOURCE import com.navi.gold.util.Constants.SHOW_REWARD_GRATIFICATION import com.navi.gold.util.Constants.TYPE @@ -256,19 +259,7 @@ class DigitalGoldTransactionActivity : BaseActivity(), WidgetCallback, CsatCompl } ?: run { setPageContent(widgetResponse) - - widgetResponse.extraData?.screenDefinition?.let { screenDefinition -> - val gratificationFragment = - GratificationFragment.getInstance( - gratificationData = Gson().toJson(screenDefinition), - screenName = screenName, - dialogDismissListener = { - csatPopupDelay = 500 - startCsat(csatPopupDelay) - }, - ) - safelyOpenFragment(gratificationFragment, GratificationFragment.TAG) - } ?: run { handleScratchCardResponse(widgetResponse) } + handleScratchCardResponse(widgetResponse) } widgetResponse.extraData?.launchToastInfo?.contentWidget?.let { toastWidgets -> @@ -291,21 +282,38 @@ class DigitalGoldTransactionActivity : BaseActivity(), WidgetCallback, CsatCompl viewModel.scratchCardResponse.observe(this@DigitalGoldTransactionActivity) { scratchCardResponse -> - scratchCardSharedVm.setScratchCardScreenData(scratchCardResponse.data) + scratchCardResponse?.data?.scratchCardResponse?.rewardForm?.let { rewardForm -> + when (rewardForm) { + NONE -> { + scratchCardSharedVm.setScratchCardScreenData(scratchCardResponse.data) - val scratchCardFragment = - ScratchCardFragment.getInstance( - screenName = screenName, - dialogDismissListener = { startCsat(CSAT_POPUP_DELAY_TIME) }, - ) + val scratchCardFragment = + ScratchCardFragment.getInstance( + screenName = screenName, + dialogDismissListener = { startCsat(CSAT_POPUP_DELAY_TIME) }, + ) - safelyOpenFragment(scratchCardFragment, ScratchCardFragment.TAG) + safelyOpenFragment(scratchCardFragment, ScratchCardFragment.TAG) + } + else -> { + val gratificationFragment = + GratificationFragment.getInstance( + gratificationData = + Gson().toJson(scratchCardResponse.data.screenDefinition), + screenName = screenName, + dialogDismissListener = { startCsat(CSAT_POPUP_DELAY_TIME) }, + ) + + safelyOpenFragment(gratificationFragment, GratificationFragment.TAG) + } + } + } } } } private fun handleScratchCardResponse(widgetResponse: WidgetResponse) { - if (widgetResponse.extraData?.isScratchCardEnabled.orFalse()) { + if (widgetResponse.extraData?.reward?.isScratchCardEnabled.orFalse()) { fetchScratchCardData() } else { startCsat(CSAT_POPUP_DELAY_TIME) @@ -313,9 +321,29 @@ class DigitalGoldTransactionActivity : BaseActivity(), WidgetCallback, CsatCompl } private fun fetchScratchCardData() { - intent.getStringExtra(UPI_REQUEST_ID)?.let { - viewModel.fetchScratchCardData(naviUpiRequestId = it, screenName = screenName) - intent.removeExtra(UPI_REQUEST_ID) + + viewModel.digitalGoldTransactionWidgets.value?.extraData?.reward?.let { rewardData -> + val rewardEventId = + when (rewardData.scratchCardRewardType) { + GOLD_FIRST_INVESTMENT -> { + rewardData.rewardEventId + } + NAVI_UPI_TXN -> { + intent.getStringExtra(UPI_REQUEST_ID)?.let { rewardEventId -> + intent.removeExtra(UPI_REQUEST_ID) + rewardEventId + } + } + else -> { + null + } + } + rewardEventId?.let { + viewModel.fetchScratchCardOrGratificationData( + naviUpiRequestId = rewardEventId, + screenName = screenName, + ) + } } } diff --git a/android/navi-gold/src/main/java/com/navi/gold/util/Constants.kt b/android/navi-gold/src/main/java/com/navi/gold/util/Constants.kt index bfb24a69e8..051ca4b237 100644 --- a/android/navi-gold/src/main/java/com/navi/gold/util/Constants.kt +++ b/android/navi-gold/src/main/java/com/navi/gold/util/Constants.kt @@ -83,4 +83,8 @@ object Constants { const val DIGITAL_GOLD_PAYMENT = "DIGITAL_GOLD_PAYMENT" const val GOLD_OFFER_BOTTOM_SHEET = "GOLD_OFFER_BOTTOM_SHEET" const val SHOW_OFFER_BOTTOMSHEET = "SHOW_OFFER_BOTTOMSHEET" + const val SCRATCH_CARD = "SCRATCH_CARD" + const val NONE = "NONE" + const val GOLD_FIRST_INVESTMENT = "GOLD_FIRST_INVESTMENT" + const val NAVI_UPI_TXN = "NAVI_UPI_TXN" } diff --git a/android/navi-gold/src/main/java/com/navi/gold/viewmodels/DigitalGoldTransactionVM.kt b/android/navi-gold/src/main/java/com/navi/gold/viewmodels/DigitalGoldTransactionVM.kt index 3cf1677f30..e76ccf431c 100644 --- a/android/navi-gold/src/main/java/com/navi/gold/viewmodels/DigitalGoldTransactionVM.kt +++ b/android/navi-gold/src/main/java/com/navi/gold/viewmodels/DigitalGoldTransactionVM.kt @@ -192,7 +192,7 @@ constructor( this.isAutoClickConsumed = true } - fun fetchScratchCardData(naviUpiRequestId: String, screenName: String) { + fun fetchScratchCardOrGratificationData(naviUpiRequestId: String, screenName: String) { viewModelScope.launch(Dispatchers.IO) { scratchCardNudgeHelper .getGratification(requestId = naviUpiRequestId, screenName = screenName) diff --git a/android/navi-rr/src/main/java/com/navi/rr/scratchcard/helper/ScratchCardNudgeHelperImpl.kt b/android/navi-rr/src/main/java/com/navi/rr/scratchcard/helper/ScratchCardNudgeHelperImpl.kt index 1bb3f52756..26598a531a 100644 --- a/android/navi-rr/src/main/java/com/navi/rr/scratchcard/helper/ScratchCardNudgeHelperImpl.kt +++ b/android/navi-rr/src/main/java/com/navi/rr/scratchcard/helper/ScratchCardNudgeHelperImpl.kt @@ -13,6 +13,7 @@ import com.navi.base.cache.repository.NaviCacheRepository import com.navi.base.sharedpref.CommonPrefConstants import com.navi.base.sharedpref.PreferenceManager import com.navi.base.utils.FirestoreDataProviderImpl +import com.navi.base.utils.isNotNull import com.navi.common.checkmate.model.MetricInfo import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper.UPI_SCRATCH_CARD_REWARDS_POLLING_CONFIG @@ -328,6 +329,7 @@ constructor( amount = scratchCardData?.metadata?.subtitle, rewardType = scratchCardData?.rewardType, template = template, + rewardForm = scratchCardData?.rewardForm, ) template?.screenStructure?.templates?.get(screenTemplate)?.let { val inflatedTemplate = @@ -353,9 +355,17 @@ constructor( private fun getTemplateName( amount: String?, rewardType: String? = null, + rewardForm: String? = null, template: ScreenDefinition?, ): String? { val jsonMetaData = template?.jsonMetaData?.get(TEMPLATE_NAME).toJsonObject() + if (rewardForm.isNotNull() && rewardForm == NONE) { + return if (amount != ZERO_AMOUNT) { + jsonMetaData?.optJSONObject(rewardType)?.getString(INSTANT_REWARD) + } else { + null + } + } return if (amount != ZERO_AMOUNT) { jsonMetaData?.optJSONObject(rewardType)?.getString(REWARD) } else { @@ -373,6 +383,8 @@ constructor( const val TEMPLATE_NAME = "templateName" const val REWARD = "REWARD" const val NO_REWARD = "NO_REWARD" + const val INSTANT_REWARD = "INSTANT_REWARD" + const val NONE = "NONE" const val ZERO_AMOUNT = "0" private val POLL_INTERVAL = 1.seconds // TODO("Need to check with product") private const val MAX_POLL_COUNT = 20 // TODO("Need to check with product")