aboutsummaryrefslogtreecommitdiff
path: root/Client
diff options
context:
space:
mode:
authorJelena Petrovic <jelenapetrovic.7119@gmail.com>2022-11-13 19:43:26 +0100
committerJelena Petrovic <jelenapetrovic.7119@gmail.com>2022-11-13 19:43:26 +0100
commitcf4a1d64ecbdb9f8d400905e45c3d528ce4e1648 (patch)
tree90b9bc18795931d72f9fd99e7a391ff6ede33ef7 /Client
parentc2617ba1bb0481c045a161c7e1acc841ec169bf5 (diff)
Dodati komentari, dodavanje i pregled #31
Diffstat (limited to 'Client')
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivitySinglePost.kt107
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/CommentsAdapter.kt38
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Interfaces/IBackendApi.kt13
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/Post.kt18
-rw-r--r--Client/BrzoDoLokacije/app/src/main/res/layout/activity_single_post.xml51
-rw-r--r--Client/BrzoDoLokacije/app/src/main/res/layout/single_comment.xml22
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