mistral-chat-app/app/src/main/java/com/mistral/chat/ui/MessageAdapter.kt
Алексей Будаев cda6eb7ce0 Initial commit
2026-04-03 22:53:42 +08:00

80 lines
No EOL
3 KiB
Kotlin

package com.mistral.chat.ui
import android.content.ClipData
import android.content.ClipboardManager
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import android.widget.Toast
import androidx.recyclerview.widget.RecyclerView
import com.mistral.chat.R
import com.mistral.chat.data.Message
class MessageAdapter(private val messages: List<Message>) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
override fun getItemViewType(position: Int): Int {
return if (messages[position].isUser) 0 else 1
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return if (viewType == 0) {
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_message_user, parent, false)
UserMessageHolder(view)
} else {
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_message_assistant, parent, false)
AssistantMessageHolder(view)
}
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
val message = messages[position]
when (holder) {
is UserMessageHolder -> holder.bind(message)
is AssistantMessageHolder -> holder.bind(message)
}
}
override fun getItemCount(): Int = messages.size
class UserMessageHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun bind(message: Message) {
val textView = itemView.findViewById<TextView>(R.id.messageText)
textView.text = message.content
textView.setBackgroundResource(R.drawable.bg_message_user)
textView.setTextColor(0xFFFFFFFF.toInt())
itemView.setOnLongClickListener {
copyToClipboard(itemView.context, message.content)
true
}
}
}
class AssistantMessageHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun bind(message: Message) {
val senderNameView = itemView.findViewById<TextView>(R.id.senderName)
val textView = itemView.findViewById<TextView>(R.id.messageText)
senderNameView.text = message.senderName ?: "Assistant"
textView.text = message.content
textView.setBackgroundResource(R.drawable.bg_message_assistant)
textView.setTextColor(0xFF000000.toInt())
itemView.setOnLongClickListener {
copyToClipboard(itemView.context, message.content)
true
}
}
}
companion object {
fun copyToClipboard(context: Context, text: String) {
val clipboard = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
val clip = ClipData.newPlainText("Message", text)
clipboard.setPrimaryClip(clip)
Toast.makeText(context, "Copied to clipboard", Toast.LENGTH_SHORT).show()
}
}
}