From 2404102a5d5a5575ba4e8000da0f90e627d9a1d5 Mon Sep 17 00:00:00 2001 From: Ognjen Cirkovic Date: Mon, 21 Nov 2022 22:34:00 +0100 Subject: Dadat pregled kada se otvori objava. Napravljen izgled za prikas istorije pregleda objava. Omogucen prikaz liste istorije pregleda objava na profilu korisnika. --- .../brzodolokacije/Activities/ActivityAddPost.kt | 4 +- .../Activities/ActivitySinglePost.kt | 16 +++++ .../brzodolokacije/Adapters/PostHistoryAdapter.kt | 61 ++++++++++++++++ .../brzodolokacije/Adapters/ShowPostsAdapter.kt | 11 --- .../Fragments/FragmentMyRecensions.kt | 81 +++++++++++++--------- .../brzodolokacije/Interfaces/IBackendApi.kt | 2 + .../java/com/example/brzodolokacije/Models/Post.kt | 3 +- .../src/main/res/layout/fragment_my_recensions.xml | 26 +++++-- .../app/src/main/res/layout/fragment_profile.xml | 2 +- .../src/main/res/layout/single_post_history.xml | 75 ++++++++++++++++++++ 10 files changed, 227 insertions(+), 54 deletions(-) create mode 100644 Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/PostHistoryAdapter.kt create mode 100644 Client/BrzoDoLokacije/app/src/main/res/layout/single_post_history.xml (limited to 'Client') diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivityAddPost.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivityAddPost.kt index c247743..2d305a6 100644 --- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivityAddPost.kt +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivityAddPost.kt @@ -260,7 +260,9 @@ class ActivityAddPost : AppCompatActivity() { } var countryName=loc1[0].countryName var address="todo not possible in query" - var city=loc1[0].adminArea//not possible + var city="its null" + if(loc1[0].adminArea!=null) + city=loc1[0].adminArea//not possible var loc:Location=Location("",locationString,city,countryName,address,latitude,longitude,LocationType.GRAD) var jwtString= SharedPreferencesHelper.getValue("jwt",this) var data=api.addLocation("Bearer "+jwtString,loc) 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 c030eda..f875949 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 @@ -132,6 +132,7 @@ class ActivitySinglePost : AppCompatActivity() { Toast.makeText(this@ActivitySinglePost,"Unesite tekst komentara.",Toast.LENGTH_LONG).show() } } + addView() } @@ -229,5 +230,20 @@ class ActivitySinglePost : AppCompatActivity() { tvDescription.invalidate() } } + fun addView() { + var token= SharedPreferencesHelper.getValue("jwt", this).toString() + val Api= RetrofitHelper.getInstance() + val request=Api.addView("Bearer "+token,post._id) + request.enqueue(object : retrofit2.Callback { + override fun onResponse(call: Call, response: Response) { + + } + + override fun onFailure(call: Call, t: Throwable) { + + } + }) + } + } diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/PostHistoryAdapter.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/PostHistoryAdapter.kt new file mode 100644 index 0000000..db3fc2e --- /dev/null +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/PostHistoryAdapter.kt @@ -0,0 +1,61 @@ +package com.example.brzodolokacije.Adapters + +import android.app.Activity +import android.content.Intent +import android.os.Bundle +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import com.example.brzodolokacije.Activities.ActivitySinglePost +import com.example.brzodolokacije.Interfaces.IBackendApi +import com.example.brzodolokacije.Models.LocationType +import com.example.brzodolokacije.Models.PostPreview +import com.example.brzodolokacije.Services.RetrofitHelper +import com.example.brzodolokacije.Services.SharedPreferencesHelper +import com.example.brzodolokacije.databinding.SinglePostHistoryBinding + + +class PostHistoryAdapter (val activity:Activity,val items : MutableList) + : RecyclerView.Adapter() { + private lateinit var token: String + private lateinit var imageApi: IBackendApi + + //constructer has one argument - list of objects that need to be displayed + //it is bound to xml of single item + private lateinit var binding: SinglePostHistoryBinding + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + val inflater = LayoutInflater.from(parent.context) + imageApi= RetrofitHelper.getInstance() + token= SharedPreferencesHelper.getValue("jwt", activity).toString() + binding = SinglePostHistoryBinding.inflate(inflater, parent, false) + return ViewHolder(binding) + } + + + + + override fun getItemCount() = items.size + inner class ViewHolder(itemView: SinglePostHistoryBinding) : RecyclerView.ViewHolder(itemView.root) { + fun bind(item: PostPreview) { + binding.apply { + tvTitleSinglePostHistory.text = item.location.name + tvLocationParentSinglePostHistory.text = "22.11.2022" + tvLocationTypeSinglePostHistory.text = item.location.country + + } + } + } + + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + holder.bind(items[position]) + holder.itemView.setOnClickListener { + //Toast.makeText(activity,item._id,Toast.LENGTH_LONG).show() + val intent:Intent = Intent(activity,ActivitySinglePost::class.java) + var b=Bundle() + items[position].location.type=LocationType.ADA + b.putParcelable("selectedPost", items[position]) + intent.putExtras(b) + activity.startActivity(intent) + } + } +} diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/ShowPostsAdapter.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/ShowPostsAdapter.kt index e09cd06..0bd625f 100644 --- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/ShowPostsAdapter.kt +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/ShowPostsAdapter.kt @@ -65,17 +65,6 @@ class ShowPostsAdapter (val activity:Activity,val items : MutableList { - override fun onResponse(call: Call, response: Response) { - - } - - override fun onFailure(call: Call, t: Throwable) { - - } - }) //--------------------------------------------------------------- b.putParcelable("selectedPost",getItem(position)!!) intent.putExtras(b) diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentMyRecensions.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentMyRecensions.kt index ce8679a..c5fa6ec 100644 --- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentMyRecensions.kt +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentMyRecensions.kt @@ -5,56 +5,69 @@ import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.recyclerview.widget.GridLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.example.brzodolokacije.Adapters.MyPostsAdapter +import com.example.brzodolokacije.Adapters.PostHistoryAdapter +import com.example.brzodolokacije.Models.PostPreview import com.example.brzodolokacije.R +import com.example.brzodolokacije.Services.RetrofitHelper +import com.example.brzodolokacije.Services.SharedPreferencesHelper +import retrofit2.Call +import retrofit2.Callback +import retrofit2.Response -// TODO: Rename parameter arguments, choose names that match -// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER -private const val ARG_PARAM1 = "param1" -private const val ARG_PARAM2 = "param2" -/** - * A simple [Fragment] subclass. - * Use the [FragmentMyRecensions.newInstance] factory method to - * create an instance of this fragment. - */ class FragmentMyRecensions : Fragment() { - // TODO: Rename and change types of parameters - private var param1: String? = null - private var param2: String? = null + + private lateinit var posts : MutableList + private lateinit var rvPosts: RecyclerView override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - arguments?.let { - param1 = it.getString(ARG_PARAM1) - param2 = it.getString(ARG_PARAM2) - } + } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { - // Inflate the layout for this fragment - return inflater.inflate(R.layout.fragment_my_recensions, container, false) + + val view =inflater.inflate(R.layout.fragment_my_recensions, container, false) + + rvPosts=view.findViewById(R.id.rvFragmentMyRecensionPostHistory) as RecyclerView + getPosts() + + return view + } + fun getPosts(){ + val api = RetrofitHelper.getInstance() + val token= SharedPreferencesHelper.getValue("jwt", requireActivity()) + val data=api.getMyHistory("Bearer "+token) - companion object { - /** - * Use this factory method to create a new instance of - * this fragment using the provided parameters. - * - * @param param1 Parameter 1. - * @param param2 Parameter 2. - * @return A new instance of fragment FragmentMyRecensions. - */ - // TODO: Rename and change types and number of parameters - @JvmStatic - fun newInstance(param1: String, param2: String) = - FragmentMyRecensions().apply { - arguments = Bundle().apply { - putString(ARG_PARAM1, param1) - putString(ARG_PARAM2, param2) + data.enqueue(object : Callback> { + override fun onResponse( + call: Call>, + response: Response> + ) { + if (response.body() == null) { + return } + posts = response.body()!!.toMutableList() + loadPosts() + } + override fun onFailure(call: Call>, t: Throwable) { + } + }) } + private fun loadPosts(){//most viewed + rvPosts.apply { + layoutManager= GridLayoutManager(requireContext(),1, GridLayoutManager.VERTICAL,false) + adapter= PostHistoryAdapter(requireActivity(),posts) + + } + +} } \ 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 1ba6b53..d8daf14 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 + @GET("/api/user/history") + fun getMyHistory(@Header("Authorization") authHeader:String):Call> //@POST("putanja") //fun add(@Body obj:Post,@Header("Authorization") authHeader:String):Call } \ 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 a292160..e2e9209 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 @@ -34,7 +34,8 @@ data class PostPreview ( var views:Int, var ratings:Float, var comments:List?, - var images:List + var images:List, + var tags:List? //nedostaju datum i vreme kreiranja ):Parcelable diff --git a/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_my_recensions.xml b/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_my_recensions.xml index d5452b9..72706e0 100644 --- a/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_my_recensions.xml +++ b/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_my_recensions.xml @@ -1,14 +1,28 @@ - - - + + + android:layout_height="wrap_content" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/materialDivider" + android:layout_marginHorizontal="16dp"/> - \ No newline at end of file + \ No newline at end of file diff --git a/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_profile.xml b/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_profile.xml index c75e1e4..138d068 100644 --- a/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_profile.xml +++ b/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_profile.xml @@ -231,7 +231,7 @@ android:layout_marginTop="4dp" android:backgroundTint="#FFFFFF" android:stateListAnimator="@null" - android:text="Recenzije" + android:text="Istorija" android:textColor="@color/cardview_dark_background" app:layout_constraintStart_toEndOf="@+id/btnFragmentProfileShowMyPosts" app:layout_constraintTop_toBottomOf="@+id/tvFragmentProfileInfoContainer" /> diff --git a/Client/BrzoDoLokacije/app/src/main/res/layout/single_post_history.xml b/Client/BrzoDoLokacije/app/src/main/res/layout/single_post_history.xml new file mode 100644 index 0000000..12c29ee --- /dev/null +++ b/Client/BrzoDoLokacije/app/src/main/res/layout/single_post_history.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file -- cgit v1.2.3