aboutsummaryrefslogtreecommitdiff
path: root/Client/BrzoDoLokacije/app/src/main/java/com/example
diff options
context:
space:
mode:
Diffstat (limited to 'Client/BrzoDoLokacije/app/src/main/java/com/example')
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/MonthViewsAdapter.kt63
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/MyPostsAdapter.kt10
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/FragmentProfileStatistics.kt77
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentMyProfileInfo.kt12
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentProfile.kt2
-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/Statistics.kt18
7 files changed, 170 insertions, 14 deletions
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/MonthViewsAdapter.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/MonthViewsAdapter.kt
new file mode 100644
index 0000000..240deb0
--- /dev/null
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/MonthViewsAdapter.kt
@@ -0,0 +1,63 @@
+package com.example.brzodolokacije.Adapters
+
+import android.app.Activity
+import android.view.LayoutInflater
+import android.view.ViewGroup
+import androidx.recyclerview.widget.RecyclerView
+import com.example.brzodolokacije.Models.MonthlyViews
+import com.example.brzodolokacije.databinding.SingleDateViewBinding
+
+class MonthViewsAdapter (val activity: Activity, val items : MutableList<MonthlyViews>)
+ : RecyclerView.Adapter<MonthViewsAdapter.ViewHolder>() {
+
+
+ private lateinit var binding: SingleDateViewBinding
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+ val inflater = LayoutInflater.from(parent.context)
+ binding = SingleDateViewBinding.inflate(inflater, parent, false)
+ return ViewHolder(binding)
+ }
+
+
+
+
+ override fun getItemCount() = items.size
+ inner class ViewHolder(itemView: SingleDateViewBinding) : RecyclerView.ViewHolder(itemView.root) {
+ fun bind(item: MonthlyViews) {
+ binding.apply {
+ tvMonth.text=numberToMonthName(item.month)
+ tvMonthViews.text=item.views.toString()
+
+ }
+ }
+ }
+
+ override fun onBindViewHolder(holder: ViewHolder, position: Int) {
+ return holder.bind(items[position])
+
+ }
+ fun numberToMonthName(number:Int):String{
+ var text=""
+ when (number) {
+ 1 -> text="Januar"
+ 2 -> text="Februar"
+ 3 -> text="Mart"
+ 4 -> text="April"
+ 5 -> text="Maj"
+ 6 -> text="Jun"
+ 7 -> text="Jul"
+ 8 -> text="Avgust"
+ 9 -> text="Septembar"
+ 10 -> text="Oktobar"
+ 11 -> text="Novembar"
+ 12 -> text="Decembar"
+ else -> {
+ text = "nedefinisan"
+ }
+ }
+
+ return text
+
+ }
+
+}
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/MyPostsAdapter.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/MyPostsAdapter.kt
index e557e02..de7d619 100644
--- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/MyPostsAdapter.kt
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Adapters/MyPostsAdapter.kt
@@ -2,12 +2,9 @@ package com.example.brzodolokacije.Adapters
import android.app.Activity
import android.content.Intent
-import android.graphics.BitmapFactory
-import android.os.AsyncTask
import android.os.Bundle
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.ActivitySinglePost
@@ -17,11 +14,6 @@ import com.example.brzodolokacije.Models.PostPreview
import com.example.brzodolokacije.Services.RetrofitHelper
import com.example.brzodolokacije.Services.SharedPreferencesHelper
import com.example.brzodolokacije.databinding.PostPreviewBinding
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.launch
-import okhttp3.ResponseBody
-import retrofit2.Call
-import retrofit2.Response
class MyPostsAdapter (val activity:Activity,val items : MutableList<PostPreview>)
@@ -29,8 +21,6 @@ class MyPostsAdapter (val activity:Activity,val items : MutableList<PostPreview>
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: PostPreviewBinding
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val inflater = LayoutInflater.from(parent.context)
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/FragmentProfileStatistics.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/FragmentProfileStatistics.kt
index 2ef4d5f..fb4c563 100644
--- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/FragmentProfileStatistics.kt
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/FragmentProfileStatistics.kt
@@ -1,15 +1,35 @@
package com.example.brzodolokacije
import android.os.Bundle
+import android.util.Log
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.widget.TextView
+import android.widget.Toast
+import androidx.recyclerview.widget.GridLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.example.brzodolokacije.Adapters.MonthViewsAdapter
+import com.example.brzodolokacije.Adapters.MyPostsAdapter
+import com.example.brzodolokacije.Models.MonthlyViews
+import com.example.brzodolokacije.Models.Statistics
+import com.example.brzodolokacije.Models.UserReceive
+import com.example.brzodolokacije.Services.RetrofitHelper
+import com.example.brzodolokacije.Services.SharedPreferencesHelper
+import retrofit2.Call
+import retrofit2.Response
class FragmentProfileStatistics : Fragment() {
-
+ private var stats:Statistics?=null
+ private var username:String?=null
+ private lateinit var totalViews:TextView
+ private lateinit var numberOfRatings:TextView
+ private lateinit var averageRatings:TextView
+ private lateinit var numberOfFavourite:TextView
+ private lateinit var rcMonths:RecyclerView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -19,8 +39,59 @@ class FragmentProfileStatistics : Fragment() {
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
- // Inflate the layout for this fragment
- return inflater.inflate(R.layout.fragment_profile_statistics, container, false)
+ var view=inflater.inflate(R.layout.fragment_profile_statistics, container, false)
+ username=this.requireArguments().getString("username")
+ totalViews=view.findViewById(R.id.tvProfileStatisticsViews)
+ numberOfRatings=view.findViewById(R.id.tvProfileStatisticsRatingNumber)
+ averageRatings=view.findViewById(R.id.tvProfileStatisticsAverageRating)
+ numberOfFavourite=view.findViewById(R.id.tvProfileStatisticsFavouriteNumber)
+ rcMonths=view.findViewById(R.id.rvFragmentProfileStatisticsMonths)
+
+
+
+ loadStats()
+
+ return view
+ }
+
+
+ fun loadStats(){
+ val authApi= RetrofitHelper.getInstance()
+ val token= SharedPreferencesHelper.getValue("jwt", requireActivity())
+ val request=authApi.getUserStatsFromUsername("Bearer "+token,username!!)
+
+ request.enqueue(object : retrofit2.Callback<Statistics?> {
+ override fun onResponse(call: Call<Statistics?>, response: Response<Statistics?>) {
+ if(response.isSuccessful()){
+ stats=response.body()
+ loadText()
+ loadMonths()
+
+
+ }
+ }
+ override fun onFailure(call: Call<Statistics?>, t: Throwable) {
+ Toast.makeText(
+ activity, t.toString(), Toast.LENGTH_LONG
+ ).show();
+ }
+ })
+
+ }
+ fun loadText(){
+ totalViews.text=stats!!.totalViews.toString()
+ numberOfRatings.text=stats!!.numberOfRatingsOnPosts.toString()
+ averageRatings.text=stats!!.averagePostRatingOnPosts.toString()
+ numberOfFavourite.text=stats!!.numberOfFavouritePosts.toString()
+ }
+ private fun loadMonths(){
+ rcMonths.apply {
+ layoutManager= GridLayoutManager(requireContext(),1, GridLayoutManager.HORIZONTAL,false)
+ adapter= MonthViewsAdapter(requireActivity(),
+ stats!!.monthlyViews as MutableList<MonthlyViews>
+ )
+
+ }
}
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentMyProfileInfo.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentMyProfileInfo.kt
index 0b0ad55..5d1530d 100644
--- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentMyProfileInfo.kt
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentMyProfileInfo.kt
@@ -49,7 +49,17 @@ class FragmentMyProfileInfo : Fragment() {
val manager: androidx.fragment.app.FragmentManager? = fragmentManager
val transaction: FragmentTransaction = manager!!.beginTransaction()
- transaction.replace(R.id.flFragmentProfileFragmentContainer, FragmentProfileStatistics())
+
+ var fragment:FragmentProfileStatistics=FragmentProfileStatistics()
+ val bundle = Bundle()
+ var parentFragment:FragmentProfile=parentFragment as FragmentProfile
+ var username=parentFragment.usernameStringSend
+ bundle.putString("username", username)
+ fragment.arguments=bundle
+
+
+
+ transaction.replace(R.id.flFragmentProfileFragmentContainer,fragment )
transaction.commit()
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentProfile.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentProfile.kt
index 6fe4678..a9858e2 100644
--- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentProfile.kt
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentProfile.kt
@@ -60,6 +60,7 @@ class FragmentProfile : Fragment(com.example.brzodolokacije.R.layout.fragment_pr
private lateinit var profilePicturePlus: MaterialButton
private lateinit var showFollowers: TextView
private lateinit var showFollowing: TextView
+ public var usernameStringSend:String?=null
override fun onCreateView(
@@ -208,6 +209,7 @@ class FragmentProfile : Fragment(com.example.brzodolokacije.R.layout.fragment_pr
private fun setUserInfo(user:UserReceive){
name.setText(user.name)
username.setText("@"+user.username)
+ usernameStringSend=user.username
postsCount.setText(user.postcount.toString())
Log.d("follno",user.followersCount.toString())
Log.d("follno","helllllllllllllllllllllppppppppppppppppppppppppppppppp")
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 960c56d..f6dfdcf 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
@@ -124,5 +124,7 @@ interface IBackendApi {
@POST("/api/user/changePass")
fun changePass(@Header("Authorization") authHeader:String):Call<Int>
+ @GET("/api/user/{username}/profile/stats")
+ fun getUserStatsFromUsername(@Header("Authorization") authHeader:String,@Path("username") username:String):Call<Statistics>
} \ No newline at end of file
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/Statistics.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/Statistics.kt
new file mode 100644
index 0000000..4466e05
--- /dev/null
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/Statistics.kt
@@ -0,0 +1,18 @@
+package com.example.brzodolokacije.Models
+
+import android.os.Parcelable
+import kotlinx.android.parcel.Parcelize
+data class Statistics(
+ var totalViews:Int,
+ var numberOfPosts:Int,
+ var numberOfRatingsOnPosts:Int,
+ var averagePostRatingOnPosts:Double,
+ var monthlyViews:List<MonthlyViews>,
+ var numberOfFavouritePosts:Int
+)
+@Parcelize
+data class MonthlyViews(
+ var month:Int,
+ var views:Int
+):Parcelable
+