diff options
6 files changed, 68 insertions, 11 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 c824cf3..e99142a 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 @@ -3,16 +3,24 @@ package com.example.brzodolokacije.Activities import android.content.Intent import android.os.Bundle import android.widget.ImageButton +import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import androidx.swiperefreshlayout.widget.SwipeRefreshLayout +import com.auth0.android.jwt.JWT import com.exam.DBHelper import com.example.brzodolokacije.Adapters.ChatPreviewsAdapter import com.example.brzodolokacije.Models.ChatPreview +import com.example.brzodolokacije.Models.Message +import com.example.brzodolokacije.Models.MessageReceive import com.example.brzodolokacije.R +import com.example.brzodolokacije.Services.RetrofitHelper +import com.example.brzodolokacije.Services.SharedPreferencesHelper import com.example.brzodolokacije.chat.SignalRListener import com.example.brzodolokacije.databinding.ActivityChatBinding +import retrofit2.Call +import retrofit2.Response class ChatActivity : AppCompatActivity(), SwipeRefreshLayout.OnRefreshListener { @@ -33,7 +41,7 @@ class ChatActivity : AppCompatActivity(), SwipeRefreshLayout.OnRefreshListener { ws=SignalRListener.getInstance(this@ChatActivity) setListeners() setRecyclerView() - requestForChats() + requestNewMessages() swipeRefreshLayout = binding.swipeContainer swipeRefreshLayout?.setOnRefreshListener(this@ChatActivity) swipeRefreshLayout?.setColorSchemeResources( @@ -44,7 +52,7 @@ class ChatActivity : AppCompatActivity(), SwipeRefreshLayout.OnRefreshListener { ) swipeRefreshLayout?.post(kotlinx.coroutines.Runnable { swipeRefreshLayout?.isRefreshing=true - requestForChats() + requestNewMessages() }) } @@ -63,6 +71,40 @@ class ChatActivity : AppCompatActivity(), SwipeRefreshLayout.OnRefreshListener { setRecyclerView(setParams = false) } + fun requestNewMessages(){ + val api=RetrofitHelper.getInstance() + val token=SharedPreferencesHelper.getValue("jwt",this@ChatActivity) + val request2=api?.getNewMessages("Bearer "+token) + request2?.enqueue(object : retrofit2.Callback<MutableList<MessageReceive>?> { + override fun onResponse(call: Call<MutableList<MessageReceive>?>, response: Response<MutableList<MessageReceive>?>) { + if(response.isSuccessful()){ + var messages=response.body() + if(!messages.isNullOrEmpty()){ + var dbHelper= DBHelper.getInstance(this@ChatActivity) + for( message in messages){ + dbHelper.addMessage( + Message(message.senderId+message.timestamp,message.senderId, + JWT(SharedPreferencesHelper.getValue("jwt",this@ChatActivity)!!).claims["id"]?.asString()!!,message.messagge,message.timestamp),false) + } + } + requestForChats() + } + else{ + Toast.makeText(this@ChatActivity,"los id", + Toast.LENGTH_LONG).show() + requestForChats() + } + } + + override fun onFailure(call: Call<MutableList<MessageReceive>?>, t: Throwable) { + Toast.makeText(this@ChatActivity,"neuspesan zahtev", + Toast.LENGTH_LONG).show() + requestForChats() + } + }) + + } + fun setRecyclerView(setParams:Boolean=true){ if(setParams){ adapterVar= items?.let { ChatPreviewsAdapter(it,this@ChatActivity) } @@ -76,6 +118,6 @@ class ChatActivity : AppCompatActivity(), SwipeRefreshLayout.OnRefreshListener { } override fun onRefresh() { - requestForChats() + requestNewMessages() } }
\ No newline at end of file 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 98e3208..4bd72bc 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 @@ -9,6 +9,7 @@ import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView +import com.auth0.android.jwt.JWT import com.exam.DBHelper import com.example.brzodolokacije.Adapters.ChatMessagesAdapter import com.example.brzodolokacije.Models.Message @@ -161,8 +162,12 @@ class ChatActivityConversation : AppCompatActivity() { } fun requestMessages(){ - if(!userId.isNullOrEmpty() && !userId.equals("null")) - items=dbConnection?.getMessages(userId!!) + if(!userId.isNullOrEmpty() && !userId.equals("null")){ + if(userId!= JWT(SharedPreferencesHelper.getValue("jwt",this@ChatActivityConversation)!!).claims["id"]?.asString()) + items=dbConnection?.getMessages(userId!!) + else + items=dbConnection?.getMessages(userId!!,self = true) + } adapterVar= items?.let { ChatMessagesAdapter(it,this@ChatActivityConversation) } setRecyclerView(setParams = false) 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 c3c8a8a..45ffbf0 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 @@ -23,9 +23,7 @@ class ChatMessagesAdapter (val items : MutableList<Message>, val activity:Activi override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { val inflater = LayoutInflater.from(parent.context) - 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) @@ -65,6 +63,10 @@ class ChatMessagesAdapter (val items : MutableList<Message>, val activity:Activi override fun getItemViewType(position: Int): Int { var sender=items.get(position).senderId + var token= SharedPreferencesHelper.getValue("jwt",activity) + var jwt= JWT(token.toString()) + var claim=jwt.getClaim("id") + currentUser= claim.asString()!! if(sender==currentUser){ return VIEW_TYPE_MESSAGE_SENT } diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Interfaces/IBackendApi.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Interfaces/IBackendApi.kt index 8fb7b4d..cb51627 100644 --- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Interfaces/IBackendApi.kt +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Interfaces/IBackendApi.kt @@ -65,6 +65,8 @@ interface IBackendApi { ):PagedPosts @POST("/api/message/add") fun sendMessage(@Header("Authorization") authHeader:String,@Body message:MessageSend):Call<Message> + @GET("/api/message/myMessages") + fun getNewMessages(@Header("Authorization") authHeader:String):Call<MutableList<MessageReceive>?> @GET("/api/user/history") fun getMyHistory(@Header("Authorization") authHeader:String):Call<MutableList<PostPreview>> //@POST("putanja") diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/chat/DBHelper.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/chat/DBHelper.kt index be88ad3..479b9cb 100644 --- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/chat/DBHelper.kt +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/chat/DBHelper.kt @@ -106,8 +106,12 @@ class DBHelper : } } } - fun getMessages(userId:String): MutableList<Message>? { - var sql="SELECT * FROM "+ MESSAGES_TABLE_NAME+" WHERE senderId='"+userId+"' OR receiverId='"+userId+"'" + fun getMessages(userId:String, self:Boolean=false): MutableList<Message>? { + var sql:String + if(!self) + sql="SELECT * FROM "+ MESSAGES_TABLE_NAME+" WHERE senderId='"+userId+"' OR receiverId='"+userId+"'" + else + sql="SELECT * FROM "+ MESSAGES_TABLE_NAME+" WHERE senderId='"+userId+"' AND receiverId='"+userId+"'" var cursor=db?.rawQuery(sql,null) if(cursor?.count!! >0){ var messagesList:MutableList<Message> =mutableListOf() 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 07a9d3e..d091c5d 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 @@ -2,6 +2,7 @@ package com.example.brzodolokacije.chat import android.app.Activity import android.util.Log +import com.auth0.android.jwt.JWT import com.exam.DBHelper import com.example.brzodolokacije.Models.Message import com.example.brzodolokacije.Models.MessageReceive @@ -24,7 +25,8 @@ 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,message.senderId,message.messagge,message.timestamp),false) + message:MessageReceive->dbHelper.addMessage(Message(message.senderId+message.timestamp,message.senderId, + JWT(SharedPreferencesHelper.getValue("jwt",activity)!!).claims["id"]?.asString()!!,message.messagge,message.timestamp),false) }, MessageReceive::class.java ) |