aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Backend/Api/Api/Models/Post.cs1
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivityAddPost.kt4
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivitySinglePost.kt16
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/PostHistoryAdapter.kt61
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/ShowPostsAdapter.kt11
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentMyRecensions.kt81
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Interfaces/IBackendApi.kt2
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/Post.kt3
-rw-r--r--Client/BrzoDoLokacije/app/src/main/res/layout/fragment_my_recensions.xml26
-rw-r--r--Client/BrzoDoLokacije/app/src/main/res/layout/fragment_profile.xml2
-rw-r--r--Client/BrzoDoLokacije/app/src/main/res/layout/single_post_history.xml75
11 files changed, 228 insertions, 54 deletions
diff --git a/Backend/Api/Api/Models/Post.cs b/Backend/Api/Api/Models/Post.cs
index baadc24..1a4129f 100644
--- a/Backend/Api/Api/Models/Post.cs
+++ b/Backend/Api/Api/Models/Post.cs
@@ -19,6 +19,7 @@ namespace Api.Models
public List<Comment> comments { get; set; }
public List<File> images { get; set; }
public List<string>? tags { get; set; }
+
}
public class PostReceive
{
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<PostPreview?> {
+ override fun onResponse(call: Call<PostPreview?>, response: Response<PostPreview?>) {
+
+ }
+
+ override fun onFailure(call: Call<PostPreview?>, 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<PostPreview>)
+ : RecyclerView.Adapter<PostHistoryAdapter.ViewHolder>() {
+ 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<PostPrevie
var b=Bundle()
//getItem(position)!!.location.type=LocationType.ADA
//--------------------------------------------------------------- call back to add view tick
- val Api= RetrofitHelper.getInstance()
- val request=Api.addView("Bearer "+token,getItem(position)!!._id)
- request.enqueue(object : retrofit2.Callback<PostPreview?> {
- override fun onResponse(call: Call<PostPreview?>, response: Response<PostPreview?>) {
-
- }
-
- override fun onFailure(call: Call<PostPreview?>, 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<PostPreview>
+ 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<MutableList<PostPreview>> {
+ override fun onResponse(
+ call: Call<MutableList<PostPreview>>,
+ response: Response<MutableList<PostPreview>>
+ ) {
+ if (response.body() == null) {
+ return
}
+ posts = response.body()!!.toMutableList<PostPreview>()
+ loadPosts()
+ }
+ override fun onFailure(call: Call<MutableList<PostPreview>>, 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<Message>
+ @GET("/api/user/history")
+ fun getMyHistory(@Header("Authorization") authHeader:String):Call<MutableList<PostPreview>>
//@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 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<CommentSend>?,
- var images:List<PostImage>
+ var images:List<PostImage>,
+ var tags:List<String>?
//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 @@
<?xml version="1.0" encoding="utf-8"?>
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Fragments.FragmentMyRecensions">
- <!-- TODO: Update blank fragment layout -->
- <TextView
+
+ <com.google.android.material.divider.MaterialDivider
+ android:id="@+id/materialDivider"
+ android:layout_width="match_parent"
+ android:layout_height="50dp"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ android:visibility="invisible"/>
+
+ <androidx.recyclerview.widget.RecyclerView
+ android:id="@+id/rvFragmentMyRecensionPostHistory"
android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:text="Moje recenzije" />
+ 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"/>
-</FrameLayout> \ No newline at end of file
+</androidx.constraintlayout.widget.ConstraintLayout> \ 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 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_margin="0dp"
+ android:background="@drawable/rounded_picture_background"
+ android:clipToOutline="true"
+ >
+
+
+
+
+ <View
+ android:id="@+id/vBannerSinglePostHistory"
+ android:layout_width="match_parent"
+ android:layout_height="80dp"
+ android:background="@color/dark_blue_transparent"
+ android:outlineProvider="background"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHorizontal_bias="0.0"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintVertical_bias="0.0"
+ tools:layout_editor_absoluteX="10dp"
+ android:layout_marginTop="5dp"
+ >
+
+
+ </View>
+
+ <TextView
+ android:id="@+id/tvTitleSinglePostHistory"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:gravity="top|left"
+ android:text="Naslov"
+ android:textColor="@color/white"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHorizontal_bias="0.076"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="@+id/vBannerSinglePostHistory"
+ app:layout_constraintVertical_bias="0.18" />
+
+ <TextView
+ android:id="@+id/tvLocationTypeSinglePostHistory"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="Tip lokacije"
+ android:textColor="@color/white"
+ app:layout_constraintBottom_toBottomOf="@+id/vBannerSinglePostHistory"
+ app:layout_constraintEnd_toStartOf="@+id/tvLocationParentSinglePostHistory"
+ app:layout_constraintHorizontal_bias="0.112"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="@+id/vBannerSinglePostHistory"
+ app:layout_constraintVertical_bias="0.721" />
+
+ <TextView
+ android:id="@+id/tvLocationParentSinglePostHistory"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:text="22.11.2022"
+ android:textAlignment="viewEnd"
+ android:textColor="@color/white"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHorizontal_bias="0.952"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="@+id/vBannerSinglePostHistory"
+ app:layout_constraintVertical_bias="0.737" />
+
+</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file