Feature/reuse autopay (#4813)

* Added TextStyling in Information Widget

* Icon text list widget

* Widget fix

* Resolved Comment
This commit is contained in:
shreyansu raj
2023-01-03 19:39:47 +05:30
committed by GitHub Enterprise
parent e8c2350fa5
commit c19650e169
9 changed files with 193 additions and 2 deletions

View File

@@ -0,0 +1,75 @@
package com.navi.insurance.common.custom_view
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.widget.LinearLayout
import androidx.databinding.DataBindingUtil
import androidx.databinding.ViewDataBinding
import androidx.fragment.app.Fragment
import com.navi.base.model.CtaData
import com.navi.base.model.ImageDetail
import com.navi.insurance.R
import com.navi.insurance.common.models.IconTextListWidgetData
import com.navi.insurance.common.models.ListCardItems
import com.navi.insurance.common.models.NaviWidgetData
import com.navi.insurance.common.widgets.FormBaseWidgetView
import com.navi.insurance.databinding.IconTextItemBinding
import com.navi.insurance.databinding.IconTextListWidgetLayoutBinding
import com.navi.naviwidgets.extensions.setTextFieldData
import com.navi.naviwidgets.models.WidgetLayoutParams
import com.navi.naviwidgets.utils.NaviWidgetIconUtils
import com.navi.naviwidgets.utils.setMaterialCardStyling
import com.navi.naviwidgets.utils.setWidgetLayoutParams
class IconTextListLayout @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) :
FormBaseWidgetView(context, attrs) {
private var viewBinding: IconTextListWidgetLayoutBinding? = null
private var widgetData: IconTextListWidgetData? = null
override fun updateLayout(
binding: ViewDataBinding?,
naviWidgetData: NaviWidgetData,
callback: ((cta: CtaData) -> Unit)?,
fragment: Fragment?,
updateDataCallback: ((data: Any?) -> Unit)?
) {
if (naviWidgetData is IconTextListWidgetData) {
if (binding is IconTextListWidgetLayoutBinding) {
viewBinding = binding
}
widgetData = naviWidgetData
viewBinding?.items?.setItemsData(naviWidgetData.items)
viewBinding?.rootCard?.setMaterialCardStyling(naviWidgetData.cardProperties)
}
}
fun setLayoutParams(widgetLayoutParams: WidgetLayoutParams) {
viewBinding?.root?.let { setWidgetLayoutParams(widgetLayoutParams, it) }
}
private fun LinearLayout.setItemsData(items: List<ListCardItems>?) {
removeAllViews()
items?.forEach { data ->
val inflator = LayoutInflater.from(context)
val view = inflator.inflate(R.layout.icon_text_item, this, false)
val binding: IconTextItemBinding? = DataBindingUtil.bind(view)
binding?.title?.setTextFieldData(data.title)
binding?.iconIv?.let { view ->
NaviWidgetIconUtils.updateIcon(
ImageDetail(iconCode = data.iconCode),
view
)
}
addView(binding?.root)
}
}
override fun onDetachedFromWindow() {
super.onDetachedFromWindow()
viewBinding = null
}
}

View File

@@ -139,6 +139,7 @@ class NaviWidgetDeserializer : JsonDeserializer<NaviWidget> {
NaviWidgetType.CARD_VIEW_WITH_TITLE_AND_SUBTITLE.value -> true
NaviWidgetType.TITLE_DESCRIPTION_ICON_WIDGET.value -> true
NaviWidgetType.APPLICATION_STATUS_WIDGET.value -> true
NaviWidgetType.ICON_TEXT_LIST_WIDGET.value -> true
else -> false
}
}
@@ -259,6 +260,7 @@ class NaviWidgetDeserializer : JsonDeserializer<NaviWidget> {
NaviWidgetType.CARD_VIEW_WITH_TITLE_AND_SUBTITLE ->
CardWithTitleAndSubTitleWidgetData::class.java
NaviWidgetType.APPLICATION_STATUS_WIDGET -> ApplicationStatusWidgetData::class.java
NaviWidgetType.ICON_TEXT_LIST_WIDGET -> IconTextListWidgetData::class.java
}
)
}

View File

@@ -65,7 +65,8 @@ class FormViewHolderRegistry {
CARD_VIEW_WITH_TITLE_AND_SUBTITLE,
TITLE_DESCRIPTION_ICON_WIDGET,
PAN_DETAILS_INPUT_WIDGET,
APPLICATION_STATUS_WIDGET
APPLICATION_STATUS_WIDGET,
ICON_TEXT_LIST_WIDGET
}
fun bindWidgets(
@@ -1101,6 +1102,29 @@ class FormViewHolderRegistry {
)
}
}
FormWidgetType.ICON_TEXT_LIST_WIDGET.name -> {
if (widget.widgetData is IconTextListWidgetData) {
viewGroup.addView(
IconTextListLayout(context).apply {
updateLayout(
binding =
DataBindingUtil.inflate<IconTextListWidgetLayoutBinding>(
LayoutInflater.from(context),
R.layout.icon_text_list_widget_layout,
this,
true
),
callback = callback,
fragment = fragment,
naviWidgetData = widget.widgetData,
updateDataCallback = updateDataCallback
)
widget.widgetLayoutParams?.let { setLayoutParams(it) }
},
index
)
}
}
}
}
}

View File

@@ -0,0 +1,21 @@
package com.navi.insurance.common.models
import com.google.gson.annotations.SerializedName
import com.navi.naviwidgets.models.response.CardProperties
import com.navi.naviwidgets.models.response.TextFieldData
data class IconTextListWidgetData(
@SerializedName("cardProperties")
val cardProperties: CardProperties? = null,
@SerializedName("items")
val items: List<ListCardItems>? = null
): NaviWidgetData() {
override var widgetNameForBaseAdapter: String? = NaviWidgetType.ICON_TEXT_LIST_WIDGET.value
}
data class ListCardItems(
@SerializedName("iconCode")
val iconCode: String? = null,
@SerializedName("title")
val title: TextFieldData? = null
)

View File

@@ -92,5 +92,6 @@ enum class NaviWidgetType(val value: String) {
SURVEY_BOTTOMSHEET_WIDGET("SURVEY_BOTTOMSHEET_WIDGET"),
CARD_VIEW_WITH_TITLE_AND_SUBTITLE("CARD_VIEW_WITH_TITLE_AND_SUBTITLE"),
TITLE_DESCRIPTION_ICON_WIDGET("TITLE_DESCRIPTION_ICON_WIDGET"),
APPLICATION_STATUS_WIDGET("APPLICATION_STATUS_WIDGET")
APPLICATION_STATUS_WIDGET("APPLICATION_STATUS_WIDGET"),
ICON_TEXT_LIST_WIDGET("ICON_TEXT_LIST_WIDGET")
}

View File

@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_16">
<ImageView
android:id="@+id/icon_iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="@id/title"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/title" />
<com.navi.design.textview.NaviTextView
android:id="@+id/title"
android:layout_width="@dimen/dp_0"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_16"
android:lineSpacingExtra="@dimen/sp_2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/icon_iv"
app:layout_constraintTop_toTopOf="parent"
tools:text="You will have to pay manually after making changes to your policy." />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View File

@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.card.MaterialCardView
android:id="@+id/root_card"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/Theme.MaterialComponents.Light"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:cardCornerRadius="@dimen/dp_16"
app:cardUseCompatPadding="true"
tools:background="@color/backgroundPrimaryColor">
<LinearLayout
android:id="@+id/items"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingHorizontal="@dimen/dp_16"
android:paddingTop="@dimen/dp_4"
android:paddingBottom="@dimen/dp_16" />
</com.google.android.material.card.MaterialCardView>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View File

@@ -66,4 +66,5 @@ data class InformationTextData(
@SerializedName("text") val text: String? = null,
@SerializedName("textColor") val textColor: String? = null,
@SerializedName("textSize") val textSize: Int? = null,
@SerializedName("styleText") val styleText: TextFieldData? = null
) : Serializable

View File

@@ -18,6 +18,7 @@ import com.navi.design.utils.parseColorSafe
import com.navi.naviwidgets.actions.InformationWidgetCloseClickAction
import com.navi.naviwidgets.callbacks.WidgetCallback
import com.navi.naviwidgets.databinding.LayoutInformationBinding
import com.navi.naviwidgets.extensions.setTextFieldData
import com.navi.naviwidgets.extensions.showWhenDataIsAvailable
import com.navi.naviwidgets.interfaces.InformationWidgetInfo
import com.navi.naviwidgets.utils.NaviWidgetIconUtils.updateIcon
@@ -66,6 +67,7 @@ class InformationWidgetLayout @JvmOverloads constructor(
showWhenDataIsAvailable(showText = info.description()?.text)
setTextColor(info.description()?.textColor.parseColorSafe())
textSize = (info.description()?.textSize ?: 12).toFloat()
setTextFieldData(info.description()?.styleText)
}
ivCancel.isVisible = info.isCancelable() == true
ivCancel.setOnClickListener {