diff options
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)      }  | 
