Revert "TP-41269 | Dg buy journey loader removal " (#8188)
This commit is contained in:
@@ -14,13 +14,11 @@ import android.os.PersistableBundle
|
||||
import android.view.MenuItem
|
||||
import android.view.MotionEvent
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.EditText
|
||||
import android.widget.TextView
|
||||
import androidx.annotation.LayoutRes
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.appcompat.widget.Toolbar
|
||||
import androidx.databinding.DataBindingUtil
|
||||
import androidx.fragment.app.DialogFragment
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.FragmentManager
|
||||
@@ -46,7 +44,6 @@ import com.navi.base.utils.orFalse
|
||||
import com.navi.base.utils.orZero
|
||||
import com.navi.base.utils.toLongWithSafe
|
||||
import com.navi.common.R
|
||||
import com.navi.common.databinding.BaseActivityBinding
|
||||
import com.navi.common.firebasedb.FirebaseDataHelper
|
||||
import com.navi.common.firebasedb.FirebaseDataReceiveListener
|
||||
import com.navi.common.listeners.ActivityFinishListener
|
||||
@@ -90,11 +87,11 @@ import com.navi.common.utils.updateSessionId
|
||||
import com.navi.common.viewmodel.BaseVM
|
||||
import com.navi.common.viewmodel.FeedbackVM
|
||||
import com.navi.naviwidgets.models.LottieFieldData
|
||||
import java.lang.ref.WeakReference
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.launch
|
||||
import timber.log.Timber
|
||||
import java.lang.ref.WeakReference
|
||||
|
||||
abstract class BaseActivity :
|
||||
AppCompatActivity(),
|
||||
@@ -107,7 +104,6 @@ abstract class BaseActivity :
|
||||
ProviderConfigListener,
|
||||
InAppUpdateListener {
|
||||
|
||||
private lateinit var binding: BaseActivityBinding
|
||||
private var toolbar: Toolbar? = null
|
||||
private var toolbarHeading: TextView? = null
|
||||
|
||||
@@ -140,7 +136,6 @@ abstract class BaseActivity :
|
||||
|
||||
var eventTrackingScreenName: String? = null
|
||||
protected val queryMap = HashMap<String, String>()
|
||||
private var isBlockInteractability = false
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {
|
||||
super.onCreate(savedInstanceState, persistentState)
|
||||
@@ -149,36 +144,13 @@ abstract class BaseActivity :
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
binding = DataBindingUtil.setContentView(
|
||||
this,
|
||||
R.layout.base_activity
|
||||
)
|
||||
super.onCreate(savedInstanceState)
|
||||
handleRedirection()
|
||||
}
|
||||
|
||||
override fun setContentView(view: View?) {
|
||||
unblockInteractability()
|
||||
if (view?.parent != null) {
|
||||
(view.parent as? ViewGroup)?.removeView(view)
|
||||
}
|
||||
binding.content.addView(view)
|
||||
super.setContentView(binding.root)
|
||||
layoutView = binding.root
|
||||
}
|
||||
|
||||
fun unblockInteractability() {
|
||||
isBlockInteractability = false
|
||||
binding.overlayView.visibility = View.GONE
|
||||
}
|
||||
|
||||
fun blockInteractability() {
|
||||
isBlockInteractability = true
|
||||
binding.overlayView.visibility = View.VISIBLE
|
||||
}
|
||||
|
||||
fun isBlockInteractability(): Boolean {
|
||||
return this.isBlockInteractability
|
||||
super.setContentView(view)
|
||||
layoutView = view
|
||||
}
|
||||
|
||||
private fun handleRedirection() {
|
||||
|
||||
@@ -24,7 +24,6 @@ import com.navi.base.utils.orTrue
|
||||
import com.navi.common.R
|
||||
import com.navi.common.databinding.LayoutWidgetsSupportedBottomsheetBinding
|
||||
import com.navi.common.listeners.AppShareListener
|
||||
import com.navi.common.model.common.WidgetResponse
|
||||
import com.navi.common.ui.fragment.BaseBottomSheet
|
||||
import com.navi.common.utils.CommonNaviAnalytics
|
||||
import com.navi.common.utils.Constants.ALLOW_PERMISSIONS
|
||||
@@ -38,22 +37,16 @@ import com.navi.common.utils.Constants.WHATSAPP_SHARE
|
||||
import com.navi.common.utils.observeNonNull
|
||||
import com.navi.common.utils.shareReferral
|
||||
import com.navi.common.utils.toCtaData
|
||||
import com.navi.common.viewmodel.WidgetSupportedBottomSheetSharedVM
|
||||
import com.navi.naviwidgets.actions.ImplicitShareClickAction
|
||||
import com.navi.naviwidgets.actions.NaviWidgetClick
|
||||
import com.navi.naviwidgets.adapters.NaviAdapter
|
||||
import com.navi.naviwidgets.callbacks.WidgetCallback
|
||||
import com.navi.naviwidgets.models.ButtonLoaderState
|
||||
import com.navi.naviwidgets.models.ContainerWidget
|
||||
import com.navi.naviwidgets.models.NaviWidget
|
||||
import com.navi.naviwidgets.models.PaymentWidget
|
||||
import com.navi.naviwidgets.models.ShareData
|
||||
import com.navi.naviwidgets.models.TextWithTimerWidget
|
||||
import com.navi.naviwidgets.models.WidgetChangedData
|
||||
import com.navi.naviwidgets.utils.APP_SHARE
|
||||
import com.navi.naviwidgets.utils.STORE_BANK_UPI_ID
|
||||
import com.navi.naviwidgets.utils.WIDGET_STATE_CHANGE
|
||||
import com.navi.naviwidgets.viewholder.ViewHolderFactoryImpl
|
||||
import com.navi.common.viewmodel.WidgetSupportedBottomSheetSharedVM
|
||||
import com.navi.naviwidgets.actions.ImplicitShareClickAction
|
||||
import com.navi.naviwidgets.utils.APP_SHARE
|
||||
|
||||
class WidgetsSupportedBottomSheet : BaseBottomSheet(), WidgetCallback {
|
||||
|
||||
@@ -138,9 +131,7 @@ class WidgetsSupportedBottomSheet : BaseBottomSheet(), WidgetCallback {
|
||||
val hostActivity = activity
|
||||
if (hostActivity is WidgetCallback) {
|
||||
hostActivity.onClick(naviClickAction, widgetId)
|
||||
if (arguments?.getBoolean(IS_DISMISSABLE_KEY) == true) {
|
||||
safelyDismissDialog()
|
||||
}
|
||||
safelyDismissDialog()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -197,7 +188,7 @@ class WidgetsSupportedBottomSheet : BaseBottomSheet(), WidgetCallback {
|
||||
safelyDismissDialog()
|
||||
activity?.onBackPressed()
|
||||
return
|
||||
} else if (naviClickAction.actionData?.url == OFFERS_INFO) {
|
||||
} else if(naviClickAction.actionData?.url == OFFERS_INFO) {
|
||||
safelyDismissDialog()
|
||||
return
|
||||
} else if (naviClickAction.actionData?.type == SELL_GOLD) {
|
||||
@@ -229,44 +220,6 @@ class WidgetsSupportedBottomSheet : BaseBottomSheet(), WidgetCallback {
|
||||
}
|
||||
}
|
||||
|
||||
fun stopTimer() {
|
||||
naviAdapter.list.forEachIndexed { index, naviWidget ->
|
||||
if (naviWidget is ContainerWidget) {
|
||||
val itemsOfContainerWidget = naviWidget.widgetData?.items
|
||||
var textWithTimerWidget: TextWithTimerWidget? = null
|
||||
itemsOfContainerWidget?.forEach { item ->
|
||||
if (item is TextWithTimerWidget) {
|
||||
textWithTimerWidget = item
|
||||
textWithTimerWidget?.widgetData?.stopTimer = true
|
||||
naviAdapter.notifyItemChanged(
|
||||
index,
|
||||
WidgetChangedData(WIDGET_STATE_CHANGE, textWithTimerWidget)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun setButtonLoaderState(response: WidgetResponse?, state: Boolean) {
|
||||
response?.contentWidget?.let { contentWidget ->
|
||||
naviAdapter.list.forEachIndexed { index, item ->
|
||||
if (item is PaymentWidget) {
|
||||
var paymentWidget: PaymentWidget? = null
|
||||
paymentWidget = item
|
||||
paymentWidget?.widgetData?.buttonLoaderState = ButtonLoaderState(state)
|
||||
naviAdapter.notifyItemChanged(
|
||||
index,
|
||||
WidgetChangedData(
|
||||
WIDGET_STATE_CHANGE,
|
||||
paymentWidget?.widgetData?.buttonLoaderState
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCancel(dialog: DialogInterface) {
|
||||
super.onCancel(dialog)
|
||||
sharedVM.clearData()
|
||||
@@ -278,12 +231,10 @@ class WidgetsSupportedBottomSheet : BaseBottomSheet(), WidgetCallback {
|
||||
private const val IS_CANCELLABLE_KEY = "isCancellable"
|
||||
private const val ALLOW_TOP_PADDING = "ALLOW_TOP_PADDING"
|
||||
private const val BG_COLOR = "BG_COLOR"
|
||||
private const val IS_DISMISSABLE_KEY = "IS_DISMISSABLE"
|
||||
|
||||
fun getInstance(
|
||||
isCancellable: Boolean = true,
|
||||
allowTopPadding: Boolean = true,
|
||||
isDismissable: Boolean = true,
|
||||
bgColor: Int = Color.WHITE
|
||||
): WidgetsSupportedBottomSheet {
|
||||
return WidgetsSupportedBottomSheet().apply {
|
||||
@@ -291,7 +242,6 @@ class WidgetsSupportedBottomSheet : BaseBottomSheet(), WidgetCallback {
|
||||
putBoolean(IS_CANCELLABLE_KEY, isCancellable)
|
||||
putBoolean(ALLOW_TOP_PADDING, allowTopPadding)
|
||||
putInt(BG_COLOR, bgColor)
|
||||
putBoolean(IS_DISMISSABLE_KEY, isDismissable)
|
||||
}
|
||||
arguments = bundle
|
||||
}
|
||||
|
||||
@@ -19,15 +19,15 @@ import com.navi.base.utils.orZero
|
||||
import com.navi.common.R
|
||||
import com.navi.common.databinding.NewCommonBottomSheetBinding
|
||||
import com.navi.common.listeners.NewBottomSheetListener
|
||||
import com.navi.design.textview.NaviTextView
|
||||
import com.navi.design.utils.CornerRadius
|
||||
import com.navi.design.utils.dpToPx
|
||||
import com.navi.design.textview.NaviTextView
|
||||
import com.navi.design.utils.dpToPx
|
||||
import com.navi.design.utils.dpToPxInInt
|
||||
import com.navi.design.utils.getNaviDrawable
|
||||
import com.navi.design.utils.isValidHexColor
|
||||
import com.navi.design.utils.parseColorSafe
|
||||
import com.navi.naviwidgets.extensions.showWhenDataIsAvailable
|
||||
import com.navi.naviwidgets.utils.setButtonLoaderState
|
||||
|
||||
class NewCommonBottomSheet : BaseBottomSheet() {
|
||||
|
||||
@@ -100,19 +100,12 @@ class NewCommonBottomSheet : BaseBottomSheet() {
|
||||
data?.bottomSheetName?.let {
|
||||
NaviTrackEvent.trackEvent(it)
|
||||
}
|
||||
if (isValidHexColor(data?.titleTextColor)) {
|
||||
if(isValidHexColor(data?.titleTextColor)) {
|
||||
titleTv.setTextColor(Color.parseColor(data?.titleTextColor))
|
||||
}
|
||||
primaryBtn.setOnClickListener {
|
||||
listener?.buttonClick(data?.actionData)
|
||||
if (arguments?.getBoolean(IS_BUTTON_LOADER_PRESENT) == true) {
|
||||
data?.title?.let {
|
||||
var text = it
|
||||
setButtonLoaderState(binding.primaryBtn, binding.buttonLoader, true, text)
|
||||
}
|
||||
} else {
|
||||
safelyDismissDialog()
|
||||
}
|
||||
safelyDismissDialog()
|
||||
}
|
||||
secondaryBtn.setOnClickListener {
|
||||
listener?.buttonClick(data?.secondaryActionData)
|
||||
@@ -155,16 +148,11 @@ class NewCommonBottomSheet : BaseBottomSheet() {
|
||||
companion object {
|
||||
const val TAG = "NEW_COMMON_BOTTOM_SHEET"
|
||||
private const val DATA = "DATA"
|
||||
private const val IS_BUTTON_LOADER_PRESENT = "IS_START_BUTTON_LOADER"
|
||||
fun getInstance(
|
||||
data: BottomSheetData?,
|
||||
isButtonLoaderPresent: Boolean = false
|
||||
) =
|
||||
fun getInstance(data: BottomSheetData?) =
|
||||
NewCommonBottomSheet()
|
||||
.apply {
|
||||
arguments = Bundle().apply {
|
||||
this.putParcelable(DATA, data)
|
||||
putBoolean(IS_BUTTON_LOADER_PRESENT, isButtonLoaderPresent)
|
||||
isCancelable = data?.isCancelable == true
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
package com.navi.common.ui.view
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import android.view.MotionEvent
|
||||
import android.widget.ScrollView
|
||||
|
||||
|
||||
class ClickBlockingOverlayView : ScrollView {
|
||||
constructor(context: Context) : super(context)
|
||||
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
|
||||
|
||||
override fun onTouchEvent(event: MotionEvent?): Boolean {
|
||||
return when (event?.action) {
|
||||
MotionEvent.ACTION_DOWN,
|
||||
MotionEvent.ACTION_MOVE,
|
||||
MotionEvent.ACTION_UP -> true
|
||||
|
||||
else -> super.onTouchEvent(event)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -165,11 +165,7 @@ object Constants {
|
||||
const val SELL_GOLD = "SELL_GOLD"
|
||||
const val GOLD = "gold"
|
||||
const val GOLD_TRANSACTION = "gold/transactions"
|
||||
const val GOLD_BUY_URL = "gold/buy"
|
||||
const val GOLD_TRANSACTION_HISTORY = "GOLD_TRANSACTION_HISTORY"
|
||||
const val GOLD_PAYMENT = "GOLD_PAYMENT"
|
||||
const val GOLD_KYC = "GOLD-KYC"
|
||||
const val GOLD_BUY = "GOLD_BUY"
|
||||
const val KEY = "key"
|
||||
const val REWARDS_ANNOUNCEMENT_SCREEN = "rewards_announcement_screen"
|
||||
const val DISMISS_TEXT = "dismiss"
|
||||
|
||||
@@ -40,8 +40,8 @@ class SoftRefLruCache<K, V>(private val maxSize: Int = DEFAULT_CACHE_SIZE) {
|
||||
maxConsumptions: Int = DEFAULT_MAX_CONSUMPTIONS
|
||||
) {
|
||||
|
||||
//if these values are less than zero, there is no point in storing them
|
||||
if (maxTtl <= 0 || maxConsumptions <= 0)
|
||||
//if these values are less than zero, there is no point in storing them
|
||||
if(maxTtl <= 0 || maxConsumptions <= 0)
|
||||
return
|
||||
|
||||
// Create a CacheEntry with a SoftReference to the value
|
||||
@@ -138,7 +138,7 @@ class SoftRefLruCache<K, V>(private val maxSize: Int = DEFAULT_CACHE_SIZE) {
|
||||
private fun isValidEntry(key: K): Boolean {
|
||||
val entry = cache[key]
|
||||
return (entry != null)
|
||||
&& (entry.consumptions < entry.maxConsumptions)
|
||||
&& (entry.consumptions <= entry.maxConsumptions)
|
||||
&& ((entry.entryTime + entry.maxTtl) >= System.currentTimeMillis())
|
||||
&& (entry.value.get() != null)
|
||||
}
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
<layout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/parent"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/content"
|
||||
android:layout_width="@dimen/dp_0"
|
||||
android:layout_height="@dimen/dp_0"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<com.navi.common.ui.view.ClickBlockingOverlayView
|
||||
android:id="@+id/overlayView"
|
||||
android:layout_width="@dimen/dp_0"
|
||||
android:layout_height="@dimen/dp_0"
|
||||
android:background="@color/shadow_color"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
</layout>
|
||||
@@ -73,45 +73,18 @@
|
||||
android:visibility="gone"
|
||||
tools:text="Continue" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginTop="@dimen/dp_32">
|
||||
|
||||
<com.navi.design.textview.NaviTextView
|
||||
android:id="@+id/primaryBtn"
|
||||
style="@style/Small_Bold_White"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_width="@dimen/dp_0"
|
||||
android:layout_height="@dimen/dp_48"
|
||||
android:layout_marginTop="@dimen/dp_32"
|
||||
android:layout_weight="@integer/integer_1"
|
||||
android:background="@drawable/rounded_purple_color_enabled_state"
|
||||
android:background="@drawable/rounded_positive_button_bg"
|
||||
android:gravity="center"
|
||||
android:letterSpacing="0.02"
|
||||
android:visibility="visible"
|
||||
tools:text="Continue" />
|
||||
|
||||
<com.airbnb.lottie.LottieAnimationView
|
||||
android:id="@+id/button_loader"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="@dimen/dp_48"
|
||||
android:layout_marginTop="@dimen/dp_32"
|
||||
android:background="@drawable/rounded_purple_color_enabled_state"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintBottom_toBottomOf="@id/primaryBtn"
|
||||
app:layout_constraintEnd_toEndOf="@id/primaryBtn"
|
||||
app:layout_constraintHorizontal_bias="0.498"
|
||||
app:layout_constraintStart_toStartOf="@id/primaryBtn"
|
||||
app:layout_constraintTop_toTopOf="@id/primaryBtn"
|
||||
app:layout_constraintVertical_bias="1.0"
|
||||
app:lottie_autoPlay="false"
|
||||
app:lottie_loop="true"
|
||||
app:lottie_rawRes="@raw/cta_loader"
|
||||
app:lottie_speed="1.0" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
</LinearLayout>
|
||||
|
||||
<com.navi.design.textview.NaviTextView
|
||||
android:id="@+id/tertiaryBtn"
|
||||
@@ -127,5 +100,4 @@
|
||||
tools:text="Cancel" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</layout>
|
||||
@@ -1,9 +1,6 @@
|
||||
package com.navi.common.utils
|
||||
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Assert.assertFalse
|
||||
import org.junit.Assert.assertNull
|
||||
import org.junit.Assert.assertTrue
|
||||
import org.junit.Assert.*
|
||||
import org.junit.Test
|
||||
import java.lang.Thread.sleep
|
||||
|
||||
@@ -42,8 +39,10 @@ class SoftRefLruCacheTest {
|
||||
val cache = SoftRefLruCache<String, Int>()
|
||||
|
||||
cache.add("key1", 1, maxConsumptions = 2)
|
||||
assertEquals(cache.get("key1"), 1)
|
||||
assertEquals(cache.get("key1"), 1)
|
||||
cache.get("key1")
|
||||
cache.get("key1")
|
||||
cache.get("key1")
|
||||
|
||||
assertNull(cache.get("key1")) // Exceeds maxConsumptions
|
||||
}
|
||||
|
||||
|
||||
@@ -12,7 +12,6 @@ import android.os.Bundle
|
||||
import androidx.activity.viewModels
|
||||
import androidx.databinding.DataBindingUtil
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import com.navi.base.model.ActionData
|
||||
import com.navi.base.model.NaviClickAction
|
||||
import com.navi.common.listeners.BackPressedListener
|
||||
@@ -22,11 +21,11 @@ import com.navi.common.ui.activity.BaseActivity
|
||||
import com.navi.common.ui.fragment.PaymentCheckFragment
|
||||
import com.navi.common.utils.Constants.GOLD
|
||||
import com.navi.common.utils.Constants.SUB_REDIRECT
|
||||
import com.navi.common.utils.observeNonNull
|
||||
import com.navi.gold.R
|
||||
import com.navi.gold.databinding.ActivityDigitalGoldBuyBinding
|
||||
import com.navi.gold.listeners.CommonPermissionRequestListener
|
||||
import com.navi.gold.model.DigitalGoldPaymentResponse
|
||||
import com.navi.gold.ui.CommonPermissionFragment
|
||||
import com.navi.gold.util.Constants.AMOUNT_DATA
|
||||
import com.navi.gold.util.Constants.TYPE
|
||||
import com.navi.gold.util.GoldAnalytics.DIGITAL_GOLD_BUY_ACTIVITY
|
||||
@@ -51,24 +50,10 @@ class DigitalGoldBuyActivity : BaseActivity(), FragmentInterchangeListener,
|
||||
R.layout.activity_digital_gold_buy
|
||||
)
|
||||
setContentView(binding.root)
|
||||
initObserver()
|
||||
loadFragment(intent.getStringExtra(SUB_REDIRECT) ?: DigitalGoldBuyFragment.TAG)
|
||||
}
|
||||
|
||||
private fun initObserver() {
|
||||
lifecycleScope.launchWhenResumed {
|
||||
sharedVM.isLoading.observeNonNull(this@DigitalGoldBuyActivity) { buttonLoaderState ->
|
||||
if (buttonLoaderState) {
|
||||
blockInteractability()
|
||||
} else {
|
||||
unblockInteractability()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onBackPressed() {
|
||||
if (isBlockInteractability()) return
|
||||
|
||||
var isBackPressedConsumed = false
|
||||
|
||||
@@ -85,7 +70,7 @@ class DigitalGoldBuyActivity : BaseActivity(), FragmentInterchangeListener,
|
||||
|
||||
override fun onClick(naviClickAction: NaviClickAction, widgetId: String?) {
|
||||
val currFragment = supportFragmentManager.findFragmentById(R.id.flLoadFragment)
|
||||
if (currFragment is WidgetCallback) {
|
||||
if(currFragment is WidgetCallback){
|
||||
currFragment.onClick(naviClickAction, widgetId)
|
||||
}
|
||||
}
|
||||
@@ -127,7 +112,7 @@ class DigitalGoldBuyActivity : BaseActivity(), FragmentInterchangeListener,
|
||||
|
||||
override fun navigateToNextScreen(currentScreenTag: String, args: Bundle) {
|
||||
|
||||
when (currentScreenTag) {
|
||||
when(currentScreenTag){
|
||||
|
||||
GOLD -> {
|
||||
val targetIntent = Intent(this, DigitalGoldHomeActivity::class.java)
|
||||
|
||||
@@ -45,20 +45,33 @@ import com.navi.common.ui.fragment.BaseFragment
|
||||
import com.navi.common.ui.fragment.NewCommonBottomSheet
|
||||
import com.navi.common.ui.fragment.PaymentCheckFragment
|
||||
import com.navi.common.utils.ApiPollScheduler
|
||||
import com.navi.common.utils.Constants
|
||||
import com.navi.common.utils.Constants.APP
|
||||
import com.navi.common.utils.Constants.GOLD
|
||||
import com.navi.common.utils.Constants.GOLD_BUY
|
||||
import com.navi.common.utils.Constants.REFRESH
|
||||
import com.navi.common.utils.TemporaryStorageHelper
|
||||
import com.navi.common.utils.log
|
||||
import com.navi.common.utils.observeNonNull
|
||||
import com.navi.common.utils.toCtaData
|
||||
import com.navi.common.viewmodel.PaymentCheckViewModel
|
||||
import com.navi.common.viewmodel.WidgetFullScreenDialogSharedVM
|
||||
import com.navi.common.viewmodel.PaymentCheckViewModel
|
||||
import com.navi.common.viewmodel.WidgetSupportedBottomSheetSharedVM
|
||||
import com.navi.gold.R
|
||||
import com.navi.gold.databinding.FragmentDigitalGoldBuyBinding
|
||||
import com.navi.naviwidgets.actions.NaviWidgetClick
|
||||
import com.navi.naviwidgets.actions.PaymentWidgetClickAction
|
||||
import com.navi.naviwidgets.adapters.NaviAdapter
|
||||
import com.navi.naviwidgets.callbacks.WidgetCallback
|
||||
import com.navi.naviwidgets.extensions.showWhenDataIsAvailable
|
||||
import com.navi.naviwidgets.models.ContainerWidget
|
||||
import com.navi.naviwidgets.models.NaviWidget
|
||||
import com.navi.naviwidgets.models.TextWithTimerWidget
|
||||
import com.navi.naviwidgets.models.WidgetChangedData
|
||||
import com.navi.naviwidgets.utils.WIDGET_STATE_CHANGE
|
||||
import com.navi.naviwidgets.viewholder.ViewHolderFactoryImpl
|
||||
import com.navi.payment.paymenthandler.model.PaymentRequest
|
||||
import com.navi.payment.paymenthandler.model.PaymentStatusData
|
||||
import com.navi.payment.razorpay.RazorpayHelper
|
||||
import com.navi.payment.utils.PaymentAnalytics
|
||||
import com.navi.gold.model.DigitalGoldActionCheckResponse
|
||||
import com.navi.gold.model.DigitalGoldPollingResponse
|
||||
import com.navi.gold.model.GoldSellOrderResponse
|
||||
@@ -68,9 +81,7 @@ import com.navi.gold.util.Constants.AMOUNT_DATA
|
||||
import com.navi.gold.util.Constants.APP_ACTION_OBJECTIVE_REWARDS_CAMPAIGN_ONBOARD
|
||||
import com.navi.gold.util.Constants.BUY_GOLD
|
||||
import com.navi.gold.util.Constants.COMMON_BOTTOM_SHEET_ID
|
||||
import com.navi.gold.util.Constants.GOlD_KYC_BUY
|
||||
import com.navi.gold.util.Constants.SHOW_WIDGET_BOTTOM_SHEET
|
||||
import com.navi.gold.util.Constants.TTL_SOFT_REF_CACHE_API_EXPIRY_TIME
|
||||
import com.navi.gold.util.GoldAnalytics
|
||||
import com.navi.gold.util.GoldAnalytics.DIGITAL_GOLD_2X_REWARD_BOTTOM_SHEET_INIT
|
||||
import com.navi.gold.util.GoldAnalytics.DIGITAL_GOLD_BUY_SCREEN
|
||||
@@ -79,23 +90,6 @@ import com.navi.gold.util.toActionCheckResponse
|
||||
import com.navi.gold.viewmodels.DigitalGoldBuySharedVM
|
||||
import com.navi.gold.viewmodels.DigitalGoldBuyVM
|
||||
import com.navi.gold.viewmodels.DigitalGoldCommonVM
|
||||
import com.navi.naviwidgets.actions.NaviWidgetClick
|
||||
import com.navi.naviwidgets.actions.PaymentWidgetClickAction
|
||||
import com.navi.naviwidgets.adapters.NaviAdapter
|
||||
import com.navi.naviwidgets.callbacks.WidgetCallback
|
||||
import com.navi.naviwidgets.extensions.showWhenDataIsAvailable
|
||||
import com.navi.naviwidgets.models.ButtonLoaderState
|
||||
import com.navi.naviwidgets.models.ContainerWidget
|
||||
import com.navi.naviwidgets.models.NaviWidget
|
||||
import com.navi.naviwidgets.models.PaymentWidget
|
||||
import com.navi.naviwidgets.models.TextWithTimerWidget
|
||||
import com.navi.naviwidgets.models.WidgetChangedData
|
||||
import com.navi.naviwidgets.utils.WIDGET_STATE_CHANGE
|
||||
import com.navi.naviwidgets.viewholder.ViewHolderFactoryImpl
|
||||
import com.navi.payment.paymenthandler.model.PaymentRequest
|
||||
import com.navi.payment.paymenthandler.model.PaymentStatusData
|
||||
import com.navi.payment.razorpay.RazorpayHelper
|
||||
import com.navi.payment.utils.PaymentAnalytics
|
||||
import com.razorpay.PaymentData
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
@@ -114,10 +108,8 @@ class DigitalGoldBuyFragment : BaseFragment(), WidgetCallback, NewBottomSheetLis
|
||||
private val paymentCheckViewModel by activityViewModels<PaymentCheckViewModel>()
|
||||
private val fullScreenDialogSharedVM by activityViewModels<WidgetFullScreenDialogSharedVM>()
|
||||
private val bottomSheetSharedVM by activityViewModels<WidgetSupportedBottomSheetSharedVM>()
|
||||
private var isRefreshPressed = false
|
||||
private var buyResponse: WidgetResponse? = null
|
||||
|
||||
private lateinit var commonBottomSheet: NewCommonBottomSheet
|
||||
private var digitalGoldActionCheckResponse = DigitalGoldActionCheckResponse()
|
||||
private val naviAdapter = NaviAdapter(
|
||||
widgetCallback = this,
|
||||
factory = ViewHolderFactoryImpl()
|
||||
@@ -131,7 +123,6 @@ class DigitalGoldBuyFragment : BaseFragment(), WidgetCallback, NewBottomSheetLis
|
||||
private var apiPollScheduler: ApiPollScheduler? = null
|
||||
private var firebaseDataHelper: FirebaseDataHelper? = null
|
||||
private var errorTag: String? = null
|
||||
private var isFetchedFromCache = false
|
||||
private val onPollingEnd = {
|
||||
handleTimeOutError(errorTag.orEmpty())
|
||||
}
|
||||
@@ -185,15 +176,7 @@ class DigitalGoldBuyFragment : BaseFragment(), WidgetCallback, NewBottomSheetLis
|
||||
private fun initObserver() {
|
||||
lifecycleScope.launchWhenResumed {
|
||||
viewModel.digitalGoldBuyWidgets.observeNonNull(this@DigitalGoldBuyFragment) { widgetResponse ->
|
||||
sharedVM.setButtonLoaderState(false)
|
||||
if (!isRefreshPressed && !isFetchedFromCache) {
|
||||
stopShimmer()
|
||||
}
|
||||
if (isRefreshPressed) {
|
||||
commonBottomSheet.safelyDismissDialog()
|
||||
isRefreshPressed = false
|
||||
}
|
||||
buyResponse = widgetResponse
|
||||
stopShimmer()
|
||||
processHeader(widgetResponse)
|
||||
commonVM.updateBackPressObjectiveAction(widgetResponse.header?.backPressObjective)
|
||||
widgetResponse.contentWidget?.let { listOfWidgets ->
|
||||
@@ -228,7 +211,6 @@ class DigitalGoldBuyFragment : BaseFragment(), WidgetCallback, NewBottomSheetLis
|
||||
)
|
||||
}
|
||||
viewModel.postPaymentStatus.observeNonNull(this@DigitalGoldBuyFragment) {
|
||||
setButtonLoader(buyResponse, false)
|
||||
viewModel.postPaymentData(it)
|
||||
}
|
||||
viewModel.postPaymentResponse.observeNonNull(this@DigitalGoldBuyFragment) {
|
||||
@@ -240,21 +222,10 @@ class DigitalGoldBuyFragment : BaseFragment(), WidgetCallback, NewBottomSheetLis
|
||||
)
|
||||
}
|
||||
viewModel.digitalGoldPollingUIData.observeNonNull(this@DigitalGoldBuyFragment) {
|
||||
digitalGoldActionCheckResponse = it
|
||||
fetchDigitalGoldTransactionHistoryPage()
|
||||
}
|
||||
|
||||
viewModel.digitalGoldTransactionWidgets.observeNonNull(this@DigitalGoldBuyFragment) { widgetResponse ->
|
||||
TemporaryStorageHelper.SOFT_REF_CACHE.add(
|
||||
key = Constants.GOLD_TRANSACTION_HISTORY,
|
||||
value = widgetResponse as Any,
|
||||
maxTtl = TTL_SOFT_REF_CACHE_API_EXPIRY_TIME, //Hardcoding it to 40 seconds as it is highly unlikely user will be on the screen when payment will get failed
|
||||
maxConsumptions = 1
|
||||
)
|
||||
if (::commonBottomSheet.isInitialized && commonBottomSheet.isNotNull()) {
|
||||
commonBottomSheet.safelyDismissDialog()
|
||||
}
|
||||
navigateToNextScreen(digitalGoldActionCheckResponse)
|
||||
navigateToNextScreen(it)
|
||||
}
|
||||
sharedVM.paymentResponse.observeNonNull(this@DigitalGoldBuyFragment) {
|
||||
pgRepaymentStatus(it.description, it.data, it.code)
|
||||
@@ -284,16 +255,6 @@ class DigitalGoldBuyFragment : BaseFragment(), WidgetCallback, NewBottomSheetLis
|
||||
}
|
||||
}
|
||||
|
||||
private fun fetchDigitalGoldTransactionHistoryPage() {
|
||||
val params =
|
||||
activity?.intent?.getStringExtra(com.navi.gold.util.Constants.SHOW_REWARD_GRATIFICATION)
|
||||
?.let { showRewardGratification ->
|
||||
mapOf(com.navi.gold.util.Constants.SHOW_REWARD_GRATIFICATION to showRewardGratification)
|
||||
}
|
||||
?: emptyMap()
|
||||
viewModel.fetchDigitalGoldTransactionDetails(params)
|
||||
}
|
||||
|
||||
private fun navigateToNextScreen(paymentCheckResponse: DigitalGoldActionCheckResponse) {
|
||||
TemporaryStorageHelper.SOFT_REF_CACHE.remove(GOLD)
|
||||
TemporaryStorageHelper.setIsDataModified(GOLD, true)
|
||||
@@ -325,17 +286,13 @@ class DigitalGoldBuyFragment : BaseFragment(), WidgetCallback, NewBottomSheetLis
|
||||
}
|
||||
}
|
||||
|
||||
private fun showCommonBottomSheet(
|
||||
bottomSheetData: BottomSheetData,
|
||||
isButtonLoaderPresent: Boolean = false
|
||||
) {
|
||||
private fun showCommonBottomSheet(bottomSheetData: BottomSheetData) {
|
||||
try {
|
||||
if (::commonBottomSheet.isInitialized && commonBottomSheet.isNotNull()) {
|
||||
commonBottomSheet.safelyDismissDialog()
|
||||
}
|
||||
commonBottomSheet = NewCommonBottomSheet.getInstance(
|
||||
bottomSheetData,
|
||||
isButtonLoaderPresent
|
||||
bottomSheetData
|
||||
)
|
||||
commonBottomSheet.setListener(this@DigitalGoldBuyFragment)
|
||||
safelyShowBottomSheet(commonBottomSheet, NewCommonBottomSheet.TAG)
|
||||
@@ -349,7 +306,7 @@ class DigitalGoldBuyFragment : BaseFragment(), WidgetCallback, NewBottomSheetLis
|
||||
when (splitDeepLink?.getOrNull(1)) {
|
||||
COMMON_BOTTOM_SHEET_ID -> {
|
||||
action.bottomSheetData?.let {
|
||||
showCommonBottomSheet(it, true)
|
||||
showCommonBottomSheet(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -373,8 +330,8 @@ class DigitalGoldBuyFragment : BaseFragment(), WidgetCallback, NewBottomSheetLis
|
||||
toShowBottomSheet(naviClickAction.actionData)
|
||||
return
|
||||
} else if (naviClickAction.actionData?.action == REFRESH) {
|
||||
isRefreshPressed = true
|
||||
sharedVM.setButtonLoaderState(true)
|
||||
showShimmer()
|
||||
hideLoader()
|
||||
fetchDigitalBuyPageDetails()
|
||||
return
|
||||
}
|
||||
@@ -392,8 +349,6 @@ class DigitalGoldBuyFragment : BaseFragment(), WidgetCallback, NewBottomSheetLis
|
||||
naviClickAction.actionData,
|
||||
screenName
|
||||
)
|
||||
setButtonLoader(buyResponse, true)
|
||||
sharedVM.setButtonLoaderState(true)
|
||||
if (toOpenBottomSheet(naviClickAction.actionData.url)) {
|
||||
toShowBottomSheet(naviClickAction.actionData)
|
||||
return
|
||||
@@ -437,18 +392,10 @@ class DigitalGoldBuyFragment : BaseFragment(), WidgetCallback, NewBottomSheetLis
|
||||
}
|
||||
|
||||
private fun fetchDigitalBuyPageDetails() {
|
||||
if (::commonBottomSheet.isInitialized && commonBottomSheet.isNotNull() && !isRefreshPressed) {
|
||||
if (::commonBottomSheet.isInitialized && commonBottomSheet.isNotNull()) {
|
||||
commonBottomSheet.safelyDismissDialog()
|
||||
}
|
||||
if (TemporaryStorageHelper.SOFT_REF_CACHE.contains(GOLD_BUY) || TemporaryStorageHelper.SOFT_REF_CACHE.contains(
|
||||
GOlD_KYC_BUY
|
||||
)
|
||||
) {
|
||||
isFetchedFromCache = true
|
||||
}
|
||||
if (!isRefreshPressed && !isFetchedFromCache) {
|
||||
showShimmer()
|
||||
}
|
||||
showShimmer()
|
||||
arguments?.let { viewModel.fetchDigitalGoldBuyDetails(it.getDouble(AMOUNT_DATA, 0.0)) }
|
||||
}
|
||||
|
||||
@@ -456,6 +403,7 @@ class DigitalGoldBuyFragment : BaseFragment(), WidgetCallback, NewBottomSheetLis
|
||||
viewModel.digitalGoldBuyWidgets.value?.extraData?.let {
|
||||
it.totalAmount?.let { it1 ->
|
||||
it.exchangeRateId?.let { it2 ->
|
||||
showLoader()
|
||||
viewModel.fetchBuyOrderResponse(
|
||||
amount = it1,
|
||||
exchangeRateId = it2,
|
||||
@@ -474,6 +422,7 @@ class DigitalGoldBuyFragment : BaseFragment(), WidgetCallback, NewBottomSheetLis
|
||||
paymentStatusPolling = false
|
||||
)
|
||||
} else {
|
||||
hideLoader()
|
||||
goldSellOrderResponse?.bottomSheetData?.let { showCommonBottomSheet(it) }
|
||||
|
||||
goldSellOrderResponse?.widgetisedBottomSheetData?.let { widgetBottomSheetData ->
|
||||
@@ -490,31 +439,6 @@ class DigitalGoldBuyFragment : BaseFragment(), WidgetCallback, NewBottomSheetLis
|
||||
|
||||
}
|
||||
|
||||
private fun setButtonLoader(response: WidgetResponse?, state: Boolean) {
|
||||
response?.footerWidget?.let { footerWidget ->
|
||||
naviFooterAdapter.list.forEachIndexed { index, naviWidget ->
|
||||
if (naviWidget is ContainerWidget) {
|
||||
val itemsOfContainerWidget = naviWidget.widgetData?.items
|
||||
var paymentWidget: PaymentWidget? = null
|
||||
itemsOfContainerWidget?.forEach { item ->
|
||||
if (item is PaymentWidget) {
|
||||
paymentWidget = item
|
||||
paymentWidget?.widgetData?.buttonLoaderState = ButtonLoaderState(state)
|
||||
|
||||
naviFooterAdapter.notifyItemChanged(
|
||||
index,
|
||||
WidgetChangedData(
|
||||
WIDGET_STATE_CHANGE,
|
||||
paymentWidget?.widgetData?.buttonLoaderState
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun stopTimer() {
|
||||
naviFooterAdapter.list.forEachIndexed { index, naviBaseAdapterModel ->
|
||||
if (naviBaseAdapterModel is ContainerWidget) {
|
||||
@@ -603,7 +527,7 @@ class DigitalGoldBuyFragment : BaseFragment(), WidgetCallback, NewBottomSheetLis
|
||||
) {
|
||||
deInitializeFirebaseListener()
|
||||
apiPollScheduler?.stopApiPoll()
|
||||
sharedVM.setButtonLoaderState(false)
|
||||
hideLoader()
|
||||
if (sdkCredPollingData) {
|
||||
startRazorpaySdk(digitalGoldPollingResponse?.paymentRequest)
|
||||
} else {
|
||||
@@ -703,7 +627,8 @@ class DigitalGoldBuyFragment : BaseFragment(), WidgetCallback, NewBottomSheetLis
|
||||
} else if (it.action.isNotNullAndNotEmpty()) {
|
||||
when (it.action) {
|
||||
REFRESH -> {
|
||||
isRefreshPressed = true
|
||||
showShimmer()
|
||||
hideLoader()
|
||||
fetchDigitalBuyPageDetails()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -66,9 +66,6 @@ import com.navi.common.ui.fragment.PaymentCheckFragment
|
||||
import com.navi.common.utils.ApiPollScheduler
|
||||
import com.navi.common.utils.Constants.APP
|
||||
import com.navi.common.utils.Constants.DISPLAY_MESSAGE
|
||||
import com.navi.common.utils.Constants.GOLD_BUY
|
||||
import com.navi.common.utils.Constants.GOLD_KYC
|
||||
import com.navi.common.utils.Constants.GOLD_TRANSACTION_HISTORY
|
||||
import com.navi.common.utils.Constants.IMAGE_URL
|
||||
import com.navi.common.utils.Constants.SHAREABLE_LINK
|
||||
import com.navi.common.utils.Constants.WHATSAPP_SHARE
|
||||
@@ -97,11 +94,8 @@ import com.navi.gold.util.Constants.APP_ACTION_OBJECTIVE_REWARDS_CAMPAIGN_ONBOAR
|
||||
import com.navi.gold.util.Constants.BUY_GOLD
|
||||
import com.navi.gold.util.Constants.BUY_GOLD_BOTTOM_SHEET
|
||||
import com.navi.gold.util.Constants.COMMON_BOTTOM_SHEET_ID
|
||||
import com.navi.gold.util.Constants.GOLD_BUY_SUMMARY_URL
|
||||
import com.navi.gold.util.Constants.GOLD_KYC_URL
|
||||
import com.navi.gold.util.Constants.NEXT_CTA
|
||||
import com.navi.gold.util.Constants.SHOW_WIDGET_BOTTOM_SHEET
|
||||
import com.navi.gold.util.Constants.TTL_SOFT_REF_CACHE_API_EXPIRY_TIME
|
||||
import com.navi.gold.util.Constants.TYPE
|
||||
import com.navi.gold.util.GoldAnalytics
|
||||
import com.navi.gold.util.GoldAnalytics.DIGITAL_GOLD_2X_REWARD_BOTTOM_SHEET_INIT
|
||||
@@ -125,14 +119,11 @@ import com.navi.naviwidgets.actions.PaymentWidgetClickAction
|
||||
import com.navi.naviwidgets.adapters.NaviAdapter
|
||||
import com.navi.naviwidgets.callbacks.WidgetCallback
|
||||
import com.navi.naviwidgets.extensions.showWhenDataIsAvailable
|
||||
import com.navi.naviwidgets.models.ButtonLoaderState
|
||||
import com.navi.naviwidgets.models.ContainerWidget
|
||||
import com.navi.naviwidgets.models.GoldConversionWidget
|
||||
import com.navi.naviwidgets.models.NaviWidget
|
||||
import com.navi.naviwidgets.models.ShareData
|
||||
import com.navi.naviwidgets.models.WidgetChangedData
|
||||
import com.navi.naviwidgets.utils.BUTTON_LOADER
|
||||
import com.navi.naviwidgets.utils.PAYMENT_PAGE
|
||||
import com.navi.naviwidgets.utils.STORE_DIGITAL_GOLD_AMOUNT
|
||||
import com.navi.naviwidgets.utils.WIDGET_STATE_CHANGE
|
||||
import com.navi.naviwidgets.viewholder.ViewHolderFactoryImpl
|
||||
@@ -155,6 +146,7 @@ import java.util.TimerTask
|
||||
@AndroidEntryPoint
|
||||
class DigitalGoldHomeActivity : BaseActivity(), WidgetCallback, NewBottomSheetListener,
|
||||
PaymentResultWithDataListener {
|
||||
|
||||
private lateinit var binding: ActivityDigitalGoldHomeBinding
|
||||
private val eventTracker = GoldAnalytics
|
||||
private val widgetNaviAnalyticsEventTracker = GoldAnalytics
|
||||
@@ -165,13 +157,8 @@ class DigitalGoldHomeActivity : BaseActivity(), WidgetCallback, NewBottomSheetLi
|
||||
private val homeVM by lazy { ViewModelProvider(this)[DigitalGoldHomeVM::class.java] }
|
||||
private val commonVM by lazy { ViewModelProvider(this)[DigitalGoldCommonVM::class.java] }
|
||||
private val buyVM by lazy { ViewModelProvider(this)[DigitalGoldBuyVM::class.java] }
|
||||
private var widgetBottomSheet: WidgetsSupportedBottomSheet? = null
|
||||
private val transactionViewModel by lazy { ViewModelProvider(this)[DigitalGoldTransactionVM::class.java] }
|
||||
private var homeResponse: WidgetResponse? = null
|
||||
private var isGoldPriceExpiredReferesh: Boolean? = false
|
||||
private var isGoldPriceBottomSheetClicked: Boolean = false
|
||||
private var bottomSheetResponse: WidgetResponse? = null
|
||||
private var digitalGoldActionCheckResponse = DigitalGoldActionCheckResponse()
|
||||
|
||||
private val naviAdapter = NaviAdapter(
|
||||
widgetCallback = this,
|
||||
factory = ViewHolderFactoryImpl(),
|
||||
@@ -179,14 +166,13 @@ class DigitalGoldHomeActivity : BaseActivity(), WidgetCallback, NewBottomSheetLi
|
||||
)
|
||||
private lateinit var commonBottomSheet: NewCommonBottomSheet
|
||||
private var timer: Timer? = null
|
||||
private var cameFromBottomSheet = false
|
||||
|
||||
|
||||
private var provider: Any? = null
|
||||
private var firebaseDataReceiveListener: FirebaseDataReceiveListener? = null
|
||||
private var apiPollScheduler: ApiPollScheduler? = null
|
||||
private var firebaseDataHelper: FirebaseDataHelper? = null
|
||||
private var errorTag: String? = null
|
||||
private var ctaData = CtaData()
|
||||
private var isPaymentExpired = false
|
||||
private val onPollingEnd = {
|
||||
handleTimeOutError(errorTag.orEmpty())
|
||||
}
|
||||
@@ -279,15 +265,6 @@ class DigitalGoldHomeActivity : BaseActivity(), WidgetCallback, NewBottomSheetLi
|
||||
STORE_DIGITAL_GOLD_AMOUNT -> {
|
||||
homeVM.setActualSellAmount(value.toString().toDouble())
|
||||
}
|
||||
BUTTON_LOADER -> {
|
||||
blockInteractability()
|
||||
}
|
||||
BUY_GOLD -> {
|
||||
blockInteractability()
|
||||
}
|
||||
PAYMENT_PAGE -> {
|
||||
unblockInteractability()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -299,13 +276,7 @@ class DigitalGoldHomeActivity : BaseActivity(), WidgetCallback, NewBottomSheetLi
|
||||
private fun initObserver() {
|
||||
lifecycleScope.launchWhenResumed {
|
||||
homeVM.digitalGoldHomeWidgets.observeNonNull(this@DigitalGoldHomeActivity) { widgetResponse ->
|
||||
unblockInteractability()
|
||||
if (isGoldPriceExpiredReferesh == false) {
|
||||
stopShimmer()
|
||||
} else {
|
||||
commonBottomSheet.dismiss()
|
||||
}
|
||||
homeResponse = widgetResponse
|
||||
stopShimmer()
|
||||
processHeader(widgetResponse)
|
||||
commonVM.updateBackPressObjectiveAction(widgetResponse.header?.backPressObjective)
|
||||
widgetResponse.contentWidget?.let { listOfWidgets ->
|
||||
@@ -322,23 +293,14 @@ class DigitalGoldHomeActivity : BaseActivity(), WidgetCallback, NewBottomSheetLi
|
||||
hideKeyBoard()
|
||||
}
|
||||
homeVM.panVerifyCta.observeNonNull(this@DigitalGoldHomeActivity) { goldKycCheckResponse ->
|
||||
hideLoader()
|
||||
goldKycCheckResponse.bottomSheetData?.let { showCommonBottomSheet(it) }
|
||||
goldKycCheckResponse.actionData?.let {
|
||||
if (it.url == GOLD_KYC_URL) {
|
||||
ctaData = it.toCtaData()
|
||||
fetchDigitalGoldKycScreen()
|
||||
} else if (it.url == GOLD_BUY_SUMMARY_URL) {
|
||||
ctaData = it.toCtaData()
|
||||
fetchDigitalGoldBuyScreen()
|
||||
} else {
|
||||
setButtonLoaderState(homeResponse, false)
|
||||
DeepLinkManager.getDeepLinkListener()?.navigateTo(
|
||||
this@DigitalGoldHomeActivity,
|
||||
it.toCtaData(),
|
||||
finish = false
|
||||
)
|
||||
}
|
||||
|
||||
DeepLinkManager.getDeepLinkListener()?.navigateTo(
|
||||
this@DigitalGoldHomeActivity,
|
||||
it.toCtaData(),
|
||||
finish = false
|
||||
)
|
||||
}
|
||||
}
|
||||
transactionViewModel.invoiceDownloadData.observeNonNull(this@DigitalGoldHomeActivity) { invoiceDownloadData ->
|
||||
@@ -346,10 +308,8 @@ class DigitalGoldHomeActivity : BaseActivity(), WidgetCallback, NewBottomSheetLi
|
||||
}
|
||||
|
||||
homeVM.buyBottomSheetData.observeNonNull(this@DigitalGoldHomeActivity) { widgetResponse ->
|
||||
bottomSheetResponse = widgetResponse
|
||||
if (isPaymentExpired) {
|
||||
commonBottomSheet.dismiss()
|
||||
}
|
||||
hideLoader()
|
||||
|
||||
widgetResponse.extraData?.launchBottomSheetData?.let { launchBottomSheetData ->
|
||||
|
||||
widgetNaviAnalyticsEventTracker.onWidgetViewedEvent(launchBottomSheetData.bottomSheetInitEvent)
|
||||
@@ -365,17 +325,16 @@ class DigitalGoldHomeActivity : BaseActivity(), WidgetCallback, NewBottomSheetLi
|
||||
DIGITAL_GOLD_BUY_SUMMARY_BOTTOM_SHEET_INIT,
|
||||
mutableMapOf()
|
||||
)
|
||||
|
||||
showWidgetBottomSheet(
|
||||
widgetList = widgetResponse.contentWidget,
|
||||
allowTopPadding = false,
|
||||
bgColor = Color.TRANSPARENT
|
||||
)
|
||||
}
|
||||
setButtonLoaderState(homeResponse, false)
|
||||
}
|
||||
|
||||
buyVM.goldBuyOrderResponse.observeNonNull(this@DigitalGoldHomeActivity) { goldBuyOrderResponse ->
|
||||
isGoldPriceBottomSheetClicked = true
|
||||
handleBuyOrderResponse(goldBuyOrderResponse)
|
||||
}
|
||||
|
||||
@@ -390,10 +349,6 @@ class DigitalGoldHomeActivity : BaseActivity(), WidgetCallback, NewBottomSheetLi
|
||||
)
|
||||
}
|
||||
buyVM.postPaymentStatus.observeNonNull(this@DigitalGoldHomeActivity) {
|
||||
if (isGoldPriceBottomSheetClicked) {
|
||||
widgetBottomSheet?.safelyDismissDialog()
|
||||
isGoldPriceBottomSheetClicked = false
|
||||
}
|
||||
buyVM.postPaymentData(it)
|
||||
}
|
||||
buyVM.postPaymentResponse.observeNonNull(this@DigitalGoldHomeActivity) {
|
||||
@@ -405,56 +360,20 @@ class DigitalGoldHomeActivity : BaseActivity(), WidgetCallback, NewBottomSheetLi
|
||||
)
|
||||
}
|
||||
buyVM.digitalGoldPollingUIData.observeNonNull(this@DigitalGoldHomeActivity) {
|
||||
digitalGoldActionCheckResponse = it
|
||||
fetchDigitalGoldTransactionHistoryPage()
|
||||
}
|
||||
|
||||
homeVM.digitalGoldTransactionWidgets.observeNonNull(this@DigitalGoldHomeActivity) {
|
||||
TemporaryStorageHelper.SOFT_REF_CACHE.add(
|
||||
key = GOLD_TRANSACTION_HISTORY,
|
||||
value = it as Any,
|
||||
maxTtl = TTL_SOFT_REF_CACHE_API_EXPIRY_TIME, //Currently adding TTL to 40 seconds as it is highly unlikely user will wait for 40 seconds to press go to next page if payment get failed
|
||||
maxConsumptions = 1
|
||||
)
|
||||
if (::commonBottomSheet.isInitialized && commonBottomSheet.isNotNull()) {
|
||||
commonBottomSheet.safelyDismissDialog()
|
||||
}
|
||||
navigateToPaymentCheckScreen(digitalGoldActionCheckResponse)
|
||||
navigateToPaymentCheckScreen(it)
|
||||
}
|
||||
buySharedVM.paymentResponse.observeNonNull(this@DigitalGoldHomeActivity) {
|
||||
pgRepaymentStatus(it.description, it.data, it.code)
|
||||
}
|
||||
|
||||
homeVM.digitalGoldKycWidgets.observeNonNull(this@DigitalGoldHomeActivity) {
|
||||
TemporaryStorageHelper.SOFT_REF_CACHE.add(
|
||||
key = GOLD_KYC,
|
||||
value = it as Any,
|
||||
maxTtl = TTL_SOFT_REF_CACHE_API_EXPIRY_TIME,
|
||||
maxConsumptions = 1
|
||||
)
|
||||
DeepLinkManager.getDeepLinkListener()?.navigateTo(
|
||||
this@DigitalGoldHomeActivity,
|
||||
ctaData,
|
||||
finish = false
|
||||
)
|
||||
}
|
||||
homeVM.digitalGoldBuyWidgets.observeNonNull(this@DigitalGoldHomeActivity) {
|
||||
TemporaryStorageHelper.SOFT_REF_CACHE.add(
|
||||
key = GOLD_BUY,
|
||||
value = it as Any,
|
||||
maxTtl = TTL_SOFT_REF_CACHE_API_EXPIRY_TIME,
|
||||
maxConsumptions = 1
|
||||
)
|
||||
DeepLinkManager.getDeepLinkListener()?.navigateTo(
|
||||
this@DigitalGoldHomeActivity,
|
||||
ctaData,
|
||||
finish = false
|
||||
)
|
||||
}
|
||||
commonVM.actionObjectiveData.observeNonNull(this@DigitalGoldHomeActivity) { objectiveResponse ->
|
||||
hideLoader()
|
||||
objectiveResponse.response?.let { response ->
|
||||
response.widgetisedBottomSheetData?.let { widgetList ->
|
||||
|
||||
objectiveResponse.request?.id?.let { objectiveId ->
|
||||
if (objectiveId == APP_ACTION_OBJECTIVE_REWARDS_CAMPAIGN_ONBOARD) {
|
||||
GoldAnalytics.sendEventsToClickStream(
|
||||
@@ -474,27 +393,6 @@ class DigitalGoldHomeActivity : BaseActivity(), WidgetCallback, NewBottomSheetLi
|
||||
}
|
||||
}
|
||||
|
||||
private fun fetchDigitalGoldTransactionHistoryPage() {
|
||||
val params = intent.getStringExtra(com.navi.gold.util.Constants.SHOW_REWARD_GRATIFICATION)
|
||||
?.let { showRewardGratification ->
|
||||
mapOf(com.navi.gold.util.Constants.SHOW_REWARD_GRATIFICATION to showRewardGratification)
|
||||
}
|
||||
?: emptyMap()
|
||||
homeVM.fetchDigitalGoldTransactionDetails(params)
|
||||
}
|
||||
|
||||
private fun fetchDigitalGoldBuyScreen() {
|
||||
homeVM.fetchDigitalGoldBuyDetails(homeVM.getActualSellAmount())
|
||||
}
|
||||
|
||||
private fun fetchDigitalGoldKycScreen() {
|
||||
homeVM.fetchDigitalGoldKycDetails(
|
||||
GoldKycPageRequest(
|
||||
amount = homeVM.getActualSellAmount()
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
private fun navigateToPaymentCheckScreen(paymentCheckResponse: DigitalGoldActionCheckResponse) {
|
||||
TemporaryStorageHelper.SOFT_REF_CACHE.remove(GOLD)
|
||||
TemporaryStorageHelper.setIsDataModified(GOLD, true)
|
||||
@@ -554,6 +452,7 @@ class DigitalGoldHomeActivity : BaseActivity(), WidgetCallback, NewBottomSheetLi
|
||||
paymentStatusPolling = false
|
||||
)
|
||||
} else {
|
||||
hideLoader()
|
||||
goldSellOrderResponse?.bottomSheetData?.let { showCommonBottomSheet(it) }
|
||||
}
|
||||
}
|
||||
@@ -651,6 +550,7 @@ class DigitalGoldHomeActivity : BaseActivity(), WidgetCallback, NewBottomSheetLi
|
||||
) {
|
||||
deInitializeFirebaseListener()
|
||||
apiPollScheduler?.stopApiPoll()
|
||||
hideLoader()
|
||||
if (sdkCredPollingData) {
|
||||
startRazorpaySdk(digitalGoldPollingResponse?.paymentRequest)
|
||||
} else {
|
||||
@@ -716,27 +616,21 @@ class DigitalGoldHomeActivity : BaseActivity(), WidgetCallback, NewBottomSheetLi
|
||||
isCancellable: Boolean = true
|
||||
) {
|
||||
bottomSheetSharedVM.setBottomSheetData(NaviWidgetClick(listOfWidget = widgetList))
|
||||
widgetBottomSheet = WidgetsSupportedBottomSheet.getInstance(
|
||||
val widgetBottomSheet = WidgetsSupportedBottomSheet.getInstance(
|
||||
allowTopPadding = allowTopPadding,
|
||||
bgColor = bgColor,
|
||||
isCancellable = isCancellable,
|
||||
isDismissable = false
|
||||
isCancellable = isCancellable
|
||||
)
|
||||
safelyShowBottomSheet(widgetBottomSheet!!, WidgetsSupportedBottomSheet.TAG)
|
||||
unblockInteractability()
|
||||
safelyShowBottomSheet(widgetBottomSheet, WidgetsSupportedBottomSheet.TAG)
|
||||
}
|
||||
|
||||
private fun showCommonBottomSheet(
|
||||
bottomSheetData: BottomSheetData,
|
||||
isButtonLoaderPresent: Boolean = false
|
||||
) {
|
||||
private fun showCommonBottomSheet(bottomSheetData: BottomSheetData) {
|
||||
try {
|
||||
if (::commonBottomSheet.isInitialized && commonBottomSheet.isNotNull()) {
|
||||
commonBottomSheet.safelyDismissDialog()
|
||||
}
|
||||
commonBottomSheet = NewCommonBottomSheet.getInstance(
|
||||
bottomSheetData,
|
||||
isButtonLoaderPresent
|
||||
bottomSheetData
|
||||
)
|
||||
commonBottomSheet.setListener(this@DigitalGoldHomeActivity)
|
||||
safelyShowBottomSheet(commonBottomSheet, NewCommonBottomSheet.TAG)
|
||||
@@ -818,10 +712,7 @@ class DigitalGoldHomeActivity : BaseActivity(), WidgetCallback, NewBottomSheetLi
|
||||
private fun fetchDigitalHomePageDetails(forceRefresh: Boolean = true) {
|
||||
timer?.cancel()
|
||||
timer = null
|
||||
|
||||
if (isGoldPriceExpiredReferesh == false) {
|
||||
showShimmer()
|
||||
}
|
||||
showShimmer()
|
||||
|
||||
val params = mutableMapOf<String, String>()
|
||||
|
||||
@@ -878,11 +769,7 @@ class DigitalGoldHomeActivity : BaseActivity(), WidgetCallback, NewBottomSheetLi
|
||||
override val moduleName: ModuleNameV2 = ModuleNameV2.COMMON
|
||||
|
||||
override fun buttonClick(actionData: ActionData?) {
|
||||
if (actionData?.action != BUY_GOLD_BOTTOM_SHEET) {
|
||||
commonBottomSheet.dismiss()
|
||||
} else {
|
||||
isPaymentExpired = true
|
||||
}
|
||||
commonBottomSheet?.dismiss()
|
||||
|
||||
actionData?.let {
|
||||
widgetNaviAnalyticsEventTracker.onWidgetClickEvent(actionData, screenName)
|
||||
@@ -900,7 +787,7 @@ class DigitalGoldHomeActivity : BaseActivity(), WidgetCallback, NewBottomSheetLi
|
||||
} else if (it.action.isNotNullAndNotEmpty()) {
|
||||
when (it.action) {
|
||||
com.navi.common.utils.Constants.REFRESH -> {
|
||||
isGoldPriceExpiredReferesh = true
|
||||
hideLoader()
|
||||
fetchDigitalHomePageDetails()
|
||||
}
|
||||
|
||||
@@ -963,6 +850,7 @@ class DigitalGoldHomeActivity : BaseActivity(), WidgetCallback, NewBottomSheetLi
|
||||
val bundle = Bundle()
|
||||
bundle.putString(AMOUNT_DATA, homeVM.getActualSellAmount().toString())
|
||||
if (naviClickAction.actionData?.url.equals(NEXT_CTA)) {
|
||||
showLoader()
|
||||
homeVM.fetchPanVerifyCta(
|
||||
GoldKycPageRequest(
|
||||
type = naviClickAction.actionData?.type,
|
||||
@@ -971,6 +859,7 @@ class DigitalGoldHomeActivity : BaseActivity(), WidgetCallback, NewBottomSheetLi
|
||||
)
|
||||
return
|
||||
} else if (naviClickAction.actionData?.url.equals(BUY_GOLD_BOTTOM_SHEET, true)) {
|
||||
|
||||
val amount = naviClickAction.actionData?.parameters?.firstOrNull() {
|
||||
it.key.equals(
|
||||
AMOUNT_DATA
|
||||
@@ -983,8 +872,7 @@ class DigitalGoldHomeActivity : BaseActivity(), WidgetCallback, NewBottomSheetLi
|
||||
hideLoader()
|
||||
fetchDigitalHomePageDetails()
|
||||
} else if (toOpenBottomSheet(naviClickAction.actionData?.url)) {
|
||||
isGoldPriceExpiredReferesh = true
|
||||
toShowBottomSheet(naviClickAction.actionData, true)
|
||||
toShowBottomSheet(naviClickAction.actionData)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -1059,8 +947,6 @@ class DigitalGoldHomeActivity : BaseActivity(), WidgetCallback, NewBottomSheetLi
|
||||
}
|
||||
|
||||
is PaymentWidgetClickAction -> {
|
||||
setButtonLoaderState(bottomSheetResponse, true)
|
||||
widgetBottomSheet?.stopTimer()
|
||||
widgetNaviAnalyticsEventTracker.onWidgetClickEvent(
|
||||
naviClickAction.actionData,
|
||||
screenName
|
||||
@@ -1069,8 +955,7 @@ class DigitalGoldHomeActivity : BaseActivity(), WidgetCallback, NewBottomSheetLi
|
||||
toShowBottomSheet(naviClickAction.actionData)
|
||||
return
|
||||
} else if (naviClickAction.actionData.url.equals(BUY_GOLD)) {
|
||||
widgetBottomSheet?.isCancelable = false
|
||||
blockInteractability()
|
||||
|
||||
fetchBuyOrderResponse()
|
||||
return
|
||||
}
|
||||
@@ -1086,6 +971,7 @@ class DigitalGoldHomeActivity : BaseActivity(), WidgetCallback, NewBottomSheetLi
|
||||
}
|
||||
|
||||
private fun fetchGoldBuyBottomSheet(amount: Double? = null) {
|
||||
showLoader()
|
||||
homeVM.fetchGoldBuyBottomSheetData(
|
||||
AmountDataRequest(
|
||||
amount = amount ?: homeVM.getActualSellAmount()
|
||||
@@ -1093,44 +979,11 @@ class DigitalGoldHomeActivity : BaseActivity(), WidgetCallback, NewBottomSheetLi
|
||||
)
|
||||
}
|
||||
|
||||
private fun setButtonLoaderState(response: WidgetResponse?, state: Boolean) {
|
||||
if (response == bottomSheetResponse) {
|
||||
widgetBottomSheet?.setButtonLoaderState(response, state)
|
||||
} else {
|
||||
response?.contentWidget?.let { contentWidget ->
|
||||
naviAdapter.list.forEachIndexed { index, naviWidget ->
|
||||
if (naviWidget is ContainerWidget) {
|
||||
val itemsOfContainerWidget = naviWidget.widgetData?.items
|
||||
var goldContainerWidget: GoldConversionWidget? = null
|
||||
itemsOfContainerWidget?.forEach { item ->
|
||||
if (item is GoldConversionWidget) {
|
||||
goldContainerWidget = item
|
||||
goldContainerWidget?.widgetData?.buttonLoaderState =
|
||||
ButtonLoaderState(state)
|
||||
naviAdapter.notifyItemChanged(
|
||||
index,
|
||||
WidgetChangedData(
|
||||
WIDGET_STATE_CHANGE,
|
||||
goldContainerWidget?.widgetData?.buttonLoaderState
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (state) {
|
||||
blockInteractability()
|
||||
} else {
|
||||
unblockInteractability()
|
||||
}
|
||||
}
|
||||
|
||||
private fun fetchBuyOrderResponse() {
|
||||
homeVM.buyBottomSheetData.value?.extraData?.let {
|
||||
it.totalAmount?.let { totalAmount ->
|
||||
it.exchangeRateId?.let { exchangeRateId ->
|
||||
showLoader()
|
||||
buyVM.fetchBuyOrderResponse(
|
||||
amount = totalAmount,
|
||||
exchangeRateId = exchangeRateId,
|
||||
@@ -1143,7 +996,6 @@ class DigitalGoldHomeActivity : BaseActivity(), WidgetCallback, NewBottomSheetLi
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
setButtonLoaderState(homeResponse, false)
|
||||
startTimer()
|
||||
}
|
||||
|
||||
@@ -1160,19 +1012,18 @@ class DigitalGoldHomeActivity : BaseActivity(), WidgetCallback, NewBottomSheetLi
|
||||
}
|
||||
}
|
||||
|
||||
private fun toShowBottomSheet(action: ActionData?, isButtonLoaderPresent: Boolean = false) {
|
||||
private fun toShowBottomSheet(action: ActionData?) {
|
||||
val splitDeepLink = action?.url?.split("/")
|
||||
when (splitDeepLink?.getOrNull(1)) {
|
||||
COMMON_BOTTOM_SHEET_ID -> {
|
||||
action.bottomSheetData?.let {
|
||||
showCommonBottomSheet(it, isButtonLoaderPresent)
|
||||
showCommonBottomSheet(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onBackPressed() {
|
||||
if (isBlockInteractability()) return
|
||||
|
||||
if (commonVM.shouldPerformBackPressObjective()) {
|
||||
showLoader()
|
||||
|
||||
@@ -26,8 +26,6 @@ import com.navi.base.model.ActionData
|
||||
import com.navi.base.model.BottomSheetData
|
||||
import com.navi.base.model.NaviClickAction
|
||||
import com.navi.base.model.NaviWidgetClickWithActionData
|
||||
import com.navi.base.utils.PAN_VERIFY
|
||||
import com.navi.base.utils.PAN_VERIFY_POLLING
|
||||
import com.navi.base.utils.isNotNull
|
||||
import com.navi.base.utils.isNotNullAndNotEmpty
|
||||
import com.navi.base.utils.orTrue
|
||||
@@ -39,9 +37,6 @@ import com.navi.common.ui.bottomsheet.WidgetsSupportedBottomSheet
|
||||
import com.navi.common.ui.fragment.BaseFragment
|
||||
import com.navi.common.ui.fragment.NewCommonBottomSheet
|
||||
import com.navi.common.ui.fragment.PaymentCheckFragment
|
||||
import com.navi.common.utils.Constants.GOLD
|
||||
import com.navi.common.utils.Constants.GOLD_BUY_URL
|
||||
import com.navi.common.utils.Constants.GOLD_KYC
|
||||
import com.navi.common.utils.Constants.REFRESH
|
||||
import com.navi.common.utils.TemporaryStorageHelper
|
||||
import com.navi.common.utils.observeNonNull
|
||||
@@ -51,27 +46,6 @@ import com.navi.common.viewmodel.WidgetFullScreenDialogSharedVM
|
||||
import com.navi.common.viewmodel.WidgetSupportedBottomSheetSharedVM
|
||||
import com.navi.gold.R
|
||||
import com.navi.gold.databinding.FragmentDigitalGoldKycBinding
|
||||
import com.navi.gold.model.DigitalGoldActionCheckResponse
|
||||
import com.navi.gold.model.GoldKycCheckResponse
|
||||
import com.navi.gold.model.GoldKycPageRequest
|
||||
import com.navi.gold.model.GoldKycVerifyRequest
|
||||
import com.navi.gold.toOpenBottomSheet
|
||||
import com.navi.gold.util.CommonUtils
|
||||
import com.navi.gold.util.Constants.AMOUNT_DATA
|
||||
import com.navi.gold.util.Constants.APP_ACTION_OBJECTIVE_REWARDS_CAMPAIGN_ONBOARD
|
||||
import com.navi.gold.util.Constants.COMMON_BOTTOM_SHEET_ID
|
||||
import com.navi.gold.util.Constants.GOlD_KYC_BUY
|
||||
import com.navi.gold.util.Constants.SHOW_WIDGET_BOTTOM_SHEET
|
||||
import com.navi.gold.util.Constants.TTL_SOFT_REF_CACHE_API_EXPIRY_TIME
|
||||
import com.navi.gold.util.Constants.TYPE
|
||||
import com.navi.gold.util.GoldAnalytics
|
||||
import com.navi.gold.util.GoldAnalytics.DIGITAL_GOLD_2X_REWARD_BOTTOM_SHEET_INIT
|
||||
import com.navi.gold.util.GoldAnalytics.DIGITAL_GOLD_BASIC_DETAIS_PAGE
|
||||
import com.navi.gold.util.GoldAnalytics.DIGITAL_GOLD_FOMO_NUDGE_BOTTOM_SHEET_INIT
|
||||
import com.navi.gold.util.GoldAnalytics.DIGITAL_GOLD_KYC_SCREEN
|
||||
import com.navi.gold.util.toActionCheckResponse
|
||||
import com.navi.gold.viewmodels.DigitalGoldCommonVM
|
||||
import com.navi.gold.viewmodels.DigitalGoldKycVM
|
||||
import com.navi.naviwidgets.actions.NaviWidgetClick
|
||||
import com.navi.naviwidgets.adapters.NaviAdapter
|
||||
import com.navi.naviwidgets.base.BaseInputWidget
|
||||
@@ -88,8 +62,30 @@ import com.navi.naviwidgets.utils.WIDGET_STATE_CHANGE
|
||||
import com.navi.naviwidgets.viewholder.ViewHolderFactoryImpl
|
||||
import com.navi.naviwidgets.widgets.labeleddateinput.LabeledDateInputWidgetModel
|
||||
import com.navi.naviwidgets.widgets.labledtextinput.LabeledTextInputWidgetModelV2
|
||||
import com.navi.gold.model.DigitalGoldActionCheckResponse
|
||||
import com.navi.gold.model.GoldKycCheckResponse
|
||||
import com.navi.gold.model.GoldKycPageRequest
|
||||
import com.navi.gold.model.GoldKycVerifyRequest
|
||||
import com.navi.gold.toOpenBottomSheet
|
||||
import com.navi.gold.util.CommonUtils
|
||||
import com.navi.gold.util.Constants.AMOUNT_DATA
|
||||
import com.navi.gold.util.Constants.APP_ACTION_OBJECTIVE_REWARDS_CAMPAIGN_ONBOARD
|
||||
import com.navi.gold.util.Constants.COMMON_BOTTOM_SHEET_ID
|
||||
import com.navi.gold.util.Constants.SHOW_WIDGET_BOTTOM_SHEET
|
||||
import com.navi.gold.util.Constants.TYPE
|
||||
import com.navi.gold.util.GoldAnalytics
|
||||
import com.navi.gold.util.GoldAnalytics.DIGITAL_GOLD_2X_REWARD_BOTTOM_SHEET_INIT
|
||||
import com.navi.gold.util.GoldAnalytics.DIGITAL_GOLD_BASIC_DETAIS_PAGE
|
||||
import com.navi.gold.util.GoldAnalytics.DIGITAL_GOLD_FOMO_NUDGE_BOTTOM_SHEET_INIT
|
||||
import com.navi.gold.util.GoldAnalytics.DIGITAL_GOLD_KYC_SCREEN
|
||||
import com.navi.gold.util.toActionCheckResponse
|
||||
import com.navi.gold.viewmodels.DigitalGoldCommonVM
|
||||
import com.navi.gold.viewmodels.DigitalGoldKycVM
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import kotlinx.coroutines.delay
|
||||
import com.navi.base.utils.PAN_VERIFY
|
||||
import com.navi.base.utils.PAN_VERIFY_POLLING
|
||||
import com.navi.common.utils.Constants.GOLD
|
||||
|
||||
@AndroidEntryPoint
|
||||
class DigitalGoldKycFragment : BaseFragment(), WidgetCallback, NewBottomSheetListener,
|
||||
@@ -106,10 +102,6 @@ class DigitalGoldKycFragment : BaseFragment(), WidgetCallback, NewBottomSheetLis
|
||||
private lateinit var commonBottomSheet: NewCommonBottomSheet
|
||||
private var validationCheckMap: HashMap<String, Boolean>? = null
|
||||
private var isSavedTextNeed: Boolean? = false
|
||||
private var isFetchedFromCache = false
|
||||
private var isGoldPageNeedToFetch = false
|
||||
private var kycResponse = GoldKycCheckResponse()
|
||||
private var isRefreshPressed = false
|
||||
private val naviAdapter = NaviAdapter(
|
||||
widgetCallback = this,
|
||||
factory = ViewHolderFactoryImpl()
|
||||
@@ -168,15 +160,7 @@ class DigitalGoldKycFragment : BaseFragment(), WidgetCallback, NewBottomSheetLis
|
||||
private fun initObserver() {
|
||||
lifecycleScope.launchWhenResumed {
|
||||
viewModel.digitalGoldKycWidgets.observeNonNull(this@DigitalGoldKycFragment) { widgetResponse ->
|
||||
if (!isFetchedFromCache && !isRefreshPressed) {
|
||||
stopShimmer()
|
||||
}
|
||||
if (isRefreshPressed) {
|
||||
if (::commonBottomSheet.isInitialized && commonBottomSheet.isNotNull()) {
|
||||
commonBottomSheet.safelyDismissDialog()
|
||||
}
|
||||
isRefreshPressed = !isRefreshPressed
|
||||
}
|
||||
stopShimmer()
|
||||
processHeader(widgetResponse)
|
||||
commonVM.updateBackPressObjectiveAction(widgetResponse.header?.backPressObjective)
|
||||
if (isSavedTextNeed == true) {
|
||||
@@ -193,32 +177,10 @@ class DigitalGoldKycFragment : BaseFragment(), WidgetCallback, NewBottomSheetLis
|
||||
validationCheckMap = widgetResponse.extraData?.validationCheckMap
|
||||
}
|
||||
viewModel.panVerifyResponse.observeNonNull(this@DigitalGoldKycFragment) { goldKycResponse ->
|
||||
if (goldKycResponse.actionData?.url == GOLD_BUY_URL) {
|
||||
isGoldPageNeedToFetch = true
|
||||
kycResponse = goldKycResponse
|
||||
fetchDigitalGoldBuyDetails()
|
||||
} else {
|
||||
if (::commonBottomSheet.isInitialized && commonBottomSheet.isNotNull()) {
|
||||
commonBottomSheet.safelyDismissDialog()
|
||||
}
|
||||
handlePanVerifyResponse(goldKycResponse)
|
||||
}
|
||||
}
|
||||
|
||||
viewModel.digitalGoldBuyWidgets.observeNonNull(this@DigitalGoldKycFragment) { goldBuyResponse ->
|
||||
if (isGoldPageNeedToFetch) {
|
||||
TemporaryStorageHelper.SOFT_REF_CACHE.add(
|
||||
key = GOlD_KYC_BUY,
|
||||
value = goldBuyResponse as Any,
|
||||
maxTtl = TTL_SOFT_REF_CACHE_API_EXPIRY_TIME,//Making ttl to 40 seconds as it is highly unlikely that buy summary take more than 40 seconds to load
|
||||
maxConsumptions = 1
|
||||
)
|
||||
if (::commonBottomSheet.isInitialized && commonBottomSheet.isNotNull()) {
|
||||
commonBottomSheet.safelyDismissDialog()
|
||||
}
|
||||
handlePanVerifyResponse(kycResponse)
|
||||
isGoldPageNeedToFetch = false
|
||||
if (::commonBottomSheet.isInitialized && commonBottomSheet.isNotNull()) {
|
||||
commonBottomSheet.safelyDismissDialog()
|
||||
}
|
||||
handlePanVerifyResponse(goldKycResponse)
|
||||
}
|
||||
|
||||
commonVM.actionObjectiveData.observeNonNull(this@DigitalGoldKycFragment) { objectiveResponse ->
|
||||
@@ -246,12 +208,6 @@ class DigitalGoldKycFragment : BaseFragment(), WidgetCallback, NewBottomSheetLis
|
||||
}
|
||||
}
|
||||
|
||||
private fun fetchDigitalGoldBuyDetails() {
|
||||
viewModel.fetchDigitalGoldBuyDetails(
|
||||
amount = arguments?.getDouble(AMOUNT_DATA) ?: 0.0
|
||||
)
|
||||
}
|
||||
|
||||
override fun onFocusChange(widgetId: String?, hasFocus: Boolean, input: String?) {
|
||||
super.onFocusChange(widgetId, hasFocus, input)
|
||||
if (!isAdded || activity?.isFinishing.orTrue() || !hasFocus) return
|
||||
@@ -295,8 +251,7 @@ class DigitalGoldKycFragment : BaseFragment(), WidgetCallback, NewBottomSheetLis
|
||||
|
||||
kycVerifyResponse.successBottomSheet?.let { successBottomSheet ->
|
||||
|
||||
//Changing the default display time to 500ms otherwise app look stuck
|
||||
val displayTime = successBottomSheet.displayTime ?: 500L
|
||||
val displayTime = successBottomSheet.displayTime ?: 1000L
|
||||
successBottomSheet.bottomSheetData?.data?.let { widgetList ->
|
||||
val bottomSheet = showWidgetBottomSheet(
|
||||
widgetList = widgetList,
|
||||
@@ -304,6 +259,7 @@ class DigitalGoldKycFragment : BaseFragment(), WidgetCallback, NewBottomSheetLis
|
||||
)
|
||||
lifecycleScope.launchWhenResumed {
|
||||
delay(displayTime)
|
||||
bottomSheet.safelyDismissDialog()
|
||||
navigateWith(kycVerifyResponse)
|
||||
}
|
||||
|
||||
@@ -440,7 +396,7 @@ class DigitalGoldKycFragment : BaseFragment(), WidgetCallback, NewBottomSheetLis
|
||||
}
|
||||
|
||||
private fun fetchPanVerifyResponse(actionData: ActionData?, usePolling: Boolean = false) {
|
||||
if (!isInputValid()) {
|
||||
if(!isInputValid()) {
|
||||
updateNextButton()
|
||||
return
|
||||
}
|
||||
@@ -471,7 +427,6 @@ class DigitalGoldKycFragment : BaseFragment(), WidgetCallback, NewBottomSheetLis
|
||||
}
|
||||
return allValidationsPassed
|
||||
}
|
||||
|
||||
private fun showShimmer() {
|
||||
binding.shimmerLayout.startShimmer()
|
||||
binding.shimmerLayout.isVisible = true
|
||||
@@ -485,11 +440,7 @@ class DigitalGoldKycFragment : BaseFragment(), WidgetCallback, NewBottomSheetLis
|
||||
}
|
||||
|
||||
private fun fetchDigitalKycScreen() {
|
||||
if (TemporaryStorageHelper.SOFT_REF_CACHE.contains(GOLD_KYC)) {
|
||||
isFetchedFromCache = true
|
||||
} else if (!isRefreshPressed) {
|
||||
showShimmer()
|
||||
}
|
||||
showShimmer()
|
||||
viewModel.fetchDigitalGoldKycDetails(
|
||||
GoldKycPageRequest(
|
||||
amount = arguments?.getDouble(AMOUNT_DATA)
|
||||
@@ -514,8 +465,8 @@ class DigitalGoldKycFragment : BaseFragment(), WidgetCallback, NewBottomSheetLis
|
||||
} else if (it.action.isNotNullAndNotEmpty()) {
|
||||
when (it.action) {
|
||||
REFRESH -> {
|
||||
|
||||
isRefreshPressed = true
|
||||
showShimmer()
|
||||
hideLoader()
|
||||
fetchDigitalKycScreen()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,10 +52,22 @@ import com.navi.common.utils.TemporaryStorageHelper
|
||||
import com.navi.common.utils.observeNonNull
|
||||
import com.navi.common.utils.toCtaData
|
||||
import com.navi.common.viewmodel.PaymentCheckViewModel
|
||||
import com.navi.common.viewmodel.WidgetFullScreenDialogSharedVM
|
||||
import com.navi.common.viewmodel.WidgetSupportedBottomSheetSharedVM
|
||||
import com.navi.naviwidgets.actions.NaviWidgetClick
|
||||
import com.navi.common.viewmodel.WidgetFullScreenDialogSharedVM
|
||||
import com.navi.gold.R
|
||||
import com.navi.gold.databinding.ActivityDigitalGoldSellBinding
|
||||
import com.navi.naviwidgets.actions.PaymentWidgetClickAction
|
||||
import com.navi.naviwidgets.adapters.NaviAdapter
|
||||
import com.navi.naviwidgets.callbacks.WidgetCallback
|
||||
import com.navi.naviwidgets.extensions.showWhenDataIsAvailable
|
||||
import com.navi.naviwidgets.models.ContainerWidget
|
||||
import com.navi.naviwidgets.models.NaviWidget
|
||||
import com.navi.naviwidgets.models.PaymentWidget
|
||||
import com.navi.naviwidgets.models.TextWithTimerWidget
|
||||
import com.navi.naviwidgets.models.WidgetChangedData
|
||||
import com.navi.naviwidgets.utils.WIDGET_STATE_CHANGE
|
||||
import com.navi.naviwidgets.viewholder.ViewHolderFactoryImpl
|
||||
import com.navi.gold.model.DigitalGoldActionCheckResponse
|
||||
import com.navi.gold.model.GoldSellOrderResponse
|
||||
import com.navi.gold.toOpenBottomSheet
|
||||
@@ -71,18 +83,6 @@ import com.navi.gold.util.startExitAnimation
|
||||
import com.navi.gold.util.toActionCheckResponse
|
||||
import com.navi.gold.viewmodels.DigitalGoldSellSharedVM
|
||||
import com.navi.gold.viewmodels.DigitalGoldSellVM
|
||||
import com.navi.naviwidgets.actions.NaviWidgetClick
|
||||
import com.navi.naviwidgets.actions.PaymentWidgetClickAction
|
||||
import com.navi.naviwidgets.adapters.NaviAdapter
|
||||
import com.navi.naviwidgets.callbacks.WidgetCallback
|
||||
import com.navi.naviwidgets.extensions.showWhenDataIsAvailable
|
||||
import com.navi.naviwidgets.models.ContainerWidget
|
||||
import com.navi.naviwidgets.models.NaviWidget
|
||||
import com.navi.naviwidgets.models.PaymentWidget
|
||||
import com.navi.naviwidgets.models.TextWithTimerWidget
|
||||
import com.navi.naviwidgets.models.WidgetChangedData
|
||||
import com.navi.naviwidgets.utils.WIDGET_STATE_CHANGE
|
||||
import com.navi.naviwidgets.viewholder.ViewHolderFactoryImpl
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
|
||||
@AndroidEntryPoint
|
||||
@@ -576,10 +576,6 @@ class DigitalGoldSellActivity : BaseActivity(), WidgetCallback, NewBottomSheetLi
|
||||
} else if (it.action.isNotNullAndNotEmpty()) {
|
||||
when (it.action) {
|
||||
REFRESH -> {
|
||||
if (::commonBottomSheet.isInitialized && commonBottomSheet.isNotNull()) {
|
||||
commonBottomSheet.safelyDismissDialog()
|
||||
unblockInteractability()
|
||||
}
|
||||
sharedVM.setRefreshScreen(true)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,10 +19,10 @@ import androidx.databinding.DataBindingUtil
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.navi.analytics.utils.NaviTrackEvent
|
||||
import com.navi.base.deeplink.DeepLinkManager
|
||||
import com.navi.base.model.AnalyticsEvent
|
||||
import com.navi.base.model.CtaType
|
||||
import com.navi.analytics.utils.NaviTrackEvent
|
||||
import com.navi.base.model.AnalyticsEvent
|
||||
import com.navi.base.model.NaviClickAction
|
||||
import com.navi.base.model.NaviWidgetClickWithActionData
|
||||
import com.navi.base.utils.BaseUtils
|
||||
@@ -42,26 +42,24 @@ import com.navi.common.pushnotification.NotificationConstants.DISMISS
|
||||
import com.navi.common.ui.activity.BaseActivity
|
||||
import com.navi.common.ui.bottomsheet.WidgetsSupportedBottomSheet
|
||||
import com.navi.common.ui.fragment.WidgetFullScreenDialogFragment
|
||||
import com.navi.common.utils.Constants.GOLD_TRANSACTION_HISTORY
|
||||
import com.navi.common.utils.PlayStoreInAppRatingHelper
|
||||
import com.navi.common.utils.TemporaryStorageHelper
|
||||
import com.navi.common.utils.log
|
||||
import com.navi.common.utils.observeNonNull
|
||||
import com.navi.common.utils.toCtaData
|
||||
import com.navi.common.viewmodel.WidgetFullScreenDialogSharedVM
|
||||
import com.navi.common.viewmodel.WidgetSupportedBottomSheetSharedVM
|
||||
import com.navi.gold.R
|
||||
import com.navi.gold.databinding.ActivityDigitalGoldTransactionBinding
|
||||
import com.navi.gold.util.GoldAnalytics.DIGITAL_GOLD_TRANSACTION_SCREEN
|
||||
import com.navi.gold.viewmodels.DigitalGoldTransactionVM
|
||||
import com.navi.common.viewmodel.WidgetSupportedBottomSheetSharedVM
|
||||
import com.navi.gold.util.Constants.CSAT_POPUP_DELAY
|
||||
import com.navi.gold.util.Constants.SHOW_REWARD_GRATIFICATION
|
||||
import com.navi.gold.util.Constants.SHOW_WIDGET_BOTTOM_SHEET
|
||||
import com.navi.gold.util.GoldAnalytics.DIGITAL_GOLD_TRANSACTION_SCREEN
|
||||
import com.navi.gold.util.GoldAnalytics.FEEDBACK
|
||||
import com.navi.gold.util.GoldAnalytics.GOLD_VAULT_CSAT_BOTTOMSHEET_CLOSE
|
||||
import com.navi.gold.util.GoldAnalytics.GOLD_VAULT_CSAT_BOTTOMSHEET_INIT
|
||||
import com.navi.gold.util.GoldAnalytics.GOLD_VAULT_CSAT_BOTTOMSHEET_SUBMIT
|
||||
import com.navi.gold.util.startExitAnimation
|
||||
import com.navi.gold.viewmodels.DigitalGoldTransactionVM
|
||||
import com.navi.naviwidgets.actions.DownloadClickAction
|
||||
import com.navi.naviwidgets.actions.NaviWidgetClick
|
||||
import com.navi.naviwidgets.adapters.NaviAdapter
|
||||
@@ -91,7 +89,6 @@ class DigitalGoldTransactionActivity : BaseActivity(), WidgetCallback, CsatCompl
|
||||
private lateinit var widgetSupportedBottomSheet: WidgetsSupportedBottomSheet
|
||||
private var csatFlowJob: Job? = null
|
||||
private var areGratificationParamsConsumed = false
|
||||
private var isFetchedFromCache = false
|
||||
private val naviAdapter =
|
||||
NaviAdapter(widgetCallback = this, factory = ViewHolderFactoryImpl(), isRecyclable = true)
|
||||
|
||||
@@ -178,10 +175,7 @@ class DigitalGoldTransactionActivity : BaseActivity(), WidgetCallback, CsatCompl
|
||||
this@DigitalGoldTransactionActivity
|
||||
) { widgetResponse ->
|
||||
areGratificationParamsConsumed = true
|
||||
if (!isFetchedFromCache) {
|
||||
hideLoader()
|
||||
}
|
||||
isFetchedFromCache = false
|
||||
hideLoader()
|
||||
|
||||
val csatPopupDelay =
|
||||
max(intent.getStringExtra(CSAT_POPUP_DELAY).toLongWithSafe(), 0L)
|
||||
@@ -293,12 +287,7 @@ class DigitalGoldTransactionActivity : BaseActivity(), WidgetCallback, CsatCompl
|
||||
}
|
||||
|
||||
private fun fetchDigitalTransactionPageDetails() {
|
||||
if (TemporaryStorageHelper.SOFT_REF_CACHE.contains(GOLD_TRANSACTION_HISTORY)) {
|
||||
isFetchedFromCache = true
|
||||
areGratificationParamsConsumed = true
|
||||
} else {
|
||||
showLoader(isShimmerEffect = true)
|
||||
}
|
||||
showLoader(isShimmerEffect = true)
|
||||
val params =
|
||||
if (!areGratificationParamsConsumed) {
|
||||
intent.getStringExtra(SHOW_REWARD_GRATIFICATION)
|
||||
|
||||
@@ -18,9 +18,4 @@ object Constants {
|
||||
const val SHOW_REWARD_GRATIFICATION = "showRewardGratification"
|
||||
const val KUBER_TARGET_VALUE = "KUBER"
|
||||
const val CSAT_POPUP_DELAY = "csatPopupDelay"
|
||||
const val BUTTON_LOADER = "button_loader"
|
||||
const val GOLD_KYC_URL = "gold/buy/goldKyc"
|
||||
const val GOLD_BUY_SUMMARY_URL = "gold/buy"
|
||||
const val GOlD_KYC_BUY = "GOLD_KYC_BUY"
|
||||
const val TTL_SOFT_REF_CACHE_API_EXPIRY_TIME: Long = 40000
|
||||
}
|
||||
@@ -18,16 +18,8 @@ class DigitalGoldBuySharedVM : BaseVM(isExceptionNeedToShow = false) {
|
||||
val paymentResponse: LiveData<DigitalGoldPaymentResponse>
|
||||
get() = _paymentResponse
|
||||
|
||||
private val _isLoading = MutableLiveData<Boolean>()
|
||||
val isLoading: LiveData<Boolean>
|
||||
get() = _isLoading
|
||||
|
||||
fun setPaymentData(digitalGoldPaymentResponse: DigitalGoldPaymentResponse) {
|
||||
_paymentResponse.value = digitalGoldPaymentResponse
|
||||
}
|
||||
|
||||
fun setButtonLoaderState(buttonLoaderState: Boolean) {
|
||||
_isLoading.value = buttonLoaderState
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -15,26 +15,19 @@ import com.navi.common.model.common.WidgetBottomSheetData
|
||||
import com.navi.common.model.common.WidgetResponse
|
||||
import com.navi.common.network.models.RepoResult
|
||||
import com.navi.common.network.models.SuccessResponse
|
||||
import com.navi.common.utils.Constants
|
||||
import com.navi.common.utils.TemporaryStorageHelper
|
||||
import com.navi.common.viewmodel.BaseVM
|
||||
import com.navi.gold.model.DigitalGoldActionCheckResponse
|
||||
import com.navi.gold.model.DigitalGoldPollingResponse
|
||||
import com.navi.gold.model.GoldBuyOrderRequest
|
||||
import com.navi.gold.model.GoldSellOrderResponse
|
||||
import com.navi.gold.repo.DigitalGoldBuyRepo
|
||||
import com.navi.gold.repo.DigitalGoldTransactionRepo
|
||||
import com.navi.gold.util.Constants.GOlD_KYC_BUY
|
||||
import com.navi.payment.paymenthandler.model.PaymentStatusData
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import kotlinx.coroutines.launch
|
||||
import javax.inject.Inject
|
||||
|
||||
@HiltViewModel
|
||||
class DigitalGoldBuyVM @Inject constructor(
|
||||
private val goldBuyRepo: DigitalGoldBuyRepo,
|
||||
private val goldTransactionRepo: DigitalGoldTransactionRepo
|
||||
) :
|
||||
class DigitalGoldBuyVM @Inject constructor(private val goldBuyRepo: DigitalGoldBuyRepo) :
|
||||
BaseVM() {
|
||||
|
||||
private val _digitalGoldBuyWidgets = MutableLiveData<WidgetResponse>()
|
||||
@@ -63,10 +56,6 @@ class DigitalGoldBuyVM @Inject constructor(
|
||||
val postPaymentResponse: LiveData<RepoResult<SuccessResponse>>
|
||||
get() = _postPaymentResponse
|
||||
|
||||
private val _digitalGoldTransactionWidgets = MutableLiveData<WidgetResponse>()
|
||||
val digitalGoldTransactionWidgets: LiveData<WidgetResponse>
|
||||
get() = _digitalGoldTransactionWidgets
|
||||
|
||||
private var _isBackBottomSheetShownOnce: Boolean = false
|
||||
|
||||
fun setPostPaymentResponseStatus(data: PaymentStatusData) {
|
||||
@@ -74,25 +63,6 @@ class DigitalGoldBuyVM @Inject constructor(
|
||||
}
|
||||
|
||||
fun fetchDigitalGoldBuyDetails(amount: Double) {
|
||||
if (TemporaryStorageHelper.SOFT_REF_CACHE.contains(GOlD_KYC_BUY)) {
|
||||
TemporaryStorageHelper.SOFT_REF_CACHE.get(GOlD_KYC_BUY)?.let {
|
||||
it as? WidgetResponse
|
||||
}?.let { cachedResponse ->
|
||||
_digitalGoldBuyWidgets.value = cachedResponse
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
TemporaryStorageHelper.SOFT_REF_CACHE.get(Constants.GOLD_BUY)?.let {
|
||||
it as? WidgetResponse
|
||||
}?.let { cachedResponse ->
|
||||
_digitalGoldBuyWidgets.value = cachedResponse
|
||||
} ?: run {
|
||||
fetchDigitalGoldBuyDetailsRemote(amount)
|
||||
}
|
||||
}
|
||||
|
||||
private fun fetchDigitalGoldBuyDetailsRemote(amount: Double) {
|
||||
coroutineScope.launch {
|
||||
val response = goldBuyRepo.fetchDigitalGoldBuyDetails(amount)
|
||||
if (response.error.isNull() && response.errors.isNullOrEmpty()) {
|
||||
@@ -103,17 +73,6 @@ class DigitalGoldBuyVM @Inject constructor(
|
||||
}
|
||||
}
|
||||
|
||||
fun fetchDigitalGoldTransactionDetails(params: Map<String, String> = emptyMap()) {
|
||||
coroutineScope.launch {
|
||||
val response = goldTransactionRepo.fetchDigitalGoldTransactionDetails(params)
|
||||
if (response.error.isNull() && response.errors.isNullOrEmpty()) {
|
||||
_digitalGoldTransactionWidgets.value = response.data
|
||||
} else {
|
||||
setErrorData(response.errors, response.error)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun fetchBuyOrderResponse(
|
||||
amount: Double,
|
||||
exchangeRateId: String,
|
||||
@@ -180,11 +139,10 @@ class DigitalGoldBuyVM @Inject constructor(
|
||||
}
|
||||
|
||||
fun showBackBottomSheet(): Boolean {
|
||||
return !_isBackBottomSheetShownOnce && _digitalGoldBuyWidgets.value?.extraData?.backBottomSheetData?.data?.isNotEmpty()
|
||||
.orFalse()
|
||||
return !_isBackBottomSheetShownOnce && _digitalGoldBuyWidgets.value?.extraData?.backBottomSheetData?.data?.isNotEmpty().orFalse()
|
||||
}
|
||||
|
||||
fun setIsBackBottomSheetShownOnce() {
|
||||
fun setIsBackBottomSheetShownOnce(){
|
||||
_isBackBottomSheetShownOnce = true
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,21 +20,13 @@ import com.navi.common.viewmodel.BaseVM
|
||||
import com.navi.gold.model.AmountDataRequest
|
||||
import com.navi.gold.model.GoldKycCheckResponse
|
||||
import com.navi.gold.model.GoldKycPageRequest
|
||||
import com.navi.gold.repo.DigitalGoldBuyRepo
|
||||
import com.navi.gold.repo.DigitalGoldHomeRepo
|
||||
import com.navi.gold.repo.DigitalGoldKycRepo
|
||||
import com.navi.gold.repo.DigitalGoldTransactionRepo
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import kotlinx.coroutines.launch
|
||||
import javax.inject.Inject
|
||||
|
||||
@HiltViewModel
|
||||
class DigitalGoldHomeVM @Inject constructor(
|
||||
private val goldHomeRepo: DigitalGoldHomeRepo,
|
||||
private val goldKycRepo: DigitalGoldKycRepo,
|
||||
private val goldBuyRepo: DigitalGoldBuyRepo,
|
||||
private val goldTransactionRepo: DigitalGoldTransactionRepo
|
||||
) :
|
||||
class DigitalGoldHomeVM @Inject constructor(private val goldHomeRepo: DigitalGoldHomeRepo) :
|
||||
BaseVM() {
|
||||
|
||||
private val _digitalGoldHomeWidgets = MutableLiveData<WidgetResponse>()
|
||||
@@ -43,15 +35,6 @@ class DigitalGoldHomeVM @Inject constructor(
|
||||
private val _pollingData = MutableLiveData<WidgetResponse>()
|
||||
val pollingData: LiveData<WidgetResponse>
|
||||
get() = _pollingData
|
||||
|
||||
private val _digitalGoldBuyWidgets = MutableLiveData<WidgetResponse>()
|
||||
val digitalGoldBuyWidgets: LiveData<WidgetResponse>
|
||||
get() = _digitalGoldBuyWidgets
|
||||
|
||||
private val _digitalGoldKycWidgets = MutableLiveData<WidgetResponse>()
|
||||
val digitalGoldKycWidgets: LiveData<WidgetResponse>
|
||||
get() = _digitalGoldKycWidgets
|
||||
|
||||
private val _panVerifyCta = MutableLiveData<GoldKycCheckResponse>()
|
||||
val panVerifyCta: LiveData<GoldKycCheckResponse>
|
||||
get() = _panVerifyCta
|
||||
@@ -61,10 +44,6 @@ class DigitalGoldHomeVM @Inject constructor(
|
||||
val buyBottomSheetData: LiveData<WidgetResponse>
|
||||
get() = _buyBottomSheetData
|
||||
|
||||
private val _digitalGoldTransactionWidgets = MutableLiveData<WidgetResponse>()
|
||||
val digitalGoldTransactionWidgets: LiveData<WidgetResponse>
|
||||
get() = _digitalGoldTransactionWidgets
|
||||
|
||||
private var _isBackBottomSheetShownOnce: Boolean = false
|
||||
|
||||
fun setActualSellAmount(actualSellAmount: Double) {
|
||||
@@ -117,18 +96,6 @@ class DigitalGoldHomeVM @Inject constructor(
|
||||
}
|
||||
}
|
||||
|
||||
fun fetchDigitalGoldTransactionDetails(params: Map<String, String> = emptyMap()) {
|
||||
coroutineScope.launch {
|
||||
val response = goldTransactionRepo.fetchDigitalGoldTransactionDetails(params)
|
||||
if (response.error.isNull() && response.errors.isNullOrEmpty()) {
|
||||
_digitalGoldTransactionWidgets.value = response.data
|
||||
} else {
|
||||
setErrorData(response.errors, response.error)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fun fetchPanVerifyCta(goldKycPageRequest: GoldKycPageRequest?) {
|
||||
coroutineScope.launch {
|
||||
val response = goldHomeRepo.fetchPanVerifyCta(goldKycPageRequest)
|
||||
@@ -151,29 +118,6 @@ class DigitalGoldHomeVM @Inject constructor(
|
||||
}
|
||||
}
|
||||
|
||||
fun fetchDigitalGoldKycDetails(goldKycPageRequest: GoldKycPageRequest) {
|
||||
coroutineScope.launch {
|
||||
val response = goldKycRepo.fetchDigitalGoldKycDetails(goldKycPageRequest)
|
||||
if (response.error.isNull() && response.errors.isNullOrEmpty()) {
|
||||
_digitalGoldKycWidgets.value = response.data
|
||||
|
||||
} else {
|
||||
setErrorData(response.errors, response.error)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun fetchDigitalGoldBuyDetails(amount: Double) {
|
||||
coroutineScope.launch {
|
||||
val response = goldBuyRepo.fetchDigitalGoldBuyDetails(amount)
|
||||
if (response.error.isNull() && response.errors.isNullOrEmpty()) {
|
||||
_digitalGoldBuyWidgets.value = response.data
|
||||
} else {
|
||||
setErrorData(response.errors, response.error)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun startPolling() {
|
||||
coroutineScope.launch {
|
||||
val response = goldHomeRepo.fetchDigitalGoldHomeDetailsPolling()
|
||||
|
||||
@@ -12,17 +12,14 @@ import androidx.lifecycle.MutableLiveData
|
||||
import com.navi.base.utils.EMPTY
|
||||
import com.navi.base.utils.isNull
|
||||
import com.navi.base.utils.orFalse
|
||||
import com.navi.base.utils.orZero
|
||||
import com.navi.common.model.common.WidgetBottomSheetData
|
||||
import com.navi.common.model.common.WidgetResponse
|
||||
import com.navi.common.utils.Constants.GOLD_KYC
|
||||
import com.navi.common.utils.TemporaryStorageHelper
|
||||
import com.navi.base.utils.orZero
|
||||
import com.navi.common.viewmodel.BaseVM
|
||||
import com.navi.gold.model.GoldKycCheckResponse
|
||||
import com.navi.gold.model.GoldKycPageRequest
|
||||
import com.navi.gold.model.GoldKycVerifyRequest
|
||||
import com.navi.gold.model.KycCheckPollingConfigResponse
|
||||
import com.navi.gold.repo.DigitalGoldBuyRepo
|
||||
import com.navi.gold.repo.DigitalGoldKycRepo
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import kotlinx.coroutines.delay
|
||||
@@ -31,10 +28,7 @@ import kotlinx.coroutines.launch
|
||||
import javax.inject.Inject
|
||||
|
||||
@HiltViewModel
|
||||
class DigitalGoldKycVM @Inject constructor(
|
||||
private val goldKycRepo: DigitalGoldKycRepo,
|
||||
private val goldBuyRepo: DigitalGoldBuyRepo
|
||||
) :
|
||||
class DigitalGoldKycVM @Inject constructor(private val goldKycRepo: DigitalGoldKycRepo) :
|
||||
BaseVM() {
|
||||
|
||||
private val _digitalGoldKycWidgets = MutableLiveData<WidgetResponse>()
|
||||
@@ -44,12 +38,7 @@ class DigitalGoldKycVM @Inject constructor(
|
||||
val panVerifyResponse: LiveData<GoldKycCheckResponse>
|
||||
get() = _panVerifyResponse
|
||||
|
||||
private val _panVerifyPollingConfigResponse =
|
||||
MutableStateFlow<KycCheckPollingConfigResponse?>(null)
|
||||
|
||||
private val _digitalGoldBuyWidgets = MutableLiveData<WidgetResponse>()
|
||||
val digitalGoldBuyWidgets: LiveData<WidgetResponse>
|
||||
get() = _digitalGoldBuyWidgets
|
||||
private val _panVerifyPollingConfigResponse = MutableStateFlow<KycCheckPollingConfigResponse?>(null)
|
||||
|
||||
private enum class KycPollingStatusEnum {
|
||||
PENDING,
|
||||
@@ -84,16 +73,6 @@ class DigitalGoldKycVM @Inject constructor(
|
||||
fun getDob() = dob
|
||||
|
||||
fun fetchDigitalGoldKycDetails(goldKycPageRequest: GoldKycPageRequest) {
|
||||
TemporaryStorageHelper.SOFT_REF_CACHE.get(GOLD_KYC)?.let {
|
||||
it as? WidgetResponse
|
||||
}?.let { cachedResponse ->
|
||||
_digitalGoldKycWidgets.value = cachedResponse
|
||||
} ?: run {
|
||||
fetchDigitalGoldKycDetailsRemote(goldKycPageRequest)
|
||||
}
|
||||
}
|
||||
|
||||
private fun fetchDigitalGoldKycDetailsRemote(goldKycPageRequest: GoldKycPageRequest) {
|
||||
coroutineScope.launch {
|
||||
val response = goldKycRepo.fetchDigitalGoldKycDetails(goldKycPageRequest)
|
||||
if (response.error.isNull() && response.errors.isNullOrEmpty()) {
|
||||
@@ -112,23 +91,9 @@ class DigitalGoldKycVM @Inject constructor(
|
||||
retryCount++
|
||||
}
|
||||
|
||||
fun fetchDigitalGoldBuyDetails(amount: Double) {
|
||||
fun fetchGoldKycVerifyDetails(goldKycVerifyRequest: GoldKycVerifyRequest?, usePolling: Boolean = false) {
|
||||
coroutineScope.launch {
|
||||
val response = goldBuyRepo.fetchDigitalGoldBuyDetails(amount)
|
||||
if (response.error.isNull() && response.errors.isNullOrEmpty()) {
|
||||
_digitalGoldBuyWidgets.value = response.data
|
||||
} else {
|
||||
setErrorData(response.errors, response.error)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun fetchGoldKycVerifyDetails(
|
||||
goldKycVerifyRequest: GoldKycVerifyRequest?,
|
||||
usePolling: Boolean = false
|
||||
) {
|
||||
coroutineScope.launch {
|
||||
if (usePolling) {
|
||||
if(usePolling) {
|
||||
resetPollingRetryCount()
|
||||
val response = goldKycRepo.fetchGoldKycVerifyPollingConfig(goldKycVerifyRequest)
|
||||
if (response.error.isNull() && response.errors.isNullOrEmpty()) {
|
||||
@@ -161,11 +126,11 @@ class DigitalGoldKycVM @Inject constructor(
|
||||
val response = goldKycRepo.pollKycVerificationStatus(pollingRequestId)
|
||||
incrementPollingRetryCount()
|
||||
if (response.error.isNull() && response.errors.isNullOrEmpty()) {
|
||||
if (retryCount > pollingRequestConfig.requestConfig?.numOfRetries.orZero()) {
|
||||
if(retryCount > pollingRequestConfig.requestConfig?.numOfRetries.orZero()) {
|
||||
_panVerifyResponse.value = response.data?.timeoutDetails
|
||||
resetPollingRetryCount()
|
||||
} else {
|
||||
if (response.data?.status == KycPollingStatusEnum.PENDING.name) {
|
||||
if(response.data?.status == KycPollingStatusEnum.PENDING.name) {
|
||||
pollingRequestId = response.data?.requestId.orEmpty()
|
||||
delay(pollingRequestConfig.requestConfig?.interval.orZero())
|
||||
pollKycVerificationStatus()
|
||||
@@ -185,11 +150,10 @@ class DigitalGoldKycVM @Inject constructor(
|
||||
}
|
||||
|
||||
fun showBackBottomSheet(): Boolean {
|
||||
return !_isBackBottomSheetShownOnce && _digitalGoldKycWidgets.value?.extraData?.backBottomSheetData?.data?.isNotEmpty()
|
||||
.orFalse()
|
||||
return !_isBackBottomSheetShownOnce && _digitalGoldKycWidgets.value?.extraData?.backBottomSheetData?.data?.isNotEmpty().orFalse()
|
||||
}
|
||||
|
||||
fun setIsBackBottomSheetShownOnce() {
|
||||
fun setIsBackBottomSheetShownOnce(){
|
||||
_isBackBottomSheetShownOnce = true
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,14 +13,12 @@ import com.androidx.lifecycle.SingleLiveEvent
|
||||
import com.navi.base.utils.isNull
|
||||
import com.navi.common.model.common.InvoiceDownloadData
|
||||
import com.navi.common.model.common.WidgetResponse
|
||||
import com.navi.common.utils.Constants.GOLD_TRANSACTION_HISTORY
|
||||
import com.navi.common.utils.TemporaryStorageHelper
|
||||
import com.navi.common.viewmodel.BaseVM
|
||||
import com.navi.gold.repo.DigitalGoldTransactionRepo
|
||||
import com.navi.naviwidgets.models.response.CSATResponse
|
||||
import com.navi.gold.repo.DigitalGoldTransactionRepo
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import kotlinx.coroutines.launch
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
@HiltViewModel
|
||||
class DigitalGoldTransactionVM
|
||||
@@ -40,16 +38,6 @@ constructor(private val goldTransactionRepo: DigitalGoldTransactionRepo) : BaseV
|
||||
get() = _csatResponse
|
||||
|
||||
fun fetchDigitalGoldTransactionDetails(params: Map<String, String> = emptyMap()) {
|
||||
TemporaryStorageHelper.SOFT_REF_CACHE.get(GOLD_TRANSACTION_HISTORY)?.let {
|
||||
it as? WidgetResponse
|
||||
}?.let { cachedResponse ->
|
||||
_digitalGoldTransactionWidgets.value = cachedResponse
|
||||
} ?: run {
|
||||
fetchDigitalGoldTransactionDetailsRemote(params)
|
||||
}
|
||||
}
|
||||
|
||||
fun fetchDigitalGoldTransactionDetailsRemote(params: Map<String, String> = emptyMap()) {
|
||||
coroutineScope.launch {
|
||||
val response = goldTransactionRepo.fetchDigitalGoldTransactionDetails(params)
|
||||
if (response.error.isNull() && response.errors.isNullOrEmpty()) {
|
||||
@@ -65,8 +53,8 @@ constructor(private val goldTransactionRepo: DigitalGoldTransactionRepo) : BaseV
|
||||
val response = goldTransactionRepo.fetchDigitalGoldInvoiceDownloadUrl(transactionId!!)
|
||||
if (
|
||||
response.error.isNull() &&
|
||||
response.errors.isNullOrEmpty() &&
|
||||
!response.data.isNull()
|
||||
response.errors.isNullOrEmpty() &&
|
||||
!response.data.isNull()
|
||||
) {
|
||||
_invoiceDownloadData.value = response.data
|
||||
} else {
|
||||
|
||||
@@ -38,5 +38,4 @@ interface GoldConversionWidgetInfo {
|
||||
fun chipData(): List<AmountChipData>?
|
||||
fun inputValidationList(): List<BaseInputValidation?>?
|
||||
fun validationDelay(): Long?
|
||||
fun isButtonLoaderEnabled(): Boolean?
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ import com.google.gson.annotations.SerializedName
|
||||
import com.navi.base.model.ActionData
|
||||
import com.navi.design.common.Padding
|
||||
import com.navi.design.textview.model.TextWithStyleVariation
|
||||
import com.navi.design.utils.CornerRadius
|
||||
import com.navi.naviwidgets.interfaces.GoldConversionWidgetInfo
|
||||
import com.navi.naviwidgets.models.response.WidgetError
|
||||
import com.navi.naviwidgets.validations.BaseInputValidation
|
||||
@@ -88,8 +89,6 @@ data class GoldConversionWidget(
|
||||
widgetData?.inputValidationList
|
||||
|
||||
override fun validationDelay(): Long? = widgetData?.validationDelay
|
||||
|
||||
override fun isButtonLoaderEnabled(): Boolean? = widgetData?.showButtonLoader
|
||||
}
|
||||
|
||||
data class GoldConversionData(
|
||||
@@ -132,8 +131,6 @@ data class GoldConversionData(
|
||||
val inputValidationList: List<BaseInputValidation?>? = null,
|
||||
@SerializedName("validationDelay")
|
||||
val validationDelay: Long? = null,
|
||||
val showButtonLoader: Boolean = true,
|
||||
var buttonLoaderState: ButtonLoaderState? = null
|
||||
) : Serializable
|
||||
|
||||
data class AmountConstraint(
|
||||
@@ -166,7 +163,6 @@ data class AmountChipData(
|
||||
@SerializedName("bgColorVariations") val bgColorVariations: Map<String, String?>? = null
|
||||
)
|
||||
}
|
||||
|
||||
@Parcelize
|
||||
data class ActionButtonStyle(
|
||||
@SerializedName("bgColor")
|
||||
@@ -176,7 +172,3 @@ data class ActionButtonStyle(
|
||||
@SerializedName("padding")
|
||||
val padding: Padding? = null
|
||||
) : Parcelable
|
||||
|
||||
data class ButtonLoaderState(
|
||||
var showLoader: Boolean? = null
|
||||
)
|
||||
|
||||
@@ -16,7 +16,7 @@ data class PaymentWidget(
|
||||
override val isDependentWidget: Boolean?,
|
||||
override val dependencyWidgetId: String?,
|
||||
override var isDependencyWidgetShowing: Boolean?,
|
||||
override var widgetError: WidgetError?,
|
||||
override var widgetError: WidgetError?
|
||||
) : NaviWidget(), Serializable {
|
||||
companion object {
|
||||
const val WIDGET_NAME = "PAYMENT_WIDGET"
|
||||
@@ -34,9 +34,7 @@ data class PaymentWidgetData(
|
||||
val subTitle: NaviTextComponent? = null,
|
||||
var totalAmount: Double? = null,
|
||||
@SerializedName("precision")
|
||||
val precision: Int? = null,
|
||||
var showButtonLoader: Boolean = true,
|
||||
var buttonLoaderState: ButtonLoaderState? = null
|
||||
val precision: Int? = null
|
||||
)
|
||||
|
||||
data class PaymentData(
|
||||
|
||||
@@ -123,7 +123,6 @@ const val SUCCESS = "SUCCESS"
|
||||
const val FAILURE = "FAILURE"
|
||||
const val DOWNLOAD = "DOWNLOAD"
|
||||
const val DOWNLOAD_URL = "DOWNLOAD_URL"
|
||||
const val BUTTON_LOADER = "button_loader"
|
||||
const val FEEDBACK_WIDGET_USER_DATA = "FEEDBACK_WIDGET_USER_DATA"
|
||||
const val BOTTOM_SHEET_KEY = "BOTTOM_SHEET_KEY"
|
||||
const val METADATA_ANALYTICS_EVENT = "analyticsEvent"
|
||||
@@ -149,8 +148,5 @@ const val CUSTOM_TIME_FORMAT = "custom_time_format"
|
||||
const val PAGE_REFRESH = "page_refresh"
|
||||
const val SELECTED_CUSTOM_PAYMENT_TYPE = "SELECTED_CUSTOM_PAYMENT_TYPE"
|
||||
const val KEY_CLICKABLE = "Clickable"
|
||||
const val BUY_GOLD = "BUY_GOLD"
|
||||
const val PAYMENT_PAGE = "payment_page"
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -34,7 +34,6 @@ import androidx.core.content.res.ResourcesCompat
|
||||
import androidx.databinding.DataBindingUtil
|
||||
import androidx.databinding.ViewDataBinding
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.airbnb.lottie.LottieAnimationView
|
||||
import com.bumptech.glide.Glide
|
||||
import com.bumptech.glide.load.DataSource
|
||||
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
||||
@@ -59,7 +58,6 @@ import com.navi.base.utils.isNotNull
|
||||
import com.navi.base.utils.isNotNullAndNotEmpty
|
||||
import com.navi.base.utils.isNull
|
||||
import com.navi.base.utils.orZero
|
||||
import com.navi.design.textview.NaviTextView
|
||||
import com.navi.design.textview.model.SpanInterface
|
||||
import com.navi.design.textview.model.TextWithStyle
|
||||
import com.navi.design.utils.Constants
|
||||
@@ -1016,23 +1014,4 @@ fun getInfoBottomSheetDataFromJsonObject(value: String?): BottomSheetInfoV2? {
|
||||
e.log()
|
||||
}
|
||||
return bottomSheetData
|
||||
}
|
||||
|
||||
fun setButtonLoaderState(
|
||||
button: NaviTextView,
|
||||
buttonLoader: LottieAnimationView,
|
||||
isLoading: Boolean,
|
||||
text: String
|
||||
) {
|
||||
if (isLoading) {
|
||||
button.text = EMPTY
|
||||
buttonLoader.visibility = View.VISIBLE
|
||||
buttonLoader.playAnimation()
|
||||
button.isEnabled = false
|
||||
} else {
|
||||
button.text = text
|
||||
buttonLoader.visibility = View.GONE
|
||||
buttonLoader.pauseAnimation()
|
||||
button.isEnabled = true
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -11,7 +11,6 @@ import androidx.databinding.ViewDataBinding
|
||||
import com.navi.naviwidgets.callbacks.WidgetCallback
|
||||
import com.navi.naviwidgets.databinding.LayoutGoldConversionBinding
|
||||
import com.navi.naviwidgets.interfaces.GoldConversionWidgetInfo
|
||||
import com.navi.naviwidgets.models.ButtonLoaderState
|
||||
import com.navi.naviwidgets.models.GoldConversionData
|
||||
import com.navi.naviwidgets.models.GoldConversionWidget
|
||||
import com.navi.naviwidgets.widgets.GoldConversionWidgetLayout
|
||||
@@ -50,9 +49,6 @@ class GoldConversionWidgetVH(private val viewDataBinding: ViewDataBinding) :
|
||||
is GoldConversionData -> {
|
||||
(itemView as GoldConversionWidgetLayout).updatePollingAmountAndWeight(goldConversionData = payload)
|
||||
}
|
||||
is ButtonLoaderState -> {
|
||||
(itemView as GoldConversionWidgetLayout).updateButtonLoader(buttonLoaderState = payload)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,7 +10,6 @@ package com.navi.naviwidgets.viewholder
|
||||
import androidx.databinding.ViewDataBinding
|
||||
import com.navi.naviwidgets.callbacks.WidgetCallback
|
||||
import com.navi.naviwidgets.databinding.PaymentWidgetLayoutBinding
|
||||
import com.navi.naviwidgets.models.ButtonLoaderState
|
||||
import com.navi.naviwidgets.models.PaymentWidget
|
||||
import com.navi.naviwidgets.widgets.PaymentWidgetLayout
|
||||
|
||||
@@ -39,11 +38,6 @@ class PaymentWidgetVH(private val viewDataBinding: ViewDataBinding) :
|
||||
override fun bindWidgetStateChanged(payload: Any?) {
|
||||
if (itemView is PaymentWidgetLayout) {
|
||||
(itemView as PaymentWidgetLayout).updateAmount()
|
||||
when(payload){
|
||||
is ButtonLoaderState -> {
|
||||
(itemView as PaymentWidgetLayout).updateButtonLoader(buttonLoaderState = payload)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ package com.navi.naviwidgets.widgets
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import androidx.cardview.widget.CardView
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import androidx.core.view.updateLayoutParams
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
@@ -17,12 +18,7 @@ import com.navi.base.model.ActionData
|
||||
import com.navi.base.model.GenericAnalyticsData
|
||||
import com.navi.base.model.NaviClickAction
|
||||
import com.navi.base.model.NaviWidgetClickWithActionData
|
||||
import com.navi.design.utils.CornerRadius
|
||||
import com.navi.design.utils.DrawableShape
|
||||
import com.navi.design.utils.dpToPx
|
||||
import com.navi.design.utils.dpToPxInInt
|
||||
import com.navi.design.utils.getNaviDrawableFromBackend
|
||||
import com.navi.design.utils.parseColorSafe
|
||||
import com.navi.design.utils.*
|
||||
import com.navi.naviwidgets.R
|
||||
import com.navi.naviwidgets.actions.NaviWidgetClick
|
||||
import com.navi.naviwidgets.adapters.NaviAdapter
|
||||
@@ -30,13 +26,7 @@ import com.navi.naviwidgets.callbacks.WidgetCallback
|
||||
import com.navi.naviwidgets.databinding.LayoutContainerBinding
|
||||
import com.navi.naviwidgets.extensions.deepEqualTo
|
||||
import com.navi.naviwidgets.interfaces.ContainerWidgetInfo
|
||||
import com.navi.naviwidgets.models.ButtonLoaderState
|
||||
import com.navi.naviwidgets.models.GoldConversionData
|
||||
import com.navi.naviwidgets.models.GoldConversionWidget
|
||||
import com.navi.naviwidgets.models.NaviWidget
|
||||
import com.navi.naviwidgets.models.PaymentWidget
|
||||
import com.navi.naviwidgets.models.TextWithTimerWidget
|
||||
import com.navi.naviwidgets.models.WidgetChangedData
|
||||
import com.navi.naviwidgets.models.*
|
||||
import com.navi.naviwidgets.utils.WIDGET_STATE_CHANGE
|
||||
import com.navi.naviwidgets.utils.setMargin
|
||||
import com.navi.naviwidgets.utils.setWidgetLayoutParams
|
||||
@@ -170,8 +160,7 @@ class ContainerWidgetLayout @JvmOverloads constructor(
|
||||
root.alpha = 0.4F
|
||||
}
|
||||
}
|
||||
if (info.removeElevation() == true) cwlParent.elevation =
|
||||
resources.getDimension(R.dimen.dp_0)
|
||||
if(info.removeElevation() == true) cwlParent.elevation = resources.getDimension(R.dimen.dp_0)
|
||||
info.setMargin()?.let {
|
||||
cwlParent.setMargin(it)
|
||||
}
|
||||
@@ -237,7 +226,6 @@ class ContainerWidgetLayout @JvmOverloads constructor(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
is TextWithTimerWidget -> {
|
||||
naviAdapter.list.forEachIndexed { index, naviWidget ->
|
||||
if (naviWidget is TextWithTimerWidget) {
|
||||
@@ -248,8 +236,7 @@ class ContainerWidgetLayout @JvmOverloads constructor(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
is GoldConversionData, GoldConversionWidget, is ButtonLoaderState -> {
|
||||
is GoldConversionData, GoldConversionWidget -> {
|
||||
naviAdapter.list.forEachIndexed { index, naviWidget ->
|
||||
if (naviWidget is GoldConversionWidget) {
|
||||
naviAdapter.notifyItemChanged(
|
||||
@@ -257,13 +244,6 @@ class ContainerWidgetLayout @JvmOverloads constructor(
|
||||
WidgetChangedData(WIDGET_STATE_CHANGE, payLoad)
|
||||
)
|
||||
}
|
||||
|
||||
if (naviWidget is PaymentWidget) {
|
||||
naviAdapter.notifyItemChanged(
|
||||
index,
|
||||
WidgetChangedData(WIDGET_STATE_CHANGE, payLoad)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,16 +48,13 @@ import com.navi.naviwidgets.extensions.textChanges
|
||||
import com.navi.naviwidgets.extensions.toSafeDouble
|
||||
import com.navi.naviwidgets.interfaces.GoldConversionWidgetInfo
|
||||
import com.navi.naviwidgets.models.AmountChipData
|
||||
import com.navi.naviwidgets.models.ButtonLoaderState
|
||||
import com.navi.naviwidgets.models.GoldConversionData
|
||||
import com.navi.naviwidgets.models.NaviTextComponent
|
||||
import com.navi.naviwidgets.utils.BUTTON_LOADER
|
||||
import com.navi.naviwidgets.utils.COMMA
|
||||
import com.navi.naviwidgets.utils.EMPTY
|
||||
import com.navi.naviwidgets.utils.STORE_DIGITAL_GOLD_AMOUNT
|
||||
import com.navi.naviwidgets.utils.WIDGET_ERROR
|
||||
import com.navi.naviwidgets.utils.WIDGET_STATE_CHANGE
|
||||
import com.navi.naviwidgets.utils.setButtonLoaderState
|
||||
import kotlinx.coroutines.flow.debounce
|
||||
import kotlinx.coroutines.flow.launchIn
|
||||
import kotlinx.coroutines.flow.onEach
|
||||
@@ -154,13 +151,6 @@ class GoldConversionWidgetLayout @JvmOverloads constructor(
|
||||
it[AMOUNT] = info.actualAmount().toString()
|
||||
it[WEIGHT] = info.actualWeight().toString()
|
||||
}
|
||||
if (info?.isButtonLoaderEnabled() == true) {
|
||||
widgetCallback.widgetUserData(
|
||||
BUTTON_LOADER,
|
||||
true
|
||||
)
|
||||
updateButtonLoader(ButtonLoaderState(showLoader = true))
|
||||
}
|
||||
widgetCallback.onClick(
|
||||
NaviWidgetClickWithActionData(
|
||||
actionData = info.actionData()
|
||||
@@ -302,6 +292,7 @@ class GoldConversionWidgetLayout @JvmOverloads constructor(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun unselectChipsIfSelected() {
|
||||
if (isChipSelected) {
|
||||
unSelectAllChips()
|
||||
@@ -604,16 +595,6 @@ class GoldConversionWidgetLayout @JvmOverloads constructor(
|
||||
}
|
||||
}
|
||||
|
||||
fun updateButtonLoader(buttonLoaderState: ButtonLoaderState) {
|
||||
info?.actionData()?.title?.let {
|
||||
var text = it
|
||||
buttonLoaderState?.showLoader?.let {
|
||||
var isLoading = it
|
||||
setButtonLoaderState(binding.tvAction, binding.buttonLoader, isLoading, text)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun updateAmountAndWeight(info: GoldConversionWidgetInfo) {
|
||||
this.info = info
|
||||
resetErrorState()
|
||||
|
||||
@@ -18,14 +18,14 @@ import com.navi.naviwidgets.actions.PaymentWidgetClickAction
|
||||
import com.navi.naviwidgets.callbacks.WidgetCallback
|
||||
import com.navi.naviwidgets.databinding.PaymentWidgetLayoutBinding
|
||||
import com.navi.naviwidgets.extensions.showWhenDataIsAvailable
|
||||
import com.navi.naviwidgets.models.ButtonLoaderState
|
||||
import com.navi.naviwidgets.models.PaymentWidget
|
||||
import com.navi.naviwidgets.utils.setButtonLoaderState
|
||||
import java.math.RoundingMode
|
||||
import java.text.DecimalFormat
|
||||
|
||||
class PaymentWidgetLayout @JvmOverloads constructor(
|
||||
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
|
||||
context: Context,
|
||||
attrs: AttributeSet? = null,
|
||||
defStyleAttr: Int = 0
|
||||
) : ConstraintLayout(context, attrs, defStyleAttr) {
|
||||
|
||||
private lateinit var binding: PaymentWidgetLayoutBinding
|
||||
@@ -77,15 +77,18 @@ class PaymentWidgetLayout @JvmOverloads constructor(
|
||||
|
||||
} else {
|
||||
paymentWidget?.widgetData?.title?.text.spannedText(
|
||||
context = context, span = paymentWidget?.widgetData?.title?.span
|
||||
context = context,
|
||||
span = paymentWidget?.widgetData?.title?.span
|
||||
)
|
||||
}
|
||||
subTitle.text = paymentWidget?.widgetData?.subTitle?.text.spannedText(
|
||||
context = context, span = paymentWidget?.widgetData?.subTitle?.span
|
||||
context = context,
|
||||
span = paymentWidget?.widgetData?.subTitle?.span
|
||||
)
|
||||
paymentWidget?.widgetData?.actionButtonStyle?.let { btnStyle ->
|
||||
tvAction.background = getNaviDrawable(
|
||||
backgroundColor = btnStyle.bgColor.parseColorSafe(), radii = CornerRadius(
|
||||
backgroundColor = btnStyle.bgColor.parseColorSafe(),
|
||||
radii = CornerRadius(
|
||||
leftTop = dpToPx(btnStyle.radius?.leftTop.orZero()),
|
||||
rightTop = dpToPx(btnStyle.radius?.rightTop.orZero()),
|
||||
leftBottom = dpToPx(btnStyle.radius?.leftBottom.orZero()),
|
||||
@@ -109,7 +112,9 @@ class PaymentWidgetLayout @JvmOverloads constructor(
|
||||
|
||||
private fun setActionButtonState() {
|
||||
binding.apply {
|
||||
if (paymentWidget?.widgetData?.actionData.isNotNull() && paymentWidget?.widgetData?.actionData?.disabled == false) {
|
||||
if (paymentWidget?.widgetData?.actionData.isNotNull() &&
|
||||
paymentWidget?.widgetData?.actionData?.disabled == false
|
||||
) {
|
||||
tvAction.alpha = 1f
|
||||
tvAction.isEnabled = true
|
||||
} else {
|
||||
@@ -125,16 +130,6 @@ class PaymentWidgetLayout @JvmOverloads constructor(
|
||||
setActionButtonState()
|
||||
}
|
||||
}
|
||||
|
||||
fun updateButtonLoader(buttonLoaderState: ButtonLoaderState) {
|
||||
paymentWidget?.widgetData?.actionData?.title?.let {
|
||||
var text = it
|
||||
buttonLoaderState?.showLoader?.let {
|
||||
var isLoading = it
|
||||
setButtonLoaderState(binding.tvAction, binding.buttonLoader, isLoading, text)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -104,12 +104,12 @@
|
||||
android:background="@null"
|
||||
android:enabled="false"
|
||||
android:hint="@string/amount_hint_number_one"
|
||||
android:textColorHint="@color/description_colour_seven"
|
||||
android:imeOptions="actionDone"
|
||||
android:inputType="numberDecimal"
|
||||
android:lines="@integer/integer_1"
|
||||
android:maxLines="@integer/integer_1"
|
||||
android:scrollbars="vertical"
|
||||
android:textColorHint="@color/description_colour_seven"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toStartOf="@id/tvWeightUnit"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
@@ -233,7 +233,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/dp_48"
|
||||
android:layout_marginTop="@dimen/dp_32"
|
||||
android:background="@drawable/rounded_purple_color_enabled_state"
|
||||
android:background="@drawable/rounded_positive_button_bg"
|
||||
android:fontFamily="@font/tt_medium"
|
||||
android:gravity="center"
|
||||
android:textColor="@color/white"
|
||||
@@ -246,19 +246,5 @@
|
||||
tools:text="Sell Gold"
|
||||
tools:visibility="visible" />
|
||||
|
||||
<com.airbnb.lottie.LottieAnimationView
|
||||
android:id="@+id/button_loader"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="@dimen/dp_48"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintBottom_toBottomOf="@id/tvAction"
|
||||
app:layout_constraintEnd_toEndOf="@id/tvAction"
|
||||
app:layout_constraintStart_toStartOf="@id/tvAction"
|
||||
app:layout_constraintTop_toTopOf="@id/tvAction"
|
||||
app:lottie_autoPlay="false"
|
||||
app:lottie_loop="true"
|
||||
app:lottie_rawRes="@raw/cta_loader"
|
||||
app:lottie_speed="1.0" />
|
||||
|
||||
</com.navi.naviwidgets.widgets.GoldConversionWidgetLayout>
|
||||
</layout>
|
||||
@@ -16,7 +16,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<com.navi.design.textview.NaviTextView
|
||||
<com.navi.design.textview.NaviTextView
|
||||
android:id="@+id/title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
@@ -28,7 +28,7 @@
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<com.navi.design.textview.NaviTextView
|
||||
<com.navi.design.textview.NaviTextView
|
||||
android:id="@+id/sub_title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
@@ -44,7 +44,7 @@
|
||||
android:orientation="vertical"
|
||||
app:layout_constraintGuide_percent=".50" />
|
||||
|
||||
<com.navi.design.textview.NaviTextView
|
||||
<com.navi.design.textview.NaviTextView
|
||||
android:id="@+id/tvAction"
|
||||
style="@style/Small_Bold_White"
|
||||
android:layout_width="@dimen/dp_0"
|
||||
@@ -55,20 +55,5 @@
|
||||
app:layout_constraintStart_toStartOf="@id/guideline"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
tools:text="Pay your " />
|
||||
|
||||
<com.airbnb.lottie.LottieAnimationView
|
||||
android:id="@+id/button_loader"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="@dimen/dp_48"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintBottom_toBottomOf="@id/tvAction"
|
||||
app:layout_constraintEnd_toEndOf="@id/tvAction"
|
||||
app:layout_constraintStart_toStartOf="@id/tvAction"
|
||||
app:layout_constraintTop_toTopOf="@id/tvAction"
|
||||
app:lottie_autoPlay="false"
|
||||
app:lottie_loop="true"
|
||||
app:lottie_rawRes="@raw/cta_loader"
|
||||
app:lottie_speed="1.0" />
|
||||
|
||||
</com.navi.naviwidgets.widgets.PaymentWidgetLayout>
|
||||
</layout>
|
||||
Reference in New Issue
Block a user