diff options
5 files changed, 68 insertions, 5 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 992f09f..c824cf3 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 @@ -6,6 +6,7 @@ import android.widget.ImageButton  import androidx.appcompat.app.AppCompatActivity  import androidx.recyclerview.widget.LinearLayoutManager  import androidx.recyclerview.widget.RecyclerView +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout  import com.exam.DBHelper  import com.example.brzodolokacije.Adapters.ChatPreviewsAdapter  import com.example.brzodolokacije.Models.ChatPreview @@ -13,7 +14,7 @@ import com.example.brzodolokacije.R  import com.example.brzodolokacije.chat.SignalRListener  import com.example.brzodolokacije.databinding.ActivityChatBinding -class ChatActivity : AppCompatActivity() { +class ChatActivity : AppCompatActivity(), SwipeRefreshLayout.OnRefreshListener {      private var dbConnection:DBHelper?=null      lateinit var binding: ActivityChatBinding @@ -22,6 +23,7 @@ class ChatActivity : AppCompatActivity() {      var adapterVar:ChatPreviewsAdapter?=null      var layoutVar:LinearLayoutManager?=null      var items:MutableList<ChatPreview>?= mutableListOf() +    private var swipeRefreshLayout: SwipeRefreshLayout?=null      override fun onCreate(savedInstanceState: Bundle?) {          super.onCreate(savedInstanceState) @@ -32,6 +34,18 @@ class ChatActivity : AppCompatActivity() {          setListeners()          setRecyclerView()          requestForChats() +        swipeRefreshLayout = binding.swipeContainer +        swipeRefreshLayout?.setOnRefreshListener(this@ChatActivity) +        swipeRefreshLayout?.setColorSchemeResources( +            R.color.purple_200, +            R.color.teal_200, +            R.color.dark_blue_transparent, +            R.color.purple_700 +        ) +        swipeRefreshLayout?.post(kotlinx.coroutines.Runnable { +            swipeRefreshLayout?.isRefreshing=true +            requestForChats() +        })      }      fun setListeners(){ @@ -58,5 +72,10 @@ class ChatActivity : AppCompatActivity() {          recyclerView?.setHasFixedSize(true)          recyclerView?.layoutManager=layoutVar          recyclerView?.adapter=adapterVar +        swipeRefreshLayout?.isRefreshing=false +    } + +    override fun onRefresh() { +        requestForChats()      }  }
\ 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 d523485..84771a8 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 @@ -29,7 +29,7 @@ class ChatActivityConversation : AppCompatActivity() {      var layoutVar: RecyclerView.LayoutManager?=null      lateinit var binding:ActivityChatConversationBinding      var userId:String?=null -    var receiverUsername:String?="jelena" +    var receiverUsername:String?=null      var dbConnection: DBHelper?=null      var webSocketConnection:SignalRListener?=null      var items:MutableList<Message>?=mutableListOf() @@ -39,6 +39,7 @@ class ChatActivityConversation : AppCompatActivity() {          binding= ActivityChatConversationBinding.inflate(layoutInflater)          setContentView(binding.root)          userId=intent.extras?.get("userId").toString() +        receiverUsername=intent.extras?.get("username").toString()          dbConnection=DBHelper.getInstance(this@ChatActivityConversation)          setHeader()          setRecyclerView() @@ -136,7 +137,7 @@ class ChatActivityConversation : AppCompatActivity() {              binding.tvFragmentTitle.forceLayout()          }          else{ -            binding.tvFragmentTitle.text=userId +            binding.tvFragmentTitle.text=receiverUsername              binding.tvFragmentTitle.invalidate()              binding.cvParentUsername.visibility= View.GONE              binding.cvParentUsername.forceLayout() 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 b63cb2f..94a72f3 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 @@ -4,19 +4,32 @@ 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.ChatActivityConversation +import com.example.brzodolokacije.Interfaces.IBackendApi  import com.example.brzodolokacije.Models.ChatPreview +import com.example.brzodolokacije.Models.UserReceive +import com.example.brzodolokacije.Services.RetrofitHelper +import com.example.brzodolokacije.Services.SharedPreferencesHelper  import com.example.brzodolokacije.databinding.ChatPreviewBinding +import kotlinx.android.synthetic.main.chat_preview.view.* +import retrofit2.Call +import retrofit2.Response  class ChatPreviewsAdapter (val items : MutableList<ChatPreview>,val activity:Activity)      : RecyclerView.Adapter<ChatPreviewsAdapter.ViewHolder>(){      //constructer has one argument - list of objects that need to be displayed      //it is bound to xml of single item +    private var api: IBackendApi?=null +    private var token:String?=null      private lateinit var binding: ChatPreviewBinding      override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {          val inflater = LayoutInflater.from(parent.context)          binding=ChatPreviewBinding.inflate(inflater,parent,false) +        api=RetrofitHelper.getInstance() +        token=SharedPreferencesHelper.getValue("jwt",activity)          return ViewHolder(binding)      }      override fun onBindViewHolder(holder: ViewHolder, position: Int){ @@ -25,6 +38,7 @@ class ChatPreviewsAdapter (val items : MutableList<ChatPreview>,val activity:Act          holder.itemView.setOnClickListener {              val intent: Intent = Intent(activity, ChatActivityConversation::class.java)              intent.putExtra("userId",items[position].userId) +            intent.putExtra("username",holder.itemView.tvUsername.text)              activity.startActivity(intent)          }      } @@ -32,7 +46,33 @@ class ChatPreviewsAdapter (val items : MutableList<ChatPreview>,val activity:Act      inner class ViewHolder(itemView : ChatPreviewBinding) : RecyclerView.ViewHolder(itemView.root){          fun bind(item : ChatPreview){              binding.apply { -                tvUsername.text=item.userId +                val request2=api?.getProfileFromId("Bearer "+token, +                    item.userId +                ) +                request2?.enqueue(object : retrofit2.Callback<UserReceive?> { +                    override fun onResponse(call: Call<UserReceive?>, response: Response<UserReceive?>) { +                        if(response.isSuccessful()){ +                            //zahtev da se posalje poruka +                            var user=response.body()!! +                            tvUsername.text=user.username +                            if(user.pfp!=null) { +                                Glide.with(activity) +                                    .load(RetrofitHelper.baseUrl + "/api/post/image/" + user.pfp!!._id) +                                    .into(ivUserImage) +                            } +                        } +                        else{ +                            Toast.makeText(activity,"los id", +                                Toast.LENGTH_LONG).show() +                            tvUsername.text="nije nadjen korisnik" +                        } +                    } + +                    override fun onFailure(call: Call<UserReceive?>, t: Throwable) { +                        Toast.makeText(activity,"neuspesan zahtev", +                            Toast.LENGTH_LONG).show() +                    } +                })              }          }      } 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 f7bb9b6..8fb7b4d 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 @@ -78,5 +78,7 @@ interface IBackendApi {      @POST("/api/user{id}/addFollower")      fun addFollower(@Header("Authorization") authHeader:String,@Path("id") id:String):Call<UserReceive> +    @GET("/api/user/{id}/id/profile") +    fun getProfileFromId(@Header("Authorization") authHeader:String,@Path("id") username:String):Call<UserReceive>  }
\ No newline at end of file diff --git a/Client/BrzoDoLokacije/app/src/main/res/layout/chat_preview.xml b/Client/BrzoDoLokacije/app/src/main/res/layout/chat_preview.xml index 95c036a..35431ff 100644 --- a/Client/BrzoDoLokacije/app/src/main/res/layout/chat_preview.xml +++ b/Client/BrzoDoLokacije/app/src/main/res/layout/chat_preview.xml @@ -6,7 +6,8 @@      <androidx.appcompat.widget.AppCompatImageView          android:layout_width="50dp"          android:layout_height="50dp" -        android:id="@+id/ivUserImage"/> +        android:id="@+id/ivUserImage" +        android:src="@drawable/ic_nav_profile"/>      <TextView          android:layout_width="wrap_content"          android:layout_height="match_parent"  | 
