Feature/reuse autopay (#4813)
* Added TextStyling in Information Widget * Icon text list widget * Widget fix * Resolved Comment
This commit is contained in:
committed by
GitHub Enterprise
parent
e8c2350fa5
commit
c19650e169
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
@@ -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
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
)
|
||||
@@ -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")
|
||||
}
|
||||
|
||||
32
navi-insurance/src/main/res/layout/icon_text_item.xml
Normal file
32
navi-insurance/src/main/res/layout/icon_text_item.xml
Normal 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>
|
||||
@@ -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>
|
||||
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user