diff --git a/app/src/main/java/com/example/defenseapplication/adapter/MessageListAdapter.kt b/app/src/main/java/com/example/defenseapplication/adapter/MessageListAdapter.kt new file mode 100644 index 0000000..f6fa5c4 --- /dev/null +++ b/app/src/main/java/com/example/defenseapplication/adapter/MessageListAdapter.kt @@ -0,0 +1,84 @@ +package com.example.defenseapplication.adapter + +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import com.example.defenseapplication.databinding.ItemMessageGroupTitleBinding +import com.example.defenseapplication.databinding.ItemMessageNoticeBinding + +sealed class MessageListItem { + data class Header(val title: String) : MessageListItem() + data class Message( + val time: String, + val title: String, + val dateTime: String, + val unread: Boolean + ) : MessageListItem() +} + +class MessageListAdapter : RecyclerView.Adapter() { + private val items = mutableListOf() + + fun submitList(list: List) { + items.clear() + items.addAll(list) + notifyDataSetChanged() + } + + override fun getItemViewType(position: Int): Int { + return when (items[position]) { + is MessageListItem.Header -> TYPE_HEADER + is MessageListItem.Message -> TYPE_MESSAGE + } + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { + return if (viewType == TYPE_HEADER) { + val binding = ItemMessageGroupTitleBinding.inflate( + LayoutInflater.from(parent.context), + parent, + false + ) + HeaderViewHolder(binding) + } else { + val binding = ItemMessageNoticeBinding.inflate( + LayoutInflater.from(parent.context), + parent, + false + ) + MessageViewHolder(binding) + } + } + + override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { + when (holder) { + is HeaderViewHolder -> holder.bind(items[position] as MessageListItem.Header) + is MessageViewHolder -> holder.bind(items[position] as MessageListItem.Message) + } + } + + override fun getItemCount(): Int = items.size + + private class HeaderViewHolder(private val binding: ItemMessageGroupTitleBinding) : + RecyclerView.ViewHolder(binding.root) { + fun bind(item: MessageListItem.Header) { + binding.tvGroupTitle.text = item.title + } + } + + private class MessageViewHolder(private val binding: ItemMessageNoticeBinding) : + RecyclerView.ViewHolder(binding.root) { + fun bind(item: MessageListItem.Message) { + binding.tvTime.text = item.time + binding.tvTitle.text = item.title + binding.tvDateTime.text = item.dateTime + binding.unreadDot.visibility = if (item.unread) View.VISIBLE else View.INVISIBLE + } + } + + companion object { + private const val TYPE_HEADER = 0 + private const val TYPE_MESSAGE = 1 + } +} diff --git a/app/src/main/res/drawable/bg_detail_border.xml b/app/src/main/res/drawable/bg_detail_border.xml new file mode 100644 index 0000000..ec78199 --- /dev/null +++ b/app/src/main/res/drawable/bg_detail_border.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/bg_logout_button.xml b/app/src/main/res/drawable/bg_logout_button.xml new file mode 100644 index 0000000..6051baf --- /dev/null +++ b/app/src/main/res/drawable/bg_logout_button.xml @@ -0,0 +1,8 @@ + + + + + + diff --git a/app/src/main/res/drawable/bg_personal_header_gradient.xml b/app/src/main/res/drawable/bg_personal_header_gradient.xml new file mode 100644 index 0000000..df6ef08 --- /dev/null +++ b/app/src/main/res/drawable/bg_personal_header_gradient.xml @@ -0,0 +1,7 @@ + + + + diff --git a/app/src/main/res/drawable/bg_unread_dot.xml b/app/src/main/res/drawable/bg_unread_dot.xml new file mode 100644 index 0000000..a72929e --- /dev/null +++ b/app/src/main/res/drawable/bg_unread_dot.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/app/src/main/res/layout/item_message_group_title.xml b/app/src/main/res/layout/item_message_group_title.xml new file mode 100644 index 0000000..ada2fd2 --- /dev/null +++ b/app/src/main/res/layout/item_message_group_title.xml @@ -0,0 +1,12 @@ + + diff --git a/app/src/main/res/layout/item_message_notice.xml b/app/src/main/res/layout/item_message_notice.xml new file mode 100644 index 0000000..5246727 --- /dev/null +++ b/app/src/main/res/layout/item_message_notice.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + +