Feature/rewards blocked state handling (#6955)

* TP-33169 | Handle rewards blocked state

* TP-33169 | Mock

* TP-32564 | Removed unused files

* TP-35536 | Spotless apply

* TP-35536 | Replaced lottie json files with dotLottie file

---------

Co-authored-by: adarshs <adarsh.s@navi.com>
Co-authored-by: Girish Suragani <girish.suragani@navi.com>
This commit is contained in:
GitHubArchive\Adarsh S
2023-07-20 10:14:26 +05:30
committed by GitHub
parent de5b342597
commit f021885992
10 changed files with 87 additions and 39 deletions

View File

@@ -1,3 +1,10 @@
/*
*
* * Copyright © 2023 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
package com.navi.rr.rewards.ui.bottomsheet
import android.content.Context
@@ -5,11 +12,13 @@ import android.util.AttributeSet
import android.view.LayoutInflater
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.databinding.DataBindingUtil
import com.navi.base.model.ImageDetail
import com.navi.base.model.NaviWidgetClickWithActionData
import com.navi.design.utils.CornerRadius
import com.navi.design.utils.getNaviDrawableFromBackend
import com.navi.design.utils.parseColorSafe
import com.navi.design.utils.spannedText
import com.navi.naviwidgets.extensions.showWhenDataIsAvailable
import com.navi.naviwidgets.models.response.RewardInfo
import com.navi.rr.R
import com.navi.rr.databinding.LayoutRewardsBottomsheetBinding
@@ -35,6 +44,9 @@ constructor(parentContext: Context, attrs: AttributeSet? = null, defStyleAttr: I
) {
this.rewardInfo = rewardInfo
binding.apply {
rewardInfo?.imageUrl?.let { url ->
ivIcon.showWhenDataIsAvailable(imageDetail = ImageDetail(url = url))
}
tvTitle.text = rewardInfo?.title?.text.spannedText(
context,
rewardInfo?.title?.span
@@ -79,4 +91,4 @@ constructor(parentContext: Context, attrs: AttributeSet? = null, defStyleAttr: I
}
}
}
}
}

View File

@@ -13,8 +13,8 @@ import android.view.View
import android.view.View.GONE
import android.view.View.VISIBLE
import androidx.core.view.isVisible
import com.navi.base.deeplink.DeepLinkManager
import androidx.lifecycle.ViewModelProvider
import com.navi.base.deeplink.DeepLinkManager
import com.navi.base.model.ActionData
import com.navi.base.model.ImageDetail
import com.navi.base.model.NaviWidgetClickWithActionData
@@ -24,7 +24,6 @@ import com.navi.common.model.RewardBottomSheetType
import com.navi.common.model.RewardState
import com.navi.common.ui.dialog.BaseDialogFragment
import com.navi.common.utils.Constants.WEB_URL
import com.navi.rr.utils.Constants.REWARDS_UPI
import com.navi.common.utils.toCtaData
import com.navi.design.utils.CornerRadius
import com.navi.design.utils.getNaviDrawableFromBackend
@@ -43,6 +42,7 @@ import com.navi.rr.rewards.ui.bottomsheet.RewardsPLUnlockDetailsBottomSheetView
import com.navi.rr.rewards.ui.bottomsheet.RewardsUnLockDetailsBottomSheetView
import com.navi.rr.rewards.viewmodels.RewardDashboardSharedVM
import com.navi.rr.utils.Constants.REWARDS_DETAILS_SCREEN
import com.navi.rr.utils.Constants.REWARDS_UPI
import com.navi.rr.utils.NaviRRAnalytics
class RewardsDetailFragment :
@@ -135,22 +135,26 @@ class RewardsDetailFragment :
ImageDetail(url = rewardsWidgetData?.rewardsInfo?.largeIconUrl)
)
if (rewardsWidgetData?.rewardsInfo?.showCornerImg == true) {
ivCornerImg.setImageResource(
when (rewardsWidgetData?.rewardsInfo?.rewardType) {
RewardType.GOLD.name -> {
ivRewardIcon.isVisible = false
com.navi.naviwidgets.R.drawable.ic_rewards_detail_corner
if (rewardsWidgetData?.rewardsInfo?.isBlocked == true) {
ivCornerImg.setImageResource(com.navi.naviwidgets.R.drawable.ic_rewards_blocked_corner)
} else {
ivCornerImg.setImageResource(
when (rewardsWidgetData?.rewardsInfo?.rewardType) {
RewardType.GOLD.name -> {
ivRewardIcon.isVisible = false
com.navi.naviwidgets.R.drawable.ic_rewards_detail_corner
}
RewardType.CASH.name -> {
ivRewardIcon.isVisible = false
com.navi.naviwidgets.R.drawable.ic_rewards_detail_corner
}
else -> {
ivRewardIcon.isVisible = true
com.navi.naviwidgets.R.drawable.ic_rewards_detail_corner
}
}
RewardType.CASH.name -> {
ivRewardIcon.isVisible = false
com.navi.naviwidgets.R.drawable.ic_rewards_detail_corner
}
else -> {
ivRewardIcon.isVisible = true
com.navi.naviwidgets.R.drawable.ic_rewards_detail_corner
}
}
)
)
}
}
ivRewardLottie.showWhenDataIsAvailable(
lottieName = rewardsWidgetData?.rewardsInfo?.lottieFileName

View File

@@ -20,8 +20,8 @@
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/ivIcon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_width="@dimen/dp_24"
android:layout_height="@dimen/dp_24"
android:layout_marginTop="@dimen/layout_dp_16"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
@@ -45,6 +45,7 @@
android:layout_marginTop="@dimen/layout_dp_8"
android:layout_marginBottom="@dimen/layout_dp_32"
android:lineSpacingExtra="@dimen/layout_dp_4"
android:autoLink="email"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvTitle"

View File

@@ -39,14 +39,12 @@ import com.airbnb.lottie.LottieAnimationView
import com.airbnb.lottie.LottieCompositionFactory
import com.airbnb.lottie.LottieDrawable
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.navi.base.model.ActionData
import com.navi.base.model.CtaData
import com.navi.base.model.DrawableData
import com.navi.base.model.ImageDetail
import com.navi.base.utils.*
import com.navi.design.editview.FormEditText
import com.navi.design.font.FontWeightEnum
import com.navi.design.textview.model.TextWithStyle
import com.navi.design.utils.*
import com.navi.design.utils.CustomTypefaceSpan
@@ -1231,6 +1229,12 @@ fun LottieAnimationView.showWhenDataIsAvailable(
LottieEnums.DIGILOCKER_SUCCESS.name -> {
setAnimation(R.raw.digilocker_success)
}
LottieEnums.REWARDS_BLOCKED_POPUP_COIN.name -> {
setAnimation(R.raw.rewards_blocked_large)
}
LottieEnums.MY_REWARDS_BLOCKED_COIN.name -> {
setAnimation(R.raw.rewards_blocked_small)
}
else -> {
isInAppLottie = false
CoroutineScope(Dispatchers.Main).launch {

View File

@@ -79,7 +79,9 @@ data class RewardsInfo(
@SerializedName("lottieFileName")
val lottieFileName: String? = null,
@SerializedName("lottieFileNameMyRewards")
val lottieFileNameMyRewards: String? = null
val lottieFileNameMyRewards: String? = null,
@SerializedName("isBlocked")
val isBlocked: Boolean? = false
) : Serializable, Parcelable
@Parcelize
@@ -129,7 +131,9 @@ data class RewardInfo(
@SerializedName("infoText")
val infoText: NaviTextComponent? = null,
@SerializedName("actionData")
val actionData: ActionData? = null
val actionData: ActionData? = null,
@SerializedName("imageUrl")
val imageUrl: String? = null
) : Serializable, Parcelable
@Parcelize

View File

@@ -85,5 +85,7 @@ enum class LottieEnums {
NAVI_REWARDS_GOLD_V2,
NAVI_REWARDS_GOLD_DISABLED_V2,
GOLD_REWARD_CONFETTI,
DIGILOCKER_SUCCESS
DIGILOCKER_SUCCESS,
REWARDS_BLOCKED_POPUP_COIN,
MY_REWARDS_BLOCKED_COIN
}

View File

@@ -14,8 +14,6 @@ import androidx.constraintlayout.widget.ConstraintLayout
import com.navi.base.model.ImageDetail
import com.navi.base.utils.isNull
import com.navi.design.utils.CornerRadius
import com.navi.design.utils.deviceWidth
import com.navi.design.utils.dpToPxInInt
import com.navi.design.utils.getNaviDrawableFromBackend
import com.navi.design.utils.parseColorSafe
import com.navi.design.utils.spannedText
@@ -71,19 +69,23 @@ class RewardsWidgetLayout @JvmOverloads constructor(
tvRewardPrice.showWhenDataIsAvailable(showText = info.widgetData.rewardsInfo?.value)
tvRewardType.showWhenDataIsAvailable(showText = info.widgetData.rewardsInfo?.label)
if (info.widgetData.rewardsInfo?.showCornerImg == true) {
ivCornerImg.setImageResource(
when (info.widgetData.rewardsInfo.rewardType) {
RewardType.GOLD.name -> {
R.drawable.ic_rewards_detail_corner
if (info.widgetData.rewardsInfo.isBlocked == true) {
ivCornerImg.setImageResource(R.drawable.ic_rewards_blocked_corner)
} else {
ivCornerImg.setImageResource(
when (info.widgetData.rewardsInfo.rewardType) {
RewardType.GOLD.name -> {
R.drawable.ic_rewards_detail_corner
}
RewardType.CASH.name -> {
R.drawable.ic_rewards_detail_corner
}
else -> {
R.drawable.ic_rewards_detail_corner
}
}
RewardType.CASH.name -> {
R.drawable.ic_rewards_detail_corner
}
else -> {
R.drawable.ic_rewards_detail_corner
}
}
)
)
}
}
if(info.widgetData.rewardsInfo?.smallIconUrl.isNull()) {
ivRewardIcon.visibility = View.GONE

View File

@@ -0,0 +1,19 @@
<!--
~ /*
~ *
~ * * Copyright © 2023 by Navi Technologies Private Limited
~ * * All rights reserved. Strictly confidential
~ *
~ */
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="95dp"
android:height="64dp"
android:viewportWidth="95"
android:viewportHeight="64">
<path
android:fillColor="#CAC7C7"
android:pathData="M-0,63.642C-0,55.284 2.442,47.008 7.188,39.287C11.934,31.566 18.89,24.55 27.659,18.64C36.429,12.731 46.839,8.043 58.297,4.844C69.754,1.646 82.034,-0 94.436,0V47.218C94.436,56.289 87.082,63.642 78.012,63.642H-0Z" />
</vector>