diff options
author | Jelena Petrovic <jelenapetrovic.7119@gmail.com> | 2022-11-26 18:28:05 +0100 |
---|---|---|
committer | Jelena Petrovic <jelenapetrovic.7119@gmail.com> | 2022-11-26 18:28:05 +0100 |
commit | ae56615b88ec9e353615c6e5741b2e0fc8fe8dc2 (patch) | |
tree | 71201c49c8ba1651ad4ed4de7acbf2d848d8c4b3 /Client | |
parent | 19b29a7941105ec6ca66b3a8e9cfbd72358dd449 (diff) |
Prikaz novih poruka odmah nakon primanja kada je otvoren cet #50
Diffstat (limited to 'Client')
4 files changed, 37 insertions, 14 deletions
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ChatActivity.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ChatActivity.kt index e99142a..25ef88e 100644 --- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ChatActivity.kt +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ChatActivity.kt @@ -32,6 +32,7 @@ class ChatActivity : AppCompatActivity(), SwipeRefreshLayout.OnRefreshListener { var layoutVar:LinearLayoutManager?=null var items:MutableList<ChatPreview>?= mutableListOf() private var swipeRefreshLayout: SwipeRefreshLayout?=null + var clickedChat:ChatActivityConversation?=null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -117,6 +118,10 @@ class ChatActivity : AppCompatActivity(), SwipeRefreshLayout.OnRefreshListener { swipeRefreshLayout?.isRefreshing=false } + fun setClickedActivity(activity:ChatActivityConversation){ + clickedChat=activity + } + override fun onRefresh() { requestNewMessages() } 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 4bd72bc..b4722ea 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 @@ -20,6 +20,8 @@ import com.example.brzodolokacije.Services.RetrofitHelper import com.example.brzodolokacije.Services.SharedPreferencesHelper import com.example.brzodolokacije.chat.SignalRListener import com.example.brzodolokacije.databinding.ActivityChatConversationBinding +import kotlinx.coroutines.MainScope +import kotlinx.coroutines.launch import retrofit2.Call import retrofit2.Response @@ -46,6 +48,7 @@ class ChatActivityConversation : AppCompatActivity() { setRecyclerView() requestMessages() webSocketConnection=SignalRListener.getInstance(this@ChatActivityConversation) + (webSocketConnection!!.activity as ChatActivity).setClickedActivity(this@ChatActivityConversation) setListeners() } @@ -53,7 +56,6 @@ class ChatActivityConversation : AppCompatActivity() { findViewById<ImageButton>(R.id.btnSendMessage).setOnClickListener { var token=SharedPreferencesHelper.getValue("jwt",this@ChatActivityConversation) var messageContent=findViewById<EditText>(R.id.etNewMessage).text.toString() - Log.d("main",token!!) val Api= RetrofitHelper.getInstance() if(userId.isNullOrEmpty() || userId.equals("null")){ //zahtev sa username=om @@ -150,15 +152,22 @@ class ChatActivityConversation : AppCompatActivity() { } } fun setRecyclerView(setParams:Boolean=true){ - if(setParams){ - adapterVar= items?.let { ChatMessagesAdapter(it,this@ChatActivityConversation) } - layoutVar= LinearLayoutManager(this@ChatActivityConversation) + MainScope().launch { + if (setParams) { + adapterVar = items?.let { ChatMessagesAdapter(it, this@ChatActivityConversation) } + layoutVar = LinearLayoutManager(this@ChatActivityConversation) + } + recyclerView = binding.rvMain + recyclerView?.setHasFixedSize(true) + recyclerView?.layoutManager = layoutVar + try { + recyclerView?.adapter = adapterVar + + } catch (e: Exception) { + Log.d("error", e.message!!) + } + recyclerView?.scrollToPosition(items?.size?.minus(1) ?: 0) } - recyclerView = binding.rvMain - recyclerView?.setHasFixedSize(true) - recyclerView?.layoutManager=layoutVar - recyclerView?.adapter=adapterVar - recyclerView?.scrollToPosition(items?.size?.minus(1) ?: 0) } fun requestMessages(){ @@ -170,6 +179,5 @@ class ChatActivityConversation : AppCompatActivity() { } 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/ChatPreviewsAdapter.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/ChatPreviewsAdapter.kt index 94a72f3..f875366 100644 --- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/ChatPreviewsAdapter.kt +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/ChatPreviewsAdapter.kt @@ -1,12 +1,12 @@ package com.example.brzodolokacije.Adapters -import android.app.Activity import android.content.Intent import android.view.LayoutInflater import android.view.ViewGroup import android.widget.Toast import androidx.recyclerview.widget.RecyclerView import com.bumptech.glide.Glide +import com.example.brzodolokacije.Activities.ChatActivity import com.example.brzodolokacije.Activities.ChatActivityConversation import com.example.brzodolokacije.Interfaces.IBackendApi import com.example.brzodolokacije.Models.ChatPreview @@ -18,7 +18,7 @@ import kotlinx.android.synthetic.main.chat_preview.view.* import retrofit2.Call import retrofit2.Response -class ChatPreviewsAdapter (val items : MutableList<ChatPreview>,val activity:Activity) +class ChatPreviewsAdapter (val items : MutableList<ChatPreview>,val activity:ChatActivity) : RecyclerView.Adapter<ChatPreviewsAdapter.ViewHolder>(){ //constructer has one argument - list of objects that need to be displayed //it is bound to xml of single item diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/chat/SignalRListener.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/chat/SignalRListener.kt index 567271d..7d75d4b 100644 --- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/chat/SignalRListener.kt +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/chat/SignalRListener.kt @@ -4,6 +4,7 @@ import android.app.Activity import android.util.Log import com.auth0.android.jwt.JWT import com.exam.DBHelper +import com.example.brzodolokacije.Activities.ChatActivity import com.example.brzodolokacije.Models.Message import com.example.brzodolokacije.Models.MessageReceive import com.example.brzodolokacije.Services.RetrofitHelper @@ -25,8 +26,7 @@ class SignalRListener private constructor(val activity: Activity){ hubConnection.keepAliveInterval=120 hubConnection.on("Message", Action1 { - message:MessageReceive->dbHelper.addMessage(Message(message.senderId+message.timestamp,message.senderId, - JWT(SharedPreferencesHelper.getValue("jwt",activity)!!).claims["id"]?.asString()!!,message.messagge,message.timestamp),false) + message:MessageReceive->addToDbAndloadMessageIfInChat(message,activity) }, MessageReceive::class.java ) @@ -55,6 +55,16 @@ class SignalRListener private constructor(val activity: Activity){ Log.d("main",hubConnection.connectionState.toString()) } + fun addToDbAndloadMessageIfInChat(message:MessageReceive,activity: Activity){ + dbHelper.addMessage(Message(message.senderId+message.timestamp,message.senderId, + JWT(SharedPreferencesHelper.getValue("jwt",activity)!!).claims["id"]?.asString()!!,message.messagge,message.timestamp),false) + if(activity is ChatActivity){ + if(activity.clickedChat?.userId==message.senderId){ + activity.clickedChat?.requestMessages() + } + } + } + fun log(){ Log.d("Debug infor siganlR ", hubConnection.connectionId) } |