diff options
5 files changed, 107 insertions, 27 deletions
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ChatActivityConversation.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ChatActivityConversation.kt index ab91940..98e3208 100644 --- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ChatActivityConversation.kt +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ChatActivityConversation.kt @@ -65,6 +65,7 @@ class ChatActivityConversation : AppCompatActivity() { if(response.isSuccessful()){ //zahtev da se posalje poruka userId=response.body()?._id + setHeader() var message= MessageSend(userId!!,messageContent) val request2=Api.sendMessage("Bearer "+token, message @@ -75,8 +76,8 @@ class ChatActivityConversation : AppCompatActivity() { //zahtev da se posalje poruka var responseMessage=response.body() dbConnection?.addMessage(responseMessage!!) - - + requestMessages() + binding.etNewMessage.text?.clear() } else{ @@ -112,7 +113,8 @@ class ChatActivityConversation : AppCompatActivity() { //zahtev da se posalje poruka var responseMessage=response.body() dbConnection?.addMessage(responseMessage!!) - //requestMessages() + requestMessages() + binding.etNewMessage.text?.clear() } else{ Toast.makeText(this@ChatActivityConversation,"Pogresno korisnicko ime.",Toast.LENGTH_LONG).show() @@ -130,11 +132,16 @@ class ChatActivityConversation : AppCompatActivity() { private fun setHeader(){ if(userId.isNullOrEmpty() || userId.equals("null")){ + binding.cvParentUsername.visibility= View.VISIBLE + binding.cvParentUsername.forceLayout() binding.tvFragmentTitle.visibility= View.GONE binding.tvFragmentTitle.invalidate() binding.tvFragmentTitle.forceLayout() } else{ + binding.tvFragmentTitle.visibility= View.VISIBLE + binding.tvFragmentTitle.invalidate() + binding.tvFragmentTitle.forceLayout() binding.tvFragmentTitle.text=receiverUsername binding.tvFragmentTitle.invalidate() binding.cvParentUsername.visibility= View.GONE @@ -150,11 +157,14 @@ class ChatActivityConversation : AppCompatActivity() { recyclerView?.setHasFixedSize(true) recyclerView?.layoutManager=layoutVar recyclerView?.adapter=adapterVar + recyclerView?.scrollToPosition(items?.size?.minus(1) ?: 0) } fun requestMessages(){ - items=dbConnection?.getMessages(userId!!) + if(!userId.isNullOrEmpty() && !userId.equals("null")) + items=dbConnection?.getMessages(userId!!) adapterVar= items?.let { ChatMessagesAdapter(it,this@ChatActivityConversation) } setRecyclerView(setParams = false) + } }
\ No newline at end of file diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/ChatMessagesAdapter.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/ChatMessagesAdapter.kt index 4c917f3..c3c8a8a 100644 --- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/ChatMessagesAdapter.kt +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/ChatMessagesAdapter.kt @@ -4,35 +4,72 @@ import android.app.Activity import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView +import com.auth0.android.jwt.JWT import com.example.brzodolokacije.Models.Message +import com.example.brzodolokacije.Services.SharedPreferencesHelper import com.example.brzodolokacije.databinding.ChatMessageBinding +import com.example.brzodolokacije.databinding.ChatMessageOtherBinding class ChatMessagesAdapter (val items : MutableList<Message>, val activity:Activity) - : RecyclerView.Adapter<ChatMessagesAdapter.ViewHolder>(){ + : RecyclerView.Adapter<RecyclerView.ViewHolder>(){ //constructer has one argument - list of objects that need to be displayed //it is bound to xml of single item - private lateinit var binding: ChatMessageBinding - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + private val VIEW_TYPE_MESSAGE_SENT: Int = 1 + private val VIEW_TYPE_MESSAGE_RECEIVED:Int = 2 + private var binding: ChatMessageBinding?=null + private var bindingOther: ChatMessageOtherBinding?=null + + private var currentUser:String?=null + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { val inflater = LayoutInflater.from(parent.context) - binding= ChatMessageBinding.inflate(inflater,parent,false) - return ViewHolder(binding) + var token=SharedPreferencesHelper.getValue("jwt",activity) + var jwt= JWT(token.toString()) + currentUser= jwt.getClaim("id").toString() + + if(viewType==VIEW_TYPE_MESSAGE_RECEIVED){ + bindingOther= ChatMessageOtherBinding.inflate(inflater,parent,false) + return ReceivedViewHolder(bindingOther!!) + } + else{ + binding= ChatMessageBinding.inflate(inflater,parent,false) + return SentViewHolder(binding!!) + } + } - override fun onBindViewHolder(holder: ViewHolder, position: Int){ + override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int){ //sets components of particular item - holder.bind(items[position]) -// holder.itemView.setOnClickListener { -// val intent: Intent = Intent(activity, ChatActivityConversation::class.java) -// intent.putExtra("userId",items[position].userId) -// activity.startActivity(intent) -// } + if(holder is ReceivedViewHolder){ + holder.bind(items[position]) + } + else if(holder is SentViewHolder){ + holder.bind(items[position]) + } } override fun getItemCount() = items.size - inner class ViewHolder(itemView : ChatMessageBinding) : RecyclerView.ViewHolder(itemView.root){ + inner class ReceivedViewHolder(itemView : ChatMessageOtherBinding) : RecyclerView.ViewHolder(itemView.root){ fun bind(item : Message){ - binding.apply { - //clMessage.foregroundGravity=Gravity.END + bindingOther?.apply { + tvMessage?.text=item.messagge + } + } + } + inner class SentViewHolder(itemView : ChatMessageBinding) : RecyclerView.ViewHolder(itemView.root){ + fun bind(item : Message){ + binding?.apply { tvMessage.text=item.messagge } } } + + + override fun getItemViewType(position: Int): Int { + var sender=items.get(position).senderId + if(sender==currentUser){ + return VIEW_TYPE_MESSAGE_SENT + } + else{ + return VIEW_TYPE_MESSAGE_RECEIVED + } + } }
\ No newline at end of file diff --git a/Client/BrzoDoLokacije/app/src/main/res/layout/activity_chat_conversation.xml b/Client/BrzoDoLokacije/app/src/main/res/layout/activity_chat_conversation.xml index 5afcd86..72060f7 100644 --- a/Client/BrzoDoLokacije/app/src/main/res/layout/activity_chat_conversation.xml +++ b/Client/BrzoDoLokacije/app/src/main/res/layout/activity_chat_conversation.xml @@ -62,7 +62,8 @@ android:id="@+id/rvMain" android:layout_width="match_parent" android:layout_height="wrap_content" - app:layout_constraintBottom_toBottomOf="parent"> + app:layout_constraintBottom_toBottomOf="parent" + > </androidx.recyclerview.widget.RecyclerView> </androidx.constraintlayout.widget.ConstraintLayout> diff --git a/Client/BrzoDoLokacije/app/src/main/res/layout/chat_message.xml b/Client/BrzoDoLokacije/app/src/main/res/layout/chat_message.xml index 2210fa0..2342779 100644 --- a/Client/BrzoDoLokacije/app/src/main/res/layout/chat_message.xml +++ b/Client/BrzoDoLokacije/app/src/main/res/layout/chat_message.xml @@ -2,16 +2,25 @@ <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" + xmlns:app="http://schemas.android.com/apk/res-auto" android:background="@drawable/rounded_cyan_button" - android:id="@+id/clMessage"> - - <TextView + android:clipToOutline="true" + android:id="@+id/clMessage" + android:layout_margin="@dimen/text_padding" + android:layout_gravity="end"> + <androidx.cardview.widget.CardView android:layout_width="wrap_content" android:layout_height="wrap_content" - android:textColor="@color/white" - android:id="@+id/tvMessage" - android:text="blabla" - android:padding="@dimen/component_padding"/> + app:layout_constraintEnd_toEndOf="parent" + app:cardBackgroundColor="@color/cardview_dark_background"> + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:textColor="@color/white" + android:id="@+id/tvMessage" + android:text="blabla" + android:padding="@dimen/component_padding"/> + </androidx.cardview.widget.CardView> </androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file diff --git a/Client/BrzoDoLokacije/app/src/main/res/layout/chat_message_other.xml b/Client/BrzoDoLokacije/app/src/main/res/layout/chat_message_other.xml new file mode 100644 index 0000000..647127c --- /dev/null +++ b/Client/BrzoDoLokacije/app/src/main/res/layout/chat_message_other.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8"?> +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:background="@drawable/rounded_cyan_button" + android:id="@+id/clMessage" + android:layout_margin="@dimen/text_padding" + android:clipToOutline="true"> + + <androidx.cardview.widget.CardView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + app:cardBackgroundColor="@color/dark_blue_transparent"> + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:textColor="@color/white" + android:id="@+id/tvMessage" + android:text="blabla" + android:padding="@dimen/component_padding"/> + </androidx.cardview.widget.CardView> +</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file |