NTP-74411 || Shrihari | Gold amount adjustment bottomsheet added (#16811)
This commit is contained in:
@@ -52,6 +52,7 @@ 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.ActionButtonWidget
|
||||
import com.navi.naviwidgets.models.ButtonLoaderState
|
||||
import com.navi.naviwidgets.models.ContainerWidget
|
||||
import com.navi.naviwidgets.models.NaviWidget
|
||||
@@ -61,7 +62,9 @@ import com.navi.naviwidgets.models.ShareData
|
||||
import com.navi.naviwidgets.models.TextWithTimerWidget
|
||||
import com.navi.naviwidgets.models.TitleWithRadioWidget
|
||||
import com.navi.naviwidgets.models.WidgetChangedData
|
||||
import com.navi.naviwidgets.utils.AMOUNT_ADJUSTMENT_BOTTOM_SHEET
|
||||
import com.navi.naviwidgets.utils.APP_SHARE
|
||||
import com.navi.naviwidgets.utils.BOTTOM_SHEET_TAG
|
||||
import com.navi.naviwidgets.utils.STORE_BANK_UPI_ID
|
||||
import com.navi.naviwidgets.utils.STORE_SIP_INSTALLMENT_DATE
|
||||
import com.navi.naviwidgets.utils.STORE_UPI_ICON_URL
|
||||
@@ -135,7 +138,10 @@ class WidgetsSupportedBottomSheet() : BaseBottomSheet(), WidgetCallback {
|
||||
setBackground(COLOR_TRANSPARENT)
|
||||
}
|
||||
|
||||
getRv().setBackgroundColor(arguments?.getInt(BG_COLOR, Color.WHITE).orElse(Color.WHITE))
|
||||
val bgColor = arguments?.getInt(BG_COLOR, Color.WHITE).orElse(Color.WHITE)
|
||||
if (bgColor != Color.WHITE) {
|
||||
getRv().setBackgroundColor(bgColor)
|
||||
}
|
||||
}
|
||||
|
||||
private fun getRv(): RecyclerView {
|
||||
@@ -249,6 +255,61 @@ class WidgetsSupportedBottomSheet() : BaseBottomSheet(), WidgetCallback {
|
||||
}
|
||||
}
|
||||
}
|
||||
is NaviWidgetClick -> {
|
||||
widgetNaviAnalyticsEventTracker.onWidgetClickEvent(naviClickAction.actionData)
|
||||
var amountAdjustmentDialogDismissListener: DialogInterface.OnDismissListener? = null
|
||||
if (
|
||||
naviClickAction.actionData
|
||||
?.parameters
|
||||
?.firstOrNull { it.key == BOTTOM_SHEET_TAG }
|
||||
?.value
|
||||
.equals(AMOUNT_ADJUSTMENT_BOTTOM_SHEET)
|
||||
) {
|
||||
val capturedActivity = activity
|
||||
amountAdjustmentDialogDismissListener =
|
||||
DialogInterface.OnDismissListener {
|
||||
val widgetList = naviClickAction.widgetBottomSheetData?.data
|
||||
val primaryAction =
|
||||
widgetList
|
||||
?.filterIsInstance<ContainerWidget>()
|
||||
?.firstOrNull {
|
||||
it.widgetNameForBaseAdapter == ContainerWidget.WIDGET_NAME
|
||||
}
|
||||
?.widgetData
|
||||
?.items
|
||||
?.filterIsInstance<ActionButtonWidget>()
|
||||
?.firstOrNull {
|
||||
it.widgetNameForBaseAdapter ==
|
||||
ActionButtonWidget.WIDGET_NAME
|
||||
}
|
||||
?.widgetData
|
||||
?.actionData
|
||||
val primaryClickAction =
|
||||
NaviWidgetClickWithActionData(actionData = primaryAction)
|
||||
if (capturedActivity is WidgetCallback) {
|
||||
capturedActivity.onClick(primaryClickAction, widgetId)
|
||||
} else {
|
||||
primaryAction?.let {
|
||||
DeepLinkManager.getDeepLinkListener()
|
||||
?.navigateTo(
|
||||
activity = activity,
|
||||
ctaData = it.toCtaData(),
|
||||
finish = naviClickAction.isFinish,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
val clickAction =
|
||||
naviClickAction.copy(
|
||||
dialogDismissListener = amountAdjustmentDialogDismissListener
|
||||
)
|
||||
safelyDismissDialog()
|
||||
val hostActivity = activity
|
||||
if (hostActivity is WidgetCallback) {
|
||||
hostActivity.onClick(clickAction, widgetId)
|
||||
}
|
||||
}
|
||||
else -> {
|
||||
val hostFragment = parentFragment
|
||||
if (hostFragment.isNotNull()) {
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
android:id="@+id/headerContainer"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/white"
|
||||
android:background="@android:color/transparent"
|
||||
android:clipToPadding="false"
|
||||
android:paddingStart="@dimen/dp_16"
|
||||
android:paddingEnd="@dimen/dp_16"
|
||||
@@ -40,14 +40,14 @@
|
||||
<FrameLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/white">
|
||||
android:background="@android:color/transparent">
|
||||
|
||||
<!-- Original RecyclerView -->
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/rvItems"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/white"
|
||||
android:background="@android:color/transparent"
|
||||
android:clipToPadding="false"
|
||||
android:nestedScrollingEnabled="false"
|
||||
android:paddingStart="@dimen/dp_16"
|
||||
@@ -59,7 +59,7 @@
|
||||
android:id="@+id/rvWithScrollBar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/white"
|
||||
android:background="@android:color/transparent"
|
||||
android:clipToPadding="false"
|
||||
android:paddingStart="@dimen/dp_16"
|
||||
android:paddingEnd="@dimen/dp_16"
|
||||
@@ -77,7 +77,7 @@
|
||||
android:id="@+id/footerContainer"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@color/white"
|
||||
android:background="@android:color/transparent"
|
||||
android:clipToPadding="false"
|
||||
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
|
||||
@@ -193,6 +193,7 @@ import com.navi.naviwidgets.models.SipCardWidget
|
||||
import com.navi.naviwidgets.models.TextCardWithShimmerWidget
|
||||
import com.navi.naviwidgets.models.WidgetChangedData
|
||||
import com.navi.naviwidgets.models.response.HomeProductWidget
|
||||
import com.navi.naviwidgets.utils.BOTTOM_SHEET_TAG
|
||||
import com.navi.naviwidgets.utils.BUTTON_LOADER
|
||||
import com.navi.naviwidgets.utils.DIGITAL_GOLD_USER_ENTERED_AMOUNT
|
||||
import com.navi.naviwidgets.utils.PAYMENT_PAGE
|
||||
@@ -1100,6 +1101,14 @@ class DigitalGoldHomeActivity :
|
||||
dialogDismissListener: DialogInterface.OnDismissListener? = null,
|
||||
widgetBottomSheetTag: String = WidgetsSupportedBottomSheet.TAG,
|
||||
) {
|
||||
// TODO: check this block in regression
|
||||
if (widgetBottomSheet.isNotNull()) {
|
||||
widgetBottomSheet?.safelyDismissDialog()
|
||||
}
|
||||
if (::commonBottomSheet.isInitialized && commonBottomSheet.isNotNull()) {
|
||||
commonBottomSheet.safelyDismissDialog()
|
||||
}
|
||||
|
||||
bottomSheetSharedVM.setBottomSheetData(NaviWidgetClick(listOfWidget = widgetList))
|
||||
widgetBottomSheet =
|
||||
WidgetsSupportedBottomSheet.getInstance(
|
||||
@@ -1739,6 +1748,12 @@ class DigitalGoldHomeActivity :
|
||||
naviClickAction.widgetBottomSheetData
|
||||
?.allowTransparentRootBg
|
||||
.orFalse(),
|
||||
widgetBottomSheetTag =
|
||||
naviClickAction.actionData
|
||||
?.parameters
|
||||
?.find { it.key == BOTTOM_SHEET_TAG }
|
||||
?.value ?: WidgetsSupportedBottomSheet.TAG,
|
||||
dialogDismissListener = naviClickAction.dialogDismissListener,
|
||||
)
|
||||
}
|
||||
return
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
|
||||
package com.navi.naviwidgets.actions
|
||||
|
||||
import android.content.DialogInterface
|
||||
import android.view.View
|
||||
import com.navi.base.model.ActionData
|
||||
import com.navi.base.model.AnalyticsEvent
|
||||
@@ -96,6 +97,7 @@ data class NaviWidgetClick(
|
||||
val contactBottomSheetData: ContactBottomSheetData? = null,
|
||||
val widgetId: String? = null,
|
||||
val isAutoClick: Boolean? = null,
|
||||
val dialogDismissListener: DialogInterface.OnDismissListener? = null,
|
||||
) : NaviClickAction()
|
||||
|
||||
data class GoldMinOfferSectionClickAction(
|
||||
|
||||
@@ -7,8 +7,11 @@
|
||||
|
||||
package com.navi.naviwidgets.interfaces
|
||||
|
||||
import com.navi.base.model.ActionData
|
||||
import com.navi.naviwidgets.models.ImageWidgetData
|
||||
import com.navi.naviwidgets.models.NaviTextComponent
|
||||
import com.navi.naviwidgets.models.Radius
|
||||
import com.navi.naviwidgets.models.WidgetBottomSheetData
|
||||
import com.navi.naviwidgets.models.WidgetLayoutParams
|
||||
import com.navi.naviwidgets.models.response.Gradient
|
||||
import com.navi.naviwidgets.models.response.TagData
|
||||
@@ -28,6 +31,8 @@ interface KeyValueWidgetInfo {
|
||||
|
||||
fun middleIcon(): String?
|
||||
|
||||
fun middleIconCta(): ActionData?
|
||||
|
||||
fun leftTextLineSpacing(): Int?
|
||||
|
||||
fun widgetLayoutParams(): WidgetLayoutParams?
|
||||
@@ -81,4 +86,8 @@ interface KeyValueWidgetInfo {
|
||||
fun radius(): Radius?
|
||||
|
||||
fun isShimmerRequired(): Boolean?
|
||||
|
||||
fun widgetBottomSheetData(): WidgetBottomSheetData?
|
||||
|
||||
fun middleIconWidgetData(): ImageWidgetData?
|
||||
}
|
||||
|
||||
@@ -34,7 +34,7 @@ data class ImageWidgetData(
|
||||
@SerializedName("iconCode") val iconCode: String? = null,
|
||||
@SerializedName("scaleType") val scaleType: String? = null,
|
||||
@SerializedName("margin") var margin: Margin? = null,
|
||||
@SerializedName("actionData") val actionData: ActionData? = null,
|
||||
@SerializedName("actionData", alternate = ["cta"]) val actionData: ActionData? = null,
|
||||
@SerializedName("needPlaceHolder") val placeHolderNeed: Boolean? = null,
|
||||
@SerializedName("enableDebounceClick") val enableDebounceClick: Boolean? = null,
|
||||
@SerializedName("metaData") val metaData: GenericAnalytics? = null,
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
package com.navi.naviwidgets.models
|
||||
|
||||
import com.google.gson.annotations.SerializedName
|
||||
import com.navi.base.model.ActionData
|
||||
import com.navi.naviwidgets.interfaces.KeyValueWidgetInfo
|
||||
import com.navi.naviwidgets.models.response.Gradient
|
||||
import com.navi.naviwidgets.models.response.TagData
|
||||
@@ -43,6 +44,8 @@ data class KeyValueWidget(
|
||||
|
||||
override fun middleIcon(): String? = widgetData?.middleIcon
|
||||
|
||||
override fun middleIconCta(): ActionData? = widgetData?.middleIconCta
|
||||
|
||||
override fun leftTextLineSpacing(): Int? = widgetData?.leftTextLineSpacing
|
||||
|
||||
override fun widgetLayoutParams(): WidgetLayoutParams? = widgetLayoutParams
|
||||
@@ -96,6 +99,10 @@ data class KeyValueWidget(
|
||||
override fun radius(): Radius? = widgetData?.radius
|
||||
|
||||
override fun isShimmerRequired(): Boolean? = widgetData?.isShimmerRequired
|
||||
|
||||
override fun widgetBottomSheetData(): WidgetBottomSheetData? = widgetData?.widgetBottomSheetData
|
||||
|
||||
override fun middleIconWidgetData(): ImageWidgetData? = widgetData?.middleIconWidgetData
|
||||
}
|
||||
|
||||
data class KeyValueWidgetData(
|
||||
@@ -116,6 +123,10 @@ data class KeyValueWidgetData(
|
||||
@SerializedName("rightTextPadding") val rightTextPadding: Padding? = null,
|
||||
@SerializedName("leftIcon") val leftIcon: String? = null,
|
||||
@SerializedName("middleIcon") val middleIcon: String? = null,
|
||||
@SerializedName("middleIconCta") val middleIconCta: ActionData? = null,
|
||||
@SerializedName("middleIconWidgetData") val middleIconWidgetData: ImageWidgetData? = null,
|
||||
@SerializedName("widgetBottomSheetData")
|
||||
val widgetBottomSheetData: WidgetBottomSheetData? = null,
|
||||
@SerializedName("leftTextLineSpacing") val leftTextLineSpacing: Int? = null,
|
||||
@SerializedName("enableParentClick") val enableParentClick: Boolean? = null,
|
||||
@SerializedName("middleIconMargin") val middleIconMargin: Margin? = null,
|
||||
|
||||
@@ -240,3 +240,6 @@ const val FOOTER_DEFAULT_SECONDARY_LOTTIE_URL =
|
||||
const val WIDGET_DETACHED = "dev_widget_detached"
|
||||
const val PAYLOAD = "payload"
|
||||
const val IS_WIDGET_DETACHED = "isWidgetDetached"
|
||||
const val SHOW_WIDGET_BOTTOM_SHEET = "showWidgetBottomSheet"
|
||||
const val AMOUNT_ADJUSTMENT_BOTTOM_SHEET = "AMOUNT_ADJUSTMENT_BOTTOM_SHEET"
|
||||
const val BOTTOM_SHEET_TAG = "bottomSheetTag"
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
package com.navi.naviwidgets.widgets
|
||||
|
||||
import android.content.Context
|
||||
import android.text.method.LinkMovementMethod
|
||||
import android.util.AttributeSet
|
||||
import android.view.Gravity
|
||||
import android.view.ViewGroup
|
||||
@@ -17,6 +18,8 @@ import androidx.core.view.marginEnd
|
||||
import androidx.core.view.marginStart
|
||||
import androidx.core.view.updateLayoutParams
|
||||
import com.facebook.shimmer.Shimmer
|
||||
import com.navi.base.model.ActionData
|
||||
import com.navi.base.model.NaviWidgetClickWithActionData
|
||||
import com.navi.base.utils.isNotNull
|
||||
import com.navi.design.R as DesignR
|
||||
import com.navi.design.utils.CornerRadius
|
||||
@@ -27,12 +30,14 @@ import com.navi.design.utils.getNaviDrawable
|
||||
import com.navi.design.utils.getNaviDrawableFromBackend
|
||||
import com.navi.design.utils.parseColorSafe
|
||||
import com.navi.design.utils.spannedText
|
||||
import com.navi.naviwidgets.actions.NaviWidgetClick
|
||||
import com.navi.naviwidgets.callbacks.WidgetCallback
|
||||
import com.navi.naviwidgets.databinding.LayoutKeyValueBinding
|
||||
import com.navi.naviwidgets.extensions.setVisibilityState
|
||||
import com.navi.naviwidgets.extensions.showWhenDataIsAvailable
|
||||
import com.navi.naviwidgets.interfaces.KeyValueWidgetInfo
|
||||
import com.navi.naviwidgets.models.TextGravity
|
||||
import com.navi.naviwidgets.utils.SHOW_WIDGET_BOTTOM_SHEET
|
||||
import com.navi.naviwidgets.utils.setMargin
|
||||
import com.navi.naviwidgets.utils.setWidgetLayoutParams
|
||||
|
||||
@@ -93,8 +98,11 @@ constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
|
||||
)
|
||||
|
||||
tvLeft.isVisible = info.leftText()?.isNotNull() == true
|
||||
tvLeft.movementMethod = LinkMovementMethod.getInstance()
|
||||
leftIcon.showWhenDataIsAvailable(info.leftIcon())
|
||||
middleIcon.showWhenDataIsAvailable(info.middleIcon())
|
||||
middleIcon.showWhenDataIsAvailable(
|
||||
info.middleIcon() ?: info.middleIconWidgetData()?.iconCode
|
||||
)
|
||||
middleLottie.showWhenDataIsAvailable(info.middleLottieFileName())
|
||||
info.rightTagData()?.let {
|
||||
binding.rightTag.setMargin(it.margin)
|
||||
@@ -231,7 +239,16 @@ constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
|
||||
tvLeft.setLineSpacing(dpToPx(it), LINE_SPACING_FACTOR)
|
||||
}
|
||||
tvLeft.text =
|
||||
info.leftText()?.text?.spannedText(context = context, span = info.leftText()?.span)
|
||||
info
|
||||
.leftText()
|
||||
?.text
|
||||
?.spannedText(
|
||||
context = context,
|
||||
span = info.leftText()?.span,
|
||||
urlClickCallback = ::onSpanClick,
|
||||
)
|
||||
tvLeft.movementMethod = LinkMovementMethod.getInstance()
|
||||
|
||||
middleTv.isVisible = info.middleText()?.isNotNull() == true
|
||||
middleTv.text =
|
||||
info
|
||||
@@ -297,6 +314,13 @@ constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
|
||||
if (info.enableParentClick() == true) {
|
||||
binding.root.setOnClickListener { widgetCallback.parentClicked() }
|
||||
}
|
||||
|
||||
info.middleIconCta()?.let { actionData ->
|
||||
middleIcon.setOnClickListener { onSpanClick(actionData) }
|
||||
}
|
||||
info.middleIconWidgetData()?.actionData?.let { action ->
|
||||
middleIcon.setOnClickListener { onSpanClick(action) }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -329,6 +353,19 @@ constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
|
||||
binding.tvRight.visibility = VISIBLE
|
||||
}
|
||||
|
||||
private fun onSpanClick(actionData: ActionData?) {
|
||||
if (actionData?.url == SHOW_WIDGET_BOTTOM_SHEET) {
|
||||
widgetCallback.onClick(
|
||||
NaviWidgetClick(
|
||||
actionData = actionData,
|
||||
widgetBottomSheetData = info.widgetBottomSheetData(),
|
||||
)
|
||||
)
|
||||
} else {
|
||||
widgetCallback.onClick(NaviWidgetClickWithActionData(actionData = actionData))
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
private const val LINE_SPACING_FACTOR = 1.0f
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user