Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private const val SEND_LAYOUT = 0
- private const val RECEIVED_LAYOUT = 1
- class ChatRecyclerViewAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
- private lateinit var receiverUserPic: String
- private lateinit var messageList: List<Message>
- private lateinit var currentUserPic: String
- private lateinit var currentUserUID: String
- private lateinit var targetUID: String
- override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
- val viewHolder: RecyclerView.ViewHolder
- val view: View
- viewHolder = if (viewType == SEND_LAYOUT) {
- view = LayoutInflater.from(parent.context)
- .inflate(R.layout.sent_message_row, parent, false)
- SentViewHolder(view)
- } else {
- view = LayoutInflater.from(parent.context)
- .inflate(R.layout.recieved_message_row, parent, false)
- ReceivedViewHolder(view)
- }
- return viewHolder
- }
- override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
- //holder.setIsRecyclable(false)
- val currentMessage = messageList[position]
- if (holder.itemViewType == SEND_LAYOUT) {
- holder as SentViewHolder
- holder.bindSentRow(currentMessage)
- } else {
- holder as ReceivedViewHolder
- holder.bindReceivedRow(currentMessage)
- }
- }
- override fun getItemCount(): Int {
- return messageList.size
- }
- override fun getItemViewType(position: Int): Int {
- val currentMessage = messageList[position]
- return if (FirebaseAuth.getInstance().currentUser?.uid.equals(currentMessage.sender))
- SEND_LAYOUT
- else
- RECEIVED_LAYOUT
- }
- inner class SentViewHolder(private val itemView: View) : RecyclerView.ViewHolder(itemView) {
- fun bindSentRow(message: Message) {
- val sentMessageTextView =
- itemView.findViewById<TextView>(R.id.sentMessage)
- val sentImage = itemView.findViewById<ImageView>(R.id.sentImage)
- val profileImage =
- itemView.findViewById<ImageView>(R.id.sentMessageProfilePicture)
- val sentIsSeenImageTextView =
- itemView.findViewById<TextView>(R.id.sentIsSeenImageTextView)
- val sentIsSeenTextView =
- itemView.findViewById<TextView>(R.id.sentIsSeenTextView)
- profileImage.setOnClickListener {
- val visitProfileIntent = Intent(it.context, VisitProfileActivity::class.java)
- visitProfileIntent.putExtra("targetUID", currentUserUID)
- it.context.startActivity(visitProfileIntent)
- }
- if (message.message.equals("Sent you an image") && !message.url.equals("")) {
- sentMessageTextView.visibility = View.GONE
- sentIsSeenImageTextView.visibility = View.VISIBLE
- sentIsSeenTextView.visibility = View.GONE
- sentImage.visibility = View.VISIBLE
- Glide.with(itemView.rootView).load(message.url)
- .override(SIZE_ORIGINAL, SIZE_ORIGINAL)
- .error(R.drawable.error_icon)
- .placeholder(R.drawable.loading_icon)
- .listener(object : RequestListener<Drawable?> {
- override fun onLoadFailed(
- @Nullable e: GlideException?,
- model: Any,
- target: Target<Drawable?>,
- isFirstResource: Boolean
- ): Boolean {
- return false
- }
- override fun onResourceReady(
- resource: Drawable?,
- model: Any?,
- target: Target<Drawable?>?,
- dataSource: DataSource?,
- isFirstResource: Boolean
- ): Boolean {
- return false
- }
- }).into(sentImage)
- if (adapterPosition == messageList.size - 1) {
- sentIsSeenImageTextView.visibility = View.VISIBLE
- sentIsSeenTextView.visibility = View.GONE
- if (message.seen == true) {
- sentIsSeenImageTextView.text = "Seen"
- } else {
- sentIsSeenImageTextView.text = "Sent"
- }
- } else {
- sentIsSeenImageTextView.visibility = View.GONE
- }
- } else {
- sentMessageTextView.visibility = View.VISIBLE
- sentMessageTextView.text = message.message
- sentIsSeenImageTextView.visibility = View.GONE
- if (adapterPosition == messageList.size - 1) {
- sentIsSeenTextView.visibility = View.VISIBLE
- sentIsSeenImageTextView.visibility = View.GONE
- if (message.seen == true) {
- sentIsSeenTextView.text = "Seen"
- } else {
- sentIsSeenTextView.text = "Sent"
- }
- }
- }
- Glide.with(itemView.rootView).load(currentUserPic).into(profileImage)
- }
- }
- inner class ReceivedViewHolder(private val itemView: View) : RecyclerView.ViewHolder(itemView) {
- fun bindReceivedRow(message: Message) {
- val receiveMessageTextView =
- itemView.findViewById<TextView>(R.id.receivedMessage)
- val receiveImage =
- itemView.findViewById<ImageView>(R.id.receivedImage)
- val receiveProfileImage =
- itemView.findViewById<ImageView>(R.id.receivedMessageProfileImage)
- receiveProfileImage.setOnClickListener {
- val visitProfileIntent = Intent(it.context, VisitProfileActivity::class.java)
- visitProfileIntent.putExtra("targetUID", targetUID)
- it.context.startActivity(visitProfileIntent)
- }
- if (message.message.equals("Sent you an image") && !message.url.equals("")) {
- receiveMessageTextView.visibility = View.GONE
- receiveImage.visibility = View.VISIBLE
- Glide.with(itemView.rootView).load(message.url).into(receiveImage)
- } else {
- receiveMessageTextView.visibility = View.VISIBLE
- receiveMessageTextView.text = message.message
- }
- Glide.with(itemView.rootView).load(receiverUserPic).into(receiveProfileImage)
- }
- }
- fun getMessageList(): List<Message> {
- return messageList
- }
- fun setMessagesList(
- newList: List<Message>,
- userProfilePic: String,
- userProfilePic1: String,
- currentUID: String,
- receiverUID: String
- ) {
- messageList = newList
- currentUserPic = userProfilePic
- receiverUserPic = userProfilePic1
- currentUserUID = currentUID
- targetUID = receiverUID
- notifyDataSetChanged()
- }
- }
Add Comment
Please, Sign In to add comment