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) : RecyclerView.Adapter() { 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(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(R.id.senderName) val textView = itemView.findViewById(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() } } }