aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJelena Petrovic <jelenapetrovic.7119@gmail.com>2022-11-22 03:13:17 +0100
committerJelena Petrovic <jelenapetrovic.7119@gmail.com>2022-11-22 03:13:17 +0100
commite3b16511aba89dd4905c3150e0bcaecd46664215 (patch)
treed28dd5c5943117c0371905e73c8e96c2d6d271c3
parent0a96c7acb76791f02dc47250b43b6600bf3adb0e (diff)
poslate poruke se odmah vide u cetu, razlikuju se primljene od poslatih poruka #37
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ChatActivityConversation.kt18
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/ChatMessagesAdapter.kt67
-rw-r--r--Client/BrzoDoLokacije/app/src/main/res/layout/activity_chat_conversation.xml3
-rw-r--r--Client/BrzoDoLokacije/app/src/main/res/layout/chat_message.xml23
-rw-r--r--Client/BrzoDoLokacije/app/src/main/res/layout/chat_message_other.xml23
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