messenger-android

Android graphical user interfaces for GNUnet Messenger
Log | Files | Refs | README | LICENSE

ChatListAdapter.kt (2268B)


      1 /*
      2    This file is part of GNUnet.
      3    Copyright (C) 2021--2025 GNUnet e.V.
      4 
      5    GNUnet is free software: you can redistribute it and/or modify it
      6    under the terms of the GNU Affero General Public License as published
      7    by the Free Software Foundation, either version 3 of the License,
      8    or (at your option) any later version.
      9 
     10    GNUnet is distributed in the hope that it will be useful, but
     11    WITHOUT ANY WARRANTY; without even the implied warranty of
     12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     13    Affero General Public License for more details.
     14 
     15    You should have received a copy of the GNU Affero General Public License
     16    along with this program.  If not, see <http://www.gnu.org/licenses/>.
     17 
     18    SPDX-License-Identifier: AGPL3.0-or-later
     19  */
     20 /*
     21  * @author t3sserakt
     22  * @file GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/ui/adapters/ChatListAdapter.kt
     23  */
     24 
     25 package org.gnunet.gnunetmessenger.ui.adapters
     26 
     27 import android.view.LayoutInflater
     28 import android.view.ViewGroup
     29 import androidx.recyclerview.widget.RecyclerView
     30 import org.gnunet.gnunetmessenger.databinding.ItemChatBinding
     31 import org.gnunet.gnunetmessenger.model.ChatSummary
     32 
     33 class ChatListAdapter(
     34     private var chats: List<ChatSummary>,
     35     private val onChatClick: (ChatSummary) -> Unit
     36 ) : RecyclerView.Adapter<ChatListAdapter.ChatViewHolder>() {
     37 
     38     inner class ChatViewHolder(private val binding: ItemChatBinding) :
     39         RecyclerView.ViewHolder(binding.root) {
     40         fun bind(chat: ChatSummary) {
     41             binding.chatName.text = chat.displayName
     42             binding.lastMessage.text = chat.lastMessagePreview ?: ""
     43             binding.root.setOnClickListener {
     44                 onChatClick(chat)
     45             }
     46         }
     47     }
     48 
     49     override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ChatViewHolder {
     50         val binding = ItemChatBinding.inflate(LayoutInflater.from(parent.context), parent, false)
     51         return ChatViewHolder(binding)
     52     }
     53 
     54     override fun onBindViewHolder(holder: ChatViewHolder, position: Int) {
     55         holder.bind(chats[position])
     56     }
     57 
     58     override fun getItemCount() = chats.size
     59 
     60     fun submitList(newChats: List<ChatSummary>) {
     61         this.chats = newChats
     62         notifyDataSetChanged()
     63     }
     64 }