dorperez

Untitled

Apr 27th, 2022
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 7.16 KB | None | 0 0
  1. private const val SEND_LAYOUT = 0
  2. private const val RECEIVED_LAYOUT = 1
  3.  
  4. class ChatRecyclerViewAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
  5.  
  6.     private lateinit var receiverUserPic: String
  7.     private lateinit var messageList: List<Message>
  8.     private lateinit var currentUserPic: String
  9.     private lateinit var currentUserUID: String
  10.     private lateinit var targetUID: String
  11.  
  12.     override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
  13.  
  14.         val viewHolder: RecyclerView.ViewHolder
  15.         val view: View
  16.  
  17.         viewHolder = if (viewType == SEND_LAYOUT) {
  18.  
  19.             view = LayoutInflater.from(parent.context)
  20.                 .inflate(R.layout.sent_message_row, parent, false)
  21.             SentViewHolder(view)
  22.  
  23.         } else {
  24.  
  25.             view = LayoutInflater.from(parent.context)
  26.                 .inflate(R.layout.recieved_message_row, parent, false)
  27.             ReceivedViewHolder(view)
  28.  
  29.         }
  30.  
  31.         return viewHolder
  32.  
  33.     }
  34.  
  35.     override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
  36.  
  37.         //holder.setIsRecyclable(false)
  38.         val currentMessage = messageList[position]
  39.  
  40.         if (holder.itemViewType == SEND_LAYOUT) {
  41.  
  42.             holder as SentViewHolder
  43.             holder.bindSentRow(currentMessage)
  44.  
  45.         } else {
  46.  
  47.             holder as ReceivedViewHolder
  48.             holder.bindReceivedRow(currentMessage)
  49.  
  50.         }
  51.  
  52.     }
  53.  
  54.     override fun getItemCount(): Int {
  55.         return messageList.size
  56.     }
  57.  
  58.     override fun getItemViewType(position: Int): Int {
  59.  
  60.         val currentMessage = messageList[position]
  61.  
  62.         return if (FirebaseAuth.getInstance().currentUser?.uid.equals(currentMessage.sender))
  63.             SEND_LAYOUT
  64.         else
  65.             RECEIVED_LAYOUT
  66.  
  67.     }
  68.  
  69.     inner class SentViewHolder(private val itemView: View) : RecyclerView.ViewHolder(itemView) {
  70.  
  71.         fun bindSentRow(message: Message) {
  72.  
  73.             val sentMessageTextView =
  74.                 itemView.findViewById<TextView>(R.id.sentMessage)
  75.             val sentImage = itemView.findViewById<ImageView>(R.id.sentImage)
  76.             val profileImage =
  77.                 itemView.findViewById<ImageView>(R.id.sentMessageProfilePicture)
  78.             val sentIsSeenImageTextView =
  79.                 itemView.findViewById<TextView>(R.id.sentIsSeenImageTextView)
  80.             val sentIsSeenTextView =
  81.                 itemView.findViewById<TextView>(R.id.sentIsSeenTextView)
  82.  
  83.  
  84.             profileImage.setOnClickListener {
  85.  
  86.                 val visitProfileIntent = Intent(it.context, VisitProfileActivity::class.java)
  87.                 visitProfileIntent.putExtra("targetUID", currentUserUID)
  88.                 it.context.startActivity(visitProfileIntent)
  89.  
  90.             }
  91.  
  92.             if (message.message.equals("Sent you an image") && !message.url.equals("")) {
  93.  
  94.                 sentMessageTextView.visibility = View.GONE
  95.                 sentIsSeenImageTextView.visibility = View.VISIBLE
  96.                 sentIsSeenTextView.visibility = View.GONE
  97.                 sentImage.visibility = View.VISIBLE
  98.  
  99.  
  100.                 Glide.with(itemView.rootView).load(message.url)
  101.                     .override(SIZE_ORIGINAL, SIZE_ORIGINAL)
  102.                     .error(R.drawable.error_icon)
  103.                     .placeholder(R.drawable.loading_icon)
  104.                     .listener(object : RequestListener<Drawable?> {
  105.                         override fun onLoadFailed(
  106.                             @Nullable e: GlideException?,
  107.                             model: Any,
  108.                             target: Target<Drawable?>,
  109.                             isFirstResource: Boolean
  110.                         ): Boolean {
  111.                             return false
  112.                         }
  113.  
  114.                         override fun onResourceReady(
  115.                             resource: Drawable?,
  116.                             model: Any?,
  117.                             target: Target<Drawable?>?,
  118.                             dataSource: DataSource?,
  119.                             isFirstResource: Boolean
  120.                         ): Boolean {
  121.                             return false
  122.                         }
  123.                     }).into(sentImage)
  124.  
  125.  
  126.  
  127.                 if (adapterPosition == messageList.size - 1) {
  128.                     sentIsSeenImageTextView.visibility = View.VISIBLE
  129.                     sentIsSeenTextView.visibility = View.GONE
  130.  
  131.                     if (message.seen == true) {
  132.                         sentIsSeenImageTextView.text = "Seen"
  133.                     } else {
  134.                         sentIsSeenImageTextView.text = "Sent"
  135.                     }
  136.  
  137.                 } else {
  138.                     sentIsSeenImageTextView.visibility = View.GONE
  139.                 }
  140.  
  141.                
  142.  
  143.         } else {
  144.  
  145.             sentMessageTextView.visibility = View.VISIBLE
  146.             sentMessageTextView.text = message.message
  147.             sentIsSeenImageTextView.visibility = View.GONE
  148.  
  149.             if (adapterPosition == messageList.size - 1) {
  150.                 sentIsSeenTextView.visibility = View.VISIBLE
  151.                 sentIsSeenImageTextView.visibility = View.GONE
  152.  
  153.                 if (message.seen == true) {
  154.                     sentIsSeenTextView.text = "Seen"
  155.                 } else {
  156.                     sentIsSeenTextView.text = "Sent"
  157.                 }
  158.  
  159.             }
  160.  
  161.         }
  162.  
  163.  
  164.         Glide.with(itemView.rootView).load(currentUserPic).into(profileImage)
  165.  
  166.  
  167.     }
  168.  
  169. }
  170.  
  171.  
  172. inner class ReceivedViewHolder(private val itemView: View) : RecyclerView.ViewHolder(itemView) {
  173.  
  174.     fun bindReceivedRow(message: Message) {
  175.  
  176.         val receiveMessageTextView =
  177.             itemView.findViewById<TextView>(R.id.receivedMessage)
  178.         val receiveImage =
  179.             itemView.findViewById<ImageView>(R.id.receivedImage)
  180.         val receiveProfileImage =
  181.             itemView.findViewById<ImageView>(R.id.receivedMessageProfileImage)
  182.  
  183.         receiveProfileImage.setOnClickListener {
  184.  
  185.             val visitProfileIntent = Intent(it.context, VisitProfileActivity::class.java)
  186.             visitProfileIntent.putExtra("targetUID", targetUID)
  187.             it.context.startActivity(visitProfileIntent)
  188.  
  189.         }
  190.  
  191.         if (message.message.equals("Sent you an image") && !message.url.equals("")) {
  192.  
  193.             receiveMessageTextView.visibility = View.GONE
  194.             receiveImage.visibility = View.VISIBLE
  195.  
  196.             Glide.with(itemView.rootView).load(message.url).into(receiveImage)
  197.  
  198.  
  199.         } else {
  200.  
  201.             receiveMessageTextView.visibility = View.VISIBLE
  202.             receiveMessageTextView.text = message.message
  203.  
  204.         }
  205.  
  206.         Glide.with(itemView.rootView).load(receiverUserPic).into(receiveProfileImage)
  207.  
  208.  
  209.     }
  210.  
  211. }
  212.  
  213. fun getMessageList(): List<Message> {
  214.     return messageList
  215. }
  216.  
  217. fun setMessagesList(
  218.     newList: List<Message>,
  219.     userProfilePic: String,
  220.     userProfilePic1: String,
  221.     currentUID: String,
  222.     receiverUID: String
  223. ) {
  224.     messageList = newList
  225.     currentUserPic = userProfilePic
  226.     receiverUserPic = userProfilePic1
  227.     currentUserUID = currentUID
  228.     targetUID = receiverUID
  229.     notifyDataSetChanged()
  230. }
  231.  
  232.  
  233. }
Add Comment
Please, Sign In to add comment