TP-52213 | Varun Jain | Transaction Status Widget (#9158)
This commit is contained in:
@@ -73,6 +73,9 @@ fun transformFirestoreToWidgetModel(data: Map<String, Any>): NaviChatWidget =
|
||||
NaviChatFileAttachmentWidget.WIDGET_NAME -> {
|
||||
convertMapToJson<NaviChatFileAttachmentWidget>(data) as NaviChatFileAttachmentWidget
|
||||
}
|
||||
NaviChatTransactionStatusWidget.WIDGET_NAME -> {
|
||||
convertMapToJson<NaviChatTransactionStatusWidget>(data) as NaviChatTransactionStatusWidget
|
||||
}
|
||||
else -> {
|
||||
NaviChatMessageWidget()
|
||||
}
|
||||
|
||||
@@ -27,6 +27,7 @@ import com.navi.naviwidgets.models.response.NaviChatMessageWithItemListWidget
|
||||
import com.navi.naviwidgets.models.response.NaviChatResolutionStatusResponseWidget
|
||||
import com.navi.naviwidgets.models.response.NaviChatResolutionStatusWidget
|
||||
import com.navi.naviwidgets.models.response.NaviChatTimerExpiredWidget
|
||||
import com.navi.naviwidgets.models.response.NaviChatTransactionStatusWidget
|
||||
import com.navi.naviwidgets.models.response.NaviCsatOptionWidget
|
||||
import com.navi.naviwidgets.utils.NAVI_CHAT_RT_CREATED_AT
|
||||
import com.navi.naviwidgets.utils.NAVI_CHAT_WIDGET_NAME
|
||||
@@ -171,6 +172,15 @@ object ChatJsonDeserializer : JsonDeserializer<NaviChatWidget> {
|
||||
naviChatWidget.rt_created_at = timestamp
|
||||
naviChatWidget
|
||||
}
|
||||
NaviChatTransactionStatusWidget.WIDGET_NAME -> {
|
||||
val naviChatWidget =
|
||||
Gson().fromJson(
|
||||
jsonObject,
|
||||
NaviChatTransactionStatusWidget::class.java
|
||||
)
|
||||
naviChatWidget.rt_created_at = timestamp
|
||||
naviChatWidget
|
||||
}
|
||||
else -> {
|
||||
val naviChatWidget =
|
||||
Gson().fromJson(jsonObject, NaviChatMessageWidget::class.java)
|
||||
|
||||
@@ -278,4 +278,5 @@
|
||||
<color name="dark_grey">#B5ACB9</color>
|
||||
<color name="ctaPurplePrimaryColor">#1F002A</color>
|
||||
<color name="scrollbar_color">#D9D9D9</color>
|
||||
<color name="light_grey_border_color">#1A3C0050</color>
|
||||
</resources>
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
package com.navi.naviwidgets.interfaces
|
||||
|
||||
interface NaviChatTransactionStatusMessageItemWidgetInfo {
|
||||
fun messageId(): String?
|
||||
fun label(): String?
|
||||
fun value(): String?
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.navi.naviwidgets.interfaces
|
||||
|
||||
import com.google.firebase.Timestamp
|
||||
import com.navi.naviwidgets.models.response.NaviChatTransactionItemWidget
|
||||
|
||||
interface NaviChatTransactionStatusWidgetInfo {
|
||||
fun messageId(): String?
|
||||
fun title(): String?
|
||||
fun messageItems(): List<NaviChatTransactionItemWidget>?
|
||||
fun senderName(): String?
|
||||
fun timeStamp(): Timestamp?
|
||||
fun footer(): String?
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
package com.navi.naviwidgets.models.response
|
||||
|
||||
import com.google.firebase.Timestamp
|
||||
import com.google.firebase.firestore.PropertyName
|
||||
import com.google.gson.annotations.SerializedName
|
||||
import com.navi.naviwidgets.interfaces.NaviChatTransactionStatusMessageItemWidgetInfo
|
||||
import com.navi.naviwidgets.models.NaviChatWidget
|
||||
import com.navi.naviwidgets.utils.LABEL
|
||||
import com.navi.naviwidgets.utils.NAVI_CHAT_ICON_CODE
|
||||
import com.navi.naviwidgets.utils.NAVI_CHAT_MESSAGE_ID
|
||||
import com.navi.naviwidgets.utils.NAVI_CHAT_META_DATA
|
||||
import com.navi.naviwidgets.utils.NAVI_CHAT_RT_CREATED_AT
|
||||
import com.navi.naviwidgets.utils.NAVI_CHAT_SENDER_ID
|
||||
import com.navi.naviwidgets.utils.NAVI_CHAT_SENDER_TYPE
|
||||
import com.navi.naviwidgets.utils.NAVI_CHAT_SHOULD_DISPLAY_IN_CHAT_HISTORY
|
||||
import com.navi.naviwidgets.utils.NAVI_CHAT_WIDGET_NAME
|
||||
import com.navi.naviwidgets.utils.VALUE
|
||||
import java.io.Serializable
|
||||
|
||||
data class NaviChatTransactionItemWidget(
|
||||
@get:PropertyName(NAVI_CHAT_MESSAGE_ID)
|
||||
@SerializedName(NAVI_CHAT_MESSAGE_ID)
|
||||
override val messageId: String? = null,
|
||||
@set:PropertyName(NAVI_CHAT_WIDGET_NAME)
|
||||
@get:PropertyName(NAVI_CHAT_WIDGET_NAME)
|
||||
@SerializedName(NAVI_CHAT_WIDGET_NAME)
|
||||
override var widgetNameForBaseAdapter: String? = WIDGET_NAME,
|
||||
@get:PropertyName(NAVI_CHAT_ICON_CODE)
|
||||
@SerializedName(NAVI_CHAT_ICON_CODE)
|
||||
val iconCode: String? = null,
|
||||
@get:PropertyName(LABEL)
|
||||
@SerializedName(LABEL)
|
||||
val label: String? = null,
|
||||
@get:PropertyName(VALUE)
|
||||
@SerializedName(VALUE)
|
||||
val value: String? = null,
|
||||
@get:PropertyName(NAVI_CHAT_META_DATA)
|
||||
@SerializedName(NAVI_CHAT_META_DATA)
|
||||
val metaData: NaviChatMetaData? = null,
|
||||
@get:PropertyName(NAVI_CHAT_SHOULD_DISPLAY_IN_CHAT_HISTORY)
|
||||
@SerializedName(NAVI_CHAT_SHOULD_DISPLAY_IN_CHAT_HISTORY)
|
||||
override val shouldDisplayInChatHistory: Boolean = true,
|
||||
@SerializedName(NAVI_CHAT_RT_CREATED_AT)
|
||||
override var rt_created_at: Timestamp? = null,
|
||||
@get:PropertyName(NAVI_CHAT_SENDER_ID)
|
||||
@SerializedName(NAVI_CHAT_SENDER_ID)
|
||||
override val senderId: String? = null,
|
||||
@get:PropertyName(NAVI_CHAT_SENDER_TYPE)
|
||||
@SerializedName(NAVI_CHAT_SENDER_TYPE)
|
||||
override val senderType: String? = null, var isSelectionDone: Boolean = false
|
||||
) : NaviChatWidget, NaviChatTransactionStatusMessageItemWidgetInfo, Serializable {
|
||||
|
||||
companion object {
|
||||
const val WIDGET_NAME = "CHAT_TRANSACTION_ITEM"
|
||||
}
|
||||
|
||||
override fun messageId(): String? = messageId
|
||||
|
||||
override fun label(): String? = label
|
||||
|
||||
override fun value(): String? = value
|
||||
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
package com.navi.naviwidgets.models.response
|
||||
|
||||
import com.google.firebase.Timestamp
|
||||
import com.google.firebase.firestore.PropertyName
|
||||
import com.google.firebase.firestore.ServerTimestamp
|
||||
import com.google.gson.annotations.SerializedName
|
||||
import com.navi.naviwidgets.interfaces.NaviChatTransactionStatusWidgetInfo
|
||||
import com.navi.naviwidgets.models.NaviChatWidget
|
||||
import com.navi.naviwidgets.utils.FOOTER
|
||||
import com.navi.naviwidgets.utils.NAVI_CHAT_ITEMS
|
||||
import com.navi.naviwidgets.utils.NAVI_CHAT_MESSAGE_DATA
|
||||
import com.navi.naviwidgets.utils.NAVI_CHAT_MESSAGE_ID
|
||||
import com.navi.naviwidgets.utils.NAVI_CHAT_RT_CREATED_AT
|
||||
import com.navi.naviwidgets.utils.NAVI_CHAT_SENDER_ID
|
||||
import com.navi.naviwidgets.utils.NAVI_CHAT_SENDER_NAME
|
||||
import com.navi.naviwidgets.utils.NAVI_CHAT_SENDER_TYPE
|
||||
import com.navi.naviwidgets.utils.NAVI_CHAT_SHOULD_DISPLAY_IN_CHAT_HISTORY
|
||||
import com.navi.naviwidgets.utils.NAVI_CHAT_TITLE
|
||||
import com.navi.naviwidgets.utils.NAVI_CHAT_WIDGET_DATA
|
||||
import com.navi.naviwidgets.utils.NAVI_CHAT_WIDGET_NAME
|
||||
import com.navi.naviwidgets.utils.TEXT
|
||||
import java.io.Serializable
|
||||
|
||||
data class NaviChatTransactionStatusWidget(
|
||||
@SerializedName(NAVI_CHAT_MESSAGE_ID)
|
||||
override val messageId: String? = null,
|
||||
@set:PropertyName(NAVI_CHAT_WIDGET_NAME)
|
||||
@get:PropertyName(NAVI_CHAT_WIDGET_NAME)
|
||||
@SerializedName(NAVI_CHAT_WIDGET_NAME)
|
||||
override var widgetNameForBaseAdapter: String? = WIDGET_NAME,
|
||||
@get:PropertyName(NAVI_CHAT_WIDGET_DATA)
|
||||
@SerializedName(NAVI_CHAT_WIDGET_DATA)
|
||||
val widgetData: NaviChatTransactionStatusListData? = null,
|
||||
@get:PropertyName(NAVI_CHAT_SHOULD_DISPLAY_IN_CHAT_HISTORY)
|
||||
@SerializedName(NAVI_CHAT_SHOULD_DISPLAY_IN_CHAT_HISTORY)
|
||||
override val shouldDisplayInChatHistory: Boolean = true,
|
||||
@ServerTimestamp
|
||||
@SerializedName(NAVI_CHAT_RT_CREATED_AT)
|
||||
override var rt_created_at: Timestamp? = null,
|
||||
@get:PropertyName(NAVI_CHAT_SENDER_ID)
|
||||
@SerializedName(NAVI_CHAT_SENDER_ID)
|
||||
override val senderId: String? = null,
|
||||
@get:PropertyName(NAVI_CHAT_SENDER_TYPE)
|
||||
@SerializedName(NAVI_CHAT_SENDER_TYPE)
|
||||
override val senderType: String? = null
|
||||
) : NaviChatWidget, NaviChatTransactionStatusWidgetInfo, Serializable {
|
||||
|
||||
companion object {
|
||||
const val WIDGET_NAME = "TRANSACTION_STATUS_WIDGET"
|
||||
}
|
||||
|
||||
override fun messageId(): String? = messageId
|
||||
|
||||
override fun title(): String? = widgetData?.messageData?.title?.text
|
||||
|
||||
override fun messageItems(): List<NaviChatTransactionItemWidget>? =
|
||||
widgetData?.messageData?.messageItems
|
||||
|
||||
override fun senderName(): String? = widgetData?.senderName
|
||||
|
||||
override fun timeStamp(): Timestamp? = rt_created_at
|
||||
|
||||
override fun footer(): String? = widgetData?.messageData?.footer?.text
|
||||
|
||||
}
|
||||
|
||||
data class NaviChatTransactionStatusListData(
|
||||
@get:PropertyName(NAVI_CHAT_MESSAGE_DATA)
|
||||
@SerializedName(NAVI_CHAT_MESSAGE_DATA)
|
||||
val messageData: NaviChatTransactionMessageData? = null,
|
||||
@get:PropertyName(NAVI_CHAT_SENDER_NAME)
|
||||
@SerializedName(NAVI_CHAT_SENDER_NAME)
|
||||
val senderName: String? = null,
|
||||
) : Serializable
|
||||
|
||||
data class NaviChatTransactionMessageData(
|
||||
@get:PropertyName(NAVI_CHAT_TITLE)
|
||||
@SerializedName(NAVI_CHAT_TITLE)
|
||||
val title: NaviChatTransactionStatusTitleWidget? = null,
|
||||
@get:PropertyName(FOOTER)
|
||||
@SerializedName(FOOTER)
|
||||
val footer: NaviChatTransactionStatusTitleWidget? = null,
|
||||
@get:PropertyName(NAVI_CHAT_ITEMS)
|
||||
@SerializedName(NAVI_CHAT_ITEMS)
|
||||
val messageItems: List<NaviChatTransactionItemWidget>? = null,
|
||||
) : Serializable
|
||||
|
||||
data class NaviChatTransactionStatusTitleWidget(
|
||||
@get:PropertyName(TEXT)
|
||||
@SerializedName(TEXT)
|
||||
val text: String? = null,
|
||||
) : Serializable
|
||||
@@ -184,4 +184,8 @@ const val DATE_SELECTOR_CONTAINER = "DATE_SELECTOR_CONTAINER"
|
||||
const val UPDATE_CALENDAR_DATE = "UPDATE_CALENDAR_DATE"
|
||||
const val DARK_PURPLE = "#1F002A"
|
||||
const val COLOR_TRANSPARENT = "#00FFFFFF"
|
||||
const val AP_LAUNCH = "applicationPlatform/launch"
|
||||
const val AP_LAUNCH = "applicationPlatform/launch"
|
||||
const val LABEL = "label"
|
||||
const val VALUE = "value"
|
||||
const val TEXT = "text"
|
||||
const val FOOTER = "footer"
|
||||
@@ -0,0 +1,31 @@
|
||||
package com.navi.naviwidgets.viewholder
|
||||
|
||||
import androidx.databinding.ViewDataBinding
|
||||
import com.navi.naviwidgets.callbacks.WidgetCallback
|
||||
import com.navi.naviwidgets.databinding.LayoutNaviChatTransactionStatusMessageItemBinding
|
||||
import com.navi.naviwidgets.models.response.NaviChatTransactionItemWidget
|
||||
import com.navi.naviwidgets.widgets.NaviChatTransactionStatusMessageItemLayout
|
||||
|
||||
class NaviChatTransactionStatusMessageItemVH(private val viewDataBinding: ViewDataBinding) :
|
||||
BaseViewHolder<NaviChatTransactionItemWidget>(view = viewDataBinding.root) {
|
||||
|
||||
override fun bind(
|
||||
model: NaviChatTransactionItemWidget,
|
||||
widgetCallback: WidgetCallback,
|
||||
position: Int,
|
||||
totalItems: Int
|
||||
) {
|
||||
if (itemView is NaviChatTransactionStatusMessageItemLayout) {
|
||||
(itemView as NaviChatTransactionStatusMessageItemLayout).update(
|
||||
info = model,
|
||||
binding = (viewDataBinding as LayoutNaviChatTransactionStatusMessageItemBinding)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
override fun bindError(errorData: Any?) {/*No-op*/
|
||||
}
|
||||
|
||||
override fun bindWidgetStateChanged(payload: Any?) {/*No-op*/
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package com.navi.naviwidgets.viewholder
|
||||
|
||||
import androidx.databinding.ViewDataBinding
|
||||
import com.navi.naviwidgets.callbacks.WidgetCallback
|
||||
import com.navi.naviwidgets.databinding.LayoutNaviChatTransactionStatusBinding
|
||||
import com.navi.naviwidgets.models.response.NaviChatTransactionStatusWidget
|
||||
import com.navi.naviwidgets.widgets.NaviChatTransactionStatusWidgetLayout
|
||||
|
||||
class NaviChatTransactionStatusVH(private val viewDataBinding: ViewDataBinding) :
|
||||
BaseViewHolder<NaviChatTransactionStatusWidget>(view = viewDataBinding.root) {
|
||||
|
||||
override fun bind(
|
||||
model: NaviChatTransactionStatusWidget,
|
||||
widgetCallback: WidgetCallback,
|
||||
position: Int,
|
||||
totalItems: Int
|
||||
) {
|
||||
if (itemView is NaviChatTransactionStatusWidgetLayout) {
|
||||
(itemView as NaviChatTransactionStatusWidgetLayout).update(
|
||||
info = model,
|
||||
binding = (viewDataBinding as LayoutNaviChatTransactionStatusBinding),
|
||||
widgetCallback = widgetCallback,
|
||||
widgetPosition = position
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
override fun bindError(errorData: Any?) {/*No-op*/
|
||||
}
|
||||
|
||||
override fun bindWidgetStateChanged(payload: Any?) {/*No-op*/
|
||||
}
|
||||
}
|
||||
@@ -14,6 +14,7 @@ import com.navi.analytics.utils.WIDGET_NOT_HANDLED_BY_APP
|
||||
import com.navi.naviwidgets.R
|
||||
import com.navi.naviwidgets.models.GenericWidgetDataInfo
|
||||
import com.navi.naviwidgets.models.NaviBaseAdapterModel
|
||||
import com.navi.naviwidgets.models.response.NaviChatTransactionItemWidget
|
||||
import com.navi.naviwidgets.models.response.*
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
@@ -42,6 +43,8 @@ class NaviChatViewHolderFactoryImpl<T : NaviBaseAdapterModel>(
|
||||
R.layout.layout_navi_chat_message_with_deeplink
|
||||
private val NAVI_CHAT_TYPING_STATUS_WIDGET = R.layout.layout_navi_chat_typing_status
|
||||
private val NAVI_CHAT_ACTIVITY_REDIRECTION_WIDGET = R.layout.layout_navi_chat_message_with_activity_redirection
|
||||
private val NAVI_CHAT_TRANSACTION_STATUS_WIDGET = R.layout.layout_navi_chat_transaction_status
|
||||
private val NAVI_CHAT_TRANSACTION_STATUS_ITEM_WIDGET = R.layout.layout_navi_chat_transaction_status_message_item
|
||||
}
|
||||
|
||||
override fun type(item: NaviBaseAdapterModel?): Int =
|
||||
@@ -68,6 +71,8 @@ class NaviChatViewHolderFactoryImpl<T : NaviBaseAdapterModel>(
|
||||
NAVI_CHAT_RECEIVED_MESSAGE_WITH_ATTACHMENT_WIDGET
|
||||
}
|
||||
is NaviChatTypingStatusWidget -> NAVI_CHAT_TYPING_STATUS_WIDGET
|
||||
is NaviChatTransactionStatusWidget -> NAVI_CHAT_TRANSACTION_STATUS_WIDGET
|
||||
is NaviChatTransactionItemWidget -> NAVI_CHAT_TRANSACTION_STATUS_ITEM_WIDGET
|
||||
else -> {
|
||||
NaviTrackEvent.trackEvent(
|
||||
WIDGET_NOT_HANDLED_BY_APP,
|
||||
@@ -99,6 +104,8 @@ class NaviChatViewHolderFactoryImpl<T : NaviBaseAdapterModel>(
|
||||
NaviChatReceivedMessageWithAttachmentVH(viewDataBinding = parent)
|
||||
NAVI_CHAT_TYPING_STATUS_WIDGET -> NaviChatTypingStatusVH(viewDataBinding = parent)
|
||||
NAVI_CHAT_ACTIVITY_REDIRECTION_WIDGET -> NaviChatActivityRedirectionWidgetVH(viewDataBinding = parent)
|
||||
NAVI_CHAT_TRANSACTION_STATUS_WIDGET -> NaviChatTransactionStatusVH(viewDataBinding = parent)
|
||||
NAVI_CHAT_TRANSACTION_STATUS_ITEM_WIDGET -> NaviChatTransactionStatusMessageItemVH(viewDataBinding = parent)
|
||||
UNKNOWN_WIDGET -> UnknownWidgetVH(view = parent)
|
||||
else -> UnknownWidgetVH(view = parent)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
package com.navi.naviwidgets.widgets
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import androidx.constraintlayout.widget.ConstraintLayout
|
||||
import com.navi.naviwidgets.databinding.LayoutNaviChatTransactionStatusMessageItemBinding
|
||||
import com.navi.naviwidgets.extensions.showWhenDataIsAvailable
|
||||
import com.navi.naviwidgets.interfaces.NaviChatTransactionStatusMessageItemWidgetInfo
|
||||
|
||||
class NaviChatTransactionStatusMessageItemLayout @JvmOverloads constructor(
|
||||
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
|
||||
) : ConstraintLayout(context, attrs, defStyleAttr) {
|
||||
|
||||
private lateinit var binding: LayoutNaviChatTransactionStatusMessageItemBinding
|
||||
private lateinit var info: NaviChatTransactionStatusMessageItemWidgetInfo
|
||||
|
||||
fun update(
|
||||
info: NaviChatTransactionStatusMessageItemWidgetInfo,
|
||||
binding: LayoutNaviChatTransactionStatusMessageItemBinding
|
||||
) {
|
||||
this.binding = binding
|
||||
this.info = info
|
||||
setProperties()
|
||||
}
|
||||
|
||||
private fun setProperties() {
|
||||
binding.apply {
|
||||
label.showWhenDataIsAvailable(showText = info.label())
|
||||
description.showWhenDataIsAvailable(showText = info.value())
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
package com.navi.naviwidgets.widgets
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import android.widget.LinearLayout
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.navi.design.R
|
||||
import com.navi.naviwidgets.adapters.NaviAdapter
|
||||
import com.navi.naviwidgets.callbacks.WidgetCallback
|
||||
import com.navi.naviwidgets.databinding.LayoutNaviChatTransactionStatusBinding
|
||||
import com.navi.naviwidgets.extensions.showWhenDataIsAvailable
|
||||
import com.navi.naviwidgets.interfaces.NaviChatTransactionStatusWidgetInfo
|
||||
import com.navi.naviwidgets.utils.EMPTY
|
||||
import com.navi.naviwidgets.utils.convertTo12HourFormatTime
|
||||
import com.navi.naviwidgets.utils.setNaviChatMessageMargin
|
||||
import com.navi.naviwidgets.viewholder.NaviChatViewHolderFactoryImpl
|
||||
|
||||
class NaviChatTransactionStatusWidgetLayout @JvmOverloads constructor(
|
||||
context: Context,
|
||||
attrs: AttributeSet? = null,
|
||||
defStyleAttr: Int = 0,
|
||||
) : LinearLayout(context, attrs, defStyleAttr) {
|
||||
|
||||
private lateinit var binding: LayoutNaviChatTransactionStatusBinding
|
||||
private lateinit var info: NaviChatTransactionStatusWidgetInfo
|
||||
private lateinit var widgetCallback: WidgetCallback
|
||||
private var widgetPosition: Int = Int.MAX_VALUE
|
||||
private val naviAdapter = NaviAdapter(
|
||||
widgetCallback = object : WidgetCallback {
|
||||
override fun getLifeCycle(): Lifecycle? {
|
||||
return if (::widgetCallback.isInitialized) {
|
||||
widgetCallback.getLifeCycle()
|
||||
} else {
|
||||
null
|
||||
}
|
||||
}
|
||||
}, factory = NaviChatViewHolderFactoryImpl(EMPTY, EMPTY), isRecyclable = true
|
||||
)
|
||||
|
||||
|
||||
fun update(
|
||||
info: NaviChatTransactionStatusWidgetInfo,
|
||||
binding: LayoutNaviChatTransactionStatusBinding,
|
||||
widgetCallback: WidgetCallback,
|
||||
widgetPosition: Int,
|
||||
) {
|
||||
this.info = info
|
||||
this.binding = binding
|
||||
this.widgetCallback = widgetCallback
|
||||
this.widgetPosition = widgetPosition
|
||||
setProperties()
|
||||
setUp()
|
||||
setMargin()
|
||||
}
|
||||
|
||||
private fun setProperties() {
|
||||
binding.apply {
|
||||
tvMessageTitle.showWhenDataIsAvailable(showText = info.title())
|
||||
tvTimestamp.showWhenDataIsAvailable(showText = info.timeStamp()?.let { timeStamp ->
|
||||
convertTo12HourFormatTime(timeStamp)
|
||||
})
|
||||
replyMessage.showWhenDataIsAvailable(showText = info.footer())
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private fun setUp() {
|
||||
binding.rvOptionList.apply {
|
||||
info.messageItems()?.let { naviChatTransactionInfoList ->
|
||||
layoutManager = LinearLayoutManager(
|
||||
context, LinearLayoutManager.VERTICAL, false
|
||||
)
|
||||
naviAdapter.list = naviChatTransactionInfoList
|
||||
adapter = naviAdapter
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun setMargin() {
|
||||
(binding.root.layoutParams as? RecyclerView.LayoutParams)?.setNaviChatMessageMargin(
|
||||
bottomMargin = binding.root.context.resources.getInteger(R.integer.integer_8),
|
||||
topMargin = binding.root.context.resources.getInteger(R.integer.integer_16)
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!--
|
||||
~ /*
|
||||
~ *
|
||||
~ * * Copyright © 2024 by Navi Technologies Private Limited
|
||||
~ * * All rights reserved. Strictly confidential
|
||||
~ *
|
||||
~ */
|
||||
-->
|
||||
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item>
|
||||
<shape android:shape="rectangle">
|
||||
<solid android:color="@color/light_grey_border_color" />
|
||||
|
||||
<corners
|
||||
android:topLeftRadius="@dimen/dp_16"
|
||||
android:topRightRadius="@dimen/dp_16" />
|
||||
</shape>
|
||||
</item>
|
||||
<item
|
||||
android:top="@dimen/dp_1"
|
||||
android:bottom="@dimen/dp_1"
|
||||
android:left="@dimen/dp_1"
|
||||
android:right="@dimen/dp_1">
|
||||
<shape android:shape="rectangle">
|
||||
<solid android:color="@color/grey_alabaster" />
|
||||
<corners
|
||||
android:topLeftRadius="@dimen/dp_16"
|
||||
android:topRightRadius="@dimen/dp_16" />
|
||||
</shape>
|
||||
</item>
|
||||
</layer-list>
|
||||
@@ -0,0 +1,32 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!--
|
||||
~ /*
|
||||
~ *
|
||||
~ * * Copyright © 2024 by Navi Technologies Private Limited
|
||||
~ * * All rights reserved. Strictly confidential
|
||||
~ *
|
||||
~ */
|
||||
-->
|
||||
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item>
|
||||
<shape android:shape="rectangle">
|
||||
<solid android:color="@color/light_grey_border_color" />
|
||||
|
||||
<corners
|
||||
android:bottomLeftRadius="@dimen/dp_16"
|
||||
android:bottomRightRadius="@dimen/dp_16" />
|
||||
</shape>
|
||||
</item>
|
||||
<item
|
||||
android:top="@dimen/dp_1"
|
||||
android:bottom="@dimen/dp_1"
|
||||
android:left="@dimen/dp_1"
|
||||
android:right="@dimen/dp_1">
|
||||
<shape android:shape="rectangle">
|
||||
<solid android:color="@color/grey_alabaster" />
|
||||
<corners
|
||||
android:bottomLeftRadius="@dimen/dp_16"
|
||||
android:bottomRightRadius="@dimen/dp_16" />
|
||||
</shape>
|
||||
</item>
|
||||
</layer-list>
|
||||
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!--
|
||||
~ /*
|
||||
~ * Copyright © 2019 by Navi Technologies Private Limited
|
||||
~ * All rights reserved. Strictly confidential
|
||||
~ */
|
||||
-->
|
||||
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item>
|
||||
<shape android:shape="rectangle">
|
||||
<solid android:color="@color/light_grey_border_color" />
|
||||
|
||||
</shape>
|
||||
</item>
|
||||
<item
|
||||
android:left="@dimen/dp_1"
|
||||
android:right="@dimen/dp_1">
|
||||
<shape android:shape="rectangle">
|
||||
<solid android:color="@color/white" />
|
||||
</shape>
|
||||
</item>
|
||||
|
||||
</layer-list>
|
||||
@@ -0,0 +1,89 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!--
|
||||
~ /*
|
||||
~ * Copyright © 2023 by Navi Technologies Private Limited
|
||||
~ * All rights reserved. Strictly confidential
|
||||
~ */
|
||||
-->
|
||||
<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">
|
||||
|
||||
<com.navi.naviwidgets.widgets.NaviChatTransactionStatusWidgetLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="@dimen/dp_32"
|
||||
android:gravity="bottom"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<androidx.cardview.widget.CardView
|
||||
android:id="@+id/cvReceivedMessage"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/dp_16"
|
||||
android:layout_marginBottom="@dimen/dp_18"
|
||||
app:cardCornerRadius="@dimen/dp_24"
|
||||
app:cardElevation="@dimen/dp_2">
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:id="@+id/ivReceivedMessage"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/ic_navi_chat_logo" />
|
||||
|
||||
</androidx.cardview.widget.CardView>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/llTransactionStatus"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="@dimen/dp_8"
|
||||
android:orientation="vertical">
|
||||
|
||||
<com.navi.design.textview.NaviTextView
|
||||
android:id="@+id/tvMessageTitle"
|
||||
style="@style/NaviChatReceivedMessageStyle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@drawable/bg_border_dark_grey_fill_color_grey_top_rounded"
|
||||
android:fontFamily="@font/tt_regular"
|
||||
android:paddingVertical="@dimen/dp_16"
|
||||
android:textColor="@color/titleSecondaryColor"
|
||||
app:fontFamily="@font/tt_medium"
|
||||
tools:text="Complaint raised to biller" />
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/rvOptionList"
|
||||
android:paddingVertical="@dimen/dp_6"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/bg_border_dark_grey_white_color_rect"
|
||||
android:splitMotionEvents="false"
|
||||
tools:itemCount="4"
|
||||
tools:listitem="@layout/layout_navi_chat_transaction_status_message_item" />
|
||||
|
||||
<com.navi.design.textview.NaviTextView
|
||||
android:id="@+id/replyMessage"
|
||||
style="@style/NaviChatReceivedMessageStyle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@drawable/bg_border_dark_grey_grey_fill_color_bottom_rounded"
|
||||
android:fontFamily="@font/tt_regular"
|
||||
android:paddingTop="@dimen/dp_12"
|
||||
android:paddingBottom="@dimen/dp_16"
|
||||
android:textColor="@color/ctaTitleDark"
|
||||
tools:text="Waiting reply from biller" />
|
||||
|
||||
<com.navi.design.textview.NaviTextView
|
||||
android:id="@+id/tvTimestamp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/dp_2"
|
||||
android:fontFamily="@font/tt_regular"
|
||||
android:textColor="@color/navi_chat_time_stamp_text_color"
|
||||
android:textSize="@dimen/font_extra_small"
|
||||
app:fontFamily="@font/tt_regular"
|
||||
tools:text="10:20" />
|
||||
</LinearLayout>
|
||||
|
||||
</com.navi.naviwidgets.widgets.NaviChatTransactionStatusWidgetLayout>
|
||||
</layout>
|
||||
@@ -0,0 +1,54 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!--
|
||||
~ /*
|
||||
~ * Copyright © 2024 by Navi Technologies Private Limited
|
||||
~ * All rights reserved. Strictly confidential
|
||||
~ */
|
||||
-->
|
||||
<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">
|
||||
|
||||
<com.navi.naviwidgets.widgets.NaviChatTransactionStatusMessageItemLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginVertical="@dimen/dp_7">
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintBottom_toBottomOf="parent">
|
||||
|
||||
<com.navi.design.textview.NaviTextView
|
||||
android:id="@+id/label"
|
||||
android:layout_width="0dp"
|
||||
android:paddingStart="@dimen/dp_16"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:fontFamily="@font/tt_regular"
|
||||
android:paddingEnd="@dimen/dp_12"
|
||||
android:textColor="@color/titleTertiaryColor"
|
||||
android:textSize="@dimen/sp_12"
|
||||
app:layout_constraintEnd_toStartOf="@id/description"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
tools:text="Transaction Status" />
|
||||
|
||||
<com.navi.design.textview.NaviTextView
|
||||
android:id="@+id/description"
|
||||
android:layout_width="0dp"
|
||||
android:paddingEnd="@dimen/dp_14"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:fontFamily="@font/tt_regular"
|
||||
android:gravity="start"
|
||||
android:textColor="@color/black"
|
||||
android:textSize="@dimen/sp_12"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toEndOf="@id/label"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
tools:text="12/12/2022 03:05pm" />
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
</com.navi.naviwidgets.widgets.NaviChatTransactionStatusMessageItemLayout>
|
||||
|
||||
</layout>
|
||||
Reference in New Issue
Block a user