diff options
author | Jelena Petrovic <jelenapetrovic.7119@gmail.com> | 2022-11-13 19:43:26 +0100 |
---|---|---|
committer | Jelena Petrovic <jelenapetrovic.7119@gmail.com> | 2022-11-13 19:43:26 +0100 |
commit | cf4a1d64ecbdb9f8d400905e45c3d528ce4e1648 (patch) | |
tree | 90b9bc18795931d72f9fd99e7a391ff6ede33ef7 /Client | |
parent | c2617ba1bb0481c045a161c7e1acc841ec169bf5 (diff) |
Dodati komentari, dodavanje i pregled #31
Diffstat (limited to 'Client')
6 files changed, 224 insertions, 25 deletions
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivitySinglePost.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivitySinglePost.kt index 69a2bed..8dd7eea 100644 --- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivitySinglePost.kt +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivitySinglePost.kt @@ -1,36 +1,35 @@ package com.example.brzodolokacije.Activities -import android.content.res.Resources import android.os.Bundle -import android.os.Handler -import android.os.Looper import android.util.Log -import android.widget.ImageButton +import android.widget.Adapter import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView +import com.example.brzodolokacije.Adapters.CommentsAdapter import com.example.brzodolokacije.Adapters.PostImageAdapter -import com.example.brzodolokacije.Adapters.ShowPostsAdapter -import com.example.brzodolokacije.Models.PostImage -import com.example.brzodolokacije.Models.PostPreview -import com.example.brzodolokacije.Models.Rating -import com.example.brzodolokacije.Models.RatingReceive +import com.example.brzodolokacije.Models.* import com.example.brzodolokacije.R import com.example.brzodolokacije.Services.RetrofitHelper import com.example.brzodolokacije.Services.SharedPreferencesHelper import com.example.brzodolokacije.databinding.ActivitySinglePostBinding import okhttp3.ResponseBody +import okhttp3.internal.notifyAll import retrofit2.Call import retrofit2.Response class ActivitySinglePost : AppCompatActivity() { private lateinit var binding: ActivitySinglePostBinding - private var layoutManagerVar: RecyclerView.LayoutManager? = null - private var adapterVar: RecyclerView.Adapter<PostImageAdapter.ViewHolder>? = null - private var recyclerView: RecyclerView?=null + private var layoutManagerImages: RecyclerView.LayoutManager? = null + private var layoutManagerComments: RecyclerView.LayoutManager? = null + private var adapterImages: RecyclerView.Adapter<PostImageAdapter.ViewHolder>? = null + private var adapterComments: RecyclerView.Adapter<CommentsAdapter.ViewHolder>? = null + private var recyclerViewImages: RecyclerView?=null + private var recyclerViewComments: RecyclerView?=null private lateinit var post:PostPreview + private var comments:MutableList<CommentSend>?=mutableListOf() private var starNumber:Number=0 override fun onCreate(savedInstanceState: Bundle?) { @@ -38,20 +37,31 @@ class ActivitySinglePost : AppCompatActivity() { binding=ActivitySinglePostBinding.inflate(layoutInflater) setContentView(binding.root) post= intent.extras?.getParcelable("selectedPost")!! - //load data for the list //instantiate adapter and linearLayout - adapterVar= PostImageAdapter(this@ActivitySinglePost, post.images as MutableList<PostImage>) - layoutManagerVar= LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false) - recyclerView = binding.rvMain + adapterImages= PostImageAdapter(this@ActivitySinglePost, post.images as MutableList<PostImage>) + layoutManagerImages= LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false) + recyclerViewImages = binding.rvMain + buildRecyclerViewComments() + requestGetComments() + // set recyclerView attributes - recyclerView?.setHasFixedSize(true) - recyclerView?.layoutManager = layoutManagerVar - recyclerView?.adapter = adapterVar + recyclerViewImages?.setHasFixedSize(true) + recyclerViewImages?.layoutManager = layoutManagerImages + recyclerViewImages?.adapter = adapterImages loadTextComponents() setRatingListeners() } + fun buildRecyclerViewComments(){ + recyclerViewComments=binding.rvComments + adapterComments=CommentsAdapter(comments as MutableList<CommentSend>) + layoutManagerComments= LinearLayoutManager(this@ActivitySinglePost,LinearLayoutManager.VERTICAL,false) + recyclerViewComments!!.setHasFixedSize(true) + recyclerViewComments!!.layoutManager=layoutManagerComments + recyclerViewComments!!.adapter= adapterComments + } + fun setRatingListeners(){ val emptyStar=R.drawable.empty_star val fullStar=R.drawable.full_star @@ -109,7 +119,66 @@ class ActivitySinglePost : AppCompatActivity() { Toast.makeText(this,"poslato",Toast.LENGTH_SHORT).show() } } + binding.btnPostComment.setOnClickListener { + if(binding.NewComment.text.isNotEmpty()){ + val comment=CommentReceive(binding.NewComment.text.toString(),"") + requestAddComment(comment) + } + } + + } + + fun requestAddComment(comment:CommentReceive){ + val postApi= RetrofitHelper.getInstance() + val token= SharedPreferencesHelper.getValue("jwt", this@ActivitySinglePost) + val request=postApi.addComment("Bearer "+token,post._id,comment) + request.enqueue(object : retrofit2.Callback<ResponseBody?> { + override fun onResponse(call: Call<ResponseBody?>, response: Response<ResponseBody?>) { + if(response.isSuccessful){ + requestGetComments() + Toast.makeText( + this@ActivitySinglePost, "prosao zahtev", Toast.LENGTH_LONG + ).show() + }else{ + if(response.errorBody()!=null) + Log.d("main1",response.message().toString()) + } + + } + + override fun onFailure(call: Call<ResponseBody?>, t: Throwable) { + Log.d("main2",t.message.toString()) + } + }) + } + fun requestGetComments(){ + val postApi= RetrofitHelper.getInstance() + val token= SharedPreferencesHelper.getValue("jwt", this@ActivitySinglePost) + val request=postApi.getComments("Bearer "+token,post._id) + request.enqueue(object : retrofit2.Callback<MutableList<CommentSend>?> { + override fun onResponse(call: Call<MutableList<CommentSend>?>, response: Response<MutableList<CommentSend>?>) { + if(response.isSuccessful){ + comments= response.body()!! + if(comments!=null && comments!!.isNotEmpty()){ + buildRecyclerViewComments() + if(comments!=null) + binding.tvCommentCount.text=comments?.size.toString() + else + binding.tvCommentCount.text="0" + } + }else{ + if(response.errorBody()!=null) + Log.d("main1",response.message().toString()) + } + + + } + + override fun onFailure(call: Call<MutableList<CommentSend>?>, t: Throwable) { + Log.d("main2",t.message.toString()) + } + }) } fun requestAddRating(rating:RatingReceive){ diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/CommentsAdapter.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/CommentsAdapter.kt new file mode 100644 index 0000000..d43057f --- /dev/null +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/CommentsAdapter.kt @@ -0,0 +1,38 @@ +package com.example.brzodolokacije.Adapters + +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import com.example.brzodolokacije.Models.CommentSend +import com.example.brzodolokacije.databinding.SingleCommentBinding + +class CommentsAdapter (val items : MutableList<CommentSend>) + : RecyclerView.Adapter<CommentsAdapter.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: SingleCommentBinding + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + val inflater = LayoutInflater.from(parent.context) + binding=SingleCommentBinding.inflate(inflater,parent,false) + return ViewHolder(binding) + } + override fun onBindViewHolder(holder: ViewHolder, position: Int){ + //sets components of particular item + holder.bind(items[position]) + } + override fun getItemCount(): Int { + try{ + return items.size + }catch (e:Exception){ + return 0 + } + } + inner class ViewHolder(itemView : SingleCommentBinding) : RecyclerView.ViewHolder(itemView.root){ + fun bind(item : CommentSend){ + binding.apply { + tvCommentAuthor.text=item.username + tvCommentText.text=item.comment + } + } + } +}
\ No newline at end of file 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 ac13bca..cd23a65 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 @@ -1,13 +1,10 @@ package com.example.brzodolokacije.Interfaces +import com.example.brzodolokacije.Models.* import com.example.brzodolokacije.Models.Auth.JustMail import com.example.brzodolokacije.Models.Auth.Login import com.example.brzodolokacije.Models.Auth.Register import com.example.brzodolokacije.Models.Auth.ResetPass -import com.example.brzodolokacije.Models.Location -import com.example.brzodolokacije.Models.PostPreview -import com.example.brzodolokacije.Models.Rating -import com.example.brzodolokacije.Models.RatingReceive import okhttp3.MultipartBody import okhttp3.Request import okhttp3.RequestBody @@ -40,6 +37,12 @@ interface IBackendApi { ):Call<PostPreview> @POST("api/Post/posts/{id}/addrating") fun addRating(@Header("Authorization") authHeader:String,@Path("id") id:String,@Body rating: RatingReceive):Call<ResponseBody> - //@POST("putanja") + @POST("api/Post/posts/{id}/addcomment") + fun addComment(@Header("Authorization") authHeader:String,@Path("id") id:String,@Body rating: CommentReceive):Call<ResponseBody> + @GET("api/Post/posts/{id}/listcomments") + fun getComments(@Header("Authorization") authHeader:String,@Path("id") id:String):Call<MutableList<CommentSend>> + + +//@POST("putanja") //fun add(@Body obj:Post,@Header("Authorization") authHeader:String):Call<Post> }
\ No newline at end of file diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/Post.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/Post.kt index a1eb5d0..3bbcc0c 100644 --- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/Post.kt +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/Post.kt @@ -33,7 +33,7 @@ data class PostPreview ( var description:String, var views:Int, var ratings:Float, - var comments:List<Comment>?, + var comments:List<CommentSend>?, var images:List<PostImage> //nedostaju datum i vreme kreiranja ):Parcelable @@ -47,6 +47,22 @@ data class Comment ( var timeStamp: LocalDateTime ):Parcelable +@Parcelize +data class CommentSend( + var _id: String, + var userId: String, + var comment: String, + var parentId: String, + //var timestamp:LocalDateTime, + var username: String, + var replies: List<CommentSend>? +):Parcelable + +data class CommentReceive( + var comment: String, + var parentId: String +) + data class Rating( var useridval :String, var rating:Int diff --git a/Client/BrzoDoLokacije/app/src/main/res/layout/activity_single_post.xml b/Client/BrzoDoLokacije/app/src/main/res/layout/activity_single_post.xml index 9c30136..cbfc063 100644 --- a/Client/BrzoDoLokacije/app/src/main/res/layout/activity_single_post.xml +++ b/Client/BrzoDoLokacije/app/src/main/res/layout/activity_single_post.xml @@ -227,6 +227,57 @@ android:textColor="@color/black" /> </LinearLayout> + <androidx.constraintlayout.widget.ConstraintLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + app:layout_constraintTop_toBottomOf="@id/linearLayout2"> + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:id="@+id/postCommentLayout" + android:orientation="horizontal" + app:layout_constraintStart_toStartOf="parent" > + <EditText + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_weight="1" + android:hint="Unesite komentar ovde" + android:id="@+id/NewComment" + /> + + <ImageButton + android:id="@+id/btnPostComment" + android:layout_width="wrap_content" + android:layout_height="50dp" /> + </LinearLayout> + + + <TextView + android:id="@+id/tvCommentLabel" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + app:layout_constraintTop_toBottomOf="@id/postCommentLayout" + android:padding="@dimen/text_padding" + android:text="Komentari" + android:textStyle="bold" /> + + <TextView + android:id="@+id/tvCommentCount" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:padding="@dimen/text_padding" + app:layout_constraintTop_toBottomOf="@id/postCommentLayout" + android:text="3" + app:layout_constraintStart_toEndOf="@id/tvCommentLabel" /> + + <androidx.recyclerview.widget.RecyclerView + android:id="@+id/rvComments" + android:layout_width="match_parent" + android:layout_height="wrap_content" + app:layout_constraintTop_toBottomOf="@id/tvCommentLabel"> + + </androidx.recyclerview.widget.RecyclerView> + </androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout> diff --git a/Client/BrzoDoLokacije/app/src/main/res/layout/single_comment.xml b/Client/BrzoDoLokacije/app/src/main/res/layout/single_comment.xml new file mode 100644 index 0000000..f219ea2 --- /dev/null +++ b/Client/BrzoDoLokacije/app/src/main/res/layout/single_comment.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:padding="@dimen/component_padding" + xmlns:app="http://schemas.android.com/apk/res-auto"> + <TextView + android:id="@+id/tvCommentAuthor" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="autor" + android:textStyle="bold" + android:padding="@dimen/text_padding"/> + <TextView + android:id="@+id/tvCommentText" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="autor" + android:padding="@dimen/text_padding" + app:layout_constraintTop_toBottomOf="@id/tvCommentAuthor"/> + +</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file |