diff --git a/navi-chat/src/main/java/com/navi/chat/db/utils/ChatUtils.kt b/navi-chat/src/main/java/com/navi/chat/db/utils/ChatUtils.kt index 411911cd9c..40571df1f0 100644 --- a/navi-chat/src/main/java/com/navi/chat/db/utils/ChatUtils.kt +++ b/navi-chat/src/main/java/com/navi/chat/db/utils/ChatUtils.kt @@ -73,6 +73,9 @@ fun transformFirestoreToWidgetModel(data: Map): NaviChatWidget = NaviChatFileAttachmentWidget.WIDGET_NAME -> { convertMapToJson(data) as NaviChatFileAttachmentWidget } + NaviChatTransactionStatusWidget.WIDGET_NAME -> { + convertMapToJson(data) as NaviChatTransactionStatusWidget + } else -> { NaviChatMessageWidget() } diff --git a/navi-chat/src/main/java/com/navi/chat/utils/ChatJsonDeserializer.kt b/navi-chat/src/main/java/com/navi/chat/utils/ChatJsonDeserializer.kt index 06315dc880..646a59518b 100644 --- a/navi-chat/src/main/java/com/navi/chat/utils/ChatJsonDeserializer.kt +++ b/navi-chat/src/main/java/com/navi/chat/utils/ChatJsonDeserializer.kt @@ -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.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) diff --git a/navi-design/src/main/res/values/colors.xml b/navi-design/src/main/res/values/colors.xml index 4730cdeef5..184b27826a 100644 --- a/navi-design/src/main/res/values/colors.xml +++ b/navi-design/src/main/res/values/colors.xml @@ -278,4 +278,5 @@ #B5ACB9 #1F002A #D9D9D9 + #1A3C0050 diff --git a/navi-widgets/src/main/java/com/navi/naviwidgets/interfaces/NaviChatTransactionStatusMessageItemWidgetInfo.kt b/navi-widgets/src/main/java/com/navi/naviwidgets/interfaces/NaviChatTransactionStatusMessageItemWidgetInfo.kt new file mode 100644 index 0000000000..3df8783bc9 --- /dev/null +++ b/navi-widgets/src/main/java/com/navi/naviwidgets/interfaces/NaviChatTransactionStatusMessageItemWidgetInfo.kt @@ -0,0 +1,7 @@ +package com.navi.naviwidgets.interfaces + +interface NaviChatTransactionStatusMessageItemWidgetInfo { + fun messageId(): String? + fun label(): String? + fun value(): String? +} \ No newline at end of file diff --git a/navi-widgets/src/main/java/com/navi/naviwidgets/interfaces/NaviChatTransactionStatusWidgetInfo.kt b/navi-widgets/src/main/java/com/navi/naviwidgets/interfaces/NaviChatTransactionStatusWidgetInfo.kt new file mode 100644 index 0000000000..46e8634d79 --- /dev/null +++ b/navi-widgets/src/main/java/com/navi/naviwidgets/interfaces/NaviChatTransactionStatusWidgetInfo.kt @@ -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? + fun senderName(): String? + fun timeStamp(): Timestamp? + fun footer(): String? +} \ No newline at end of file diff --git a/navi-widgets/src/main/java/com/navi/naviwidgets/models/response/NaviChatTransactionItemWidget.kt b/navi-widgets/src/main/java/com/navi/naviwidgets/models/response/NaviChatTransactionItemWidget.kt new file mode 100644 index 0000000000..9dab253a62 --- /dev/null +++ b/navi-widgets/src/main/java/com/navi/naviwidgets/models/response/NaviChatTransactionItemWidget.kt @@ -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 + +} diff --git a/navi-widgets/src/main/java/com/navi/naviwidgets/models/response/NaviChatTransactionStatusWidget.kt b/navi-widgets/src/main/java/com/navi/naviwidgets/models/response/NaviChatTransactionStatusWidget.kt new file mode 100644 index 0000000000..0b0278643a --- /dev/null +++ b/navi-widgets/src/main/java/com/navi/naviwidgets/models/response/NaviChatTransactionStatusWidget.kt @@ -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? = + 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? = null, +) : Serializable + +data class NaviChatTransactionStatusTitleWidget( + @get:PropertyName(TEXT) + @SerializedName(TEXT) + val text: String? = null, +) : Serializable diff --git a/navi-widgets/src/main/java/com/navi/naviwidgets/utils/Constants.kt b/navi-widgets/src/main/java/com/navi/naviwidgets/utils/Constants.kt index 13d2d568ec..3ce166d196 100644 --- a/navi-widgets/src/main/java/com/navi/naviwidgets/utils/Constants.kt +++ b/navi-widgets/src/main/java/com/navi/naviwidgets/utils/Constants.kt @@ -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" \ No newline at end of file +const val AP_LAUNCH = "applicationPlatform/launch" +const val LABEL = "label" +const val VALUE = "value" +const val TEXT = "text" +const val FOOTER = "footer" \ No newline at end of file diff --git a/navi-widgets/src/main/java/com/navi/naviwidgets/viewholder/NaviChatTransactionStatusMessageItemVH.kt b/navi-widgets/src/main/java/com/navi/naviwidgets/viewholder/NaviChatTransactionStatusMessageItemVH.kt new file mode 100644 index 0000000000..8a47f1cea6 --- /dev/null +++ b/navi-widgets/src/main/java/com/navi/naviwidgets/viewholder/NaviChatTransactionStatusMessageItemVH.kt @@ -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(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*/ + } +} \ No newline at end of file diff --git a/navi-widgets/src/main/java/com/navi/naviwidgets/viewholder/NaviChatTransactionStatusVH.kt b/navi-widgets/src/main/java/com/navi/naviwidgets/viewholder/NaviChatTransactionStatusVH.kt new file mode 100644 index 0000000000..9b3ff7aa51 --- /dev/null +++ b/navi-widgets/src/main/java/com/navi/naviwidgets/viewholder/NaviChatTransactionStatusVH.kt @@ -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(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*/ + } +} diff --git a/navi-widgets/src/main/java/com/navi/naviwidgets/viewholder/NaviChatViewHolderFactoryImpl.kt b/navi-widgets/src/main/java/com/navi/naviwidgets/viewholder/NaviChatViewHolderFactoryImpl.kt index 7250801e42..392e2e51a7 100644 --- a/navi-widgets/src/main/java/com/navi/naviwidgets/viewholder/NaviChatViewHolderFactoryImpl.kt +++ b/navi-widgets/src/main/java/com/navi/naviwidgets/viewholder/NaviChatViewHolderFactoryImpl.kt @@ -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( 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( 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( 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) } diff --git a/navi-widgets/src/main/java/com/navi/naviwidgets/widgets/NaviChatTransactionStatusMessageItemLayout.kt b/navi-widgets/src/main/java/com/navi/naviwidgets/widgets/NaviChatTransactionStatusMessageItemLayout.kt new file mode 100644 index 0000000000..ab9532ed33 --- /dev/null +++ b/navi-widgets/src/main/java/com/navi/naviwidgets/widgets/NaviChatTransactionStatusMessageItemLayout.kt @@ -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()) + } + } +} \ No newline at end of file diff --git a/navi-widgets/src/main/java/com/navi/naviwidgets/widgets/NaviChatTransactionStatusWidgetLayout.kt b/navi-widgets/src/main/java/com/navi/naviwidgets/widgets/NaviChatTransactionStatusWidgetLayout.kt new file mode 100644 index 0000000000..e801d1b632 --- /dev/null +++ b/navi-widgets/src/main/java/com/navi/naviwidgets/widgets/NaviChatTransactionStatusWidgetLayout.kt @@ -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) + ) + } +} diff --git a/navi-widgets/src/main/res/drawable/bg_border_dark_grey_fill_color_grey_top_rounded.xml b/navi-widgets/src/main/res/drawable/bg_border_dark_grey_fill_color_grey_top_rounded.xml new file mode 100644 index 0000000000..9d5b06b181 --- /dev/null +++ b/navi-widgets/src/main/res/drawable/bg_border_dark_grey_fill_color_grey_top_rounded.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/navi-widgets/src/main/res/drawable/bg_border_dark_grey_grey_fill_color_bottom_rounded.xml b/navi-widgets/src/main/res/drawable/bg_border_dark_grey_grey_fill_color_bottom_rounded.xml new file mode 100644 index 0000000000..593aa1fc86 --- /dev/null +++ b/navi-widgets/src/main/res/drawable/bg_border_dark_grey_grey_fill_color_bottom_rounded.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/navi-widgets/src/main/res/drawable/bg_border_dark_grey_white_color_rect.xml b/navi-widgets/src/main/res/drawable/bg_border_dark_grey_white_color_rect.xml new file mode 100644 index 0000000000..1731159b40 --- /dev/null +++ b/navi-widgets/src/main/res/drawable/bg_border_dark_grey_white_color_rect.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + diff --git a/navi-widgets/src/main/res/layout/layout_navi_chat_transaction_status.xml b/navi-widgets/src/main/res/layout/layout_navi_chat_transaction_status.xml new file mode 100644 index 0000000000..ad04d091ad --- /dev/null +++ b/navi-widgets/src/main/res/layout/layout_navi_chat_transaction_status.xml @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/navi-widgets/src/main/res/layout/layout_navi_chat_transaction_status_message_item.xml b/navi-widgets/src/main/res/layout/layout_navi_chat_transaction_status_message_item.xml new file mode 100644 index 0000000000..2b31aa52e3 --- /dev/null +++ b/navi-widgets/src/main/res/layout/layout_navi_chat_transaction_status_message_item.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + \ No newline at end of file