From c8eb6ba248aff872a4f4d2aa7ccde50aacad73a6 Mon Sep 17 00:00:00 2001 From: TAMARA JERINIC Date: Tue, 15 Nov 2022 14:41:34 +0100 Subject: Reorganizovana početna strana. Postavljen prikaz objava u zavisnosti od tipa lokacije na frontu. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../.idea/deploymentTargetDropDown.xml | 17 -- .../brzodolokacije/Fragments/FragmentHomePage.kt | 121 +++------- .../Fragments/FragmentHomePageMainScroll.kt | 263 +++++++++++++++++++++ .../Fragments/FragmentShowPostsByLocation.kt | 96 ++++++++ .../res/drawable/ic_baseline_arrow_back_24.xml | 5 + .../app/src/main/res/layout/fragment_home_page.xml | 213 ++--------------- .../res/layout/fragment_home_page_main_scroll.xml | 190 +++++++++++++++ .../src/main/res/layout/fragment_show_posts.xml | 20 +- .../res/layout/fragment_show_posts_by_location.xml | 17 ++ 9 files changed, 628 insertions(+), 314 deletions(-) delete mode 100644 Client/BrzoDoLokacije/.idea/deploymentTargetDropDown.xml create mode 100644 Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentHomePageMainScroll.kt create mode 100644 Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentShowPostsByLocation.kt create mode 100644 Client/BrzoDoLokacije/app/src/main/res/drawable/ic_baseline_arrow_back_24.xml create mode 100644 Client/BrzoDoLokacije/app/src/main/res/layout/fragment_home_page_main_scroll.xml create mode 100644 Client/BrzoDoLokacije/app/src/main/res/layout/fragment_show_posts_by_location.xml diff --git a/Client/BrzoDoLokacije/.idea/deploymentTargetDropDown.xml b/Client/BrzoDoLokacije/.idea/deploymentTargetDropDown.xml deleted file mode 100644 index 748026e..0000000 --- a/Client/BrzoDoLokacije/.idea/deploymentTargetDropDown.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentHomePage.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentHomePage.kt index 150adbf..1be978d 100644 --- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentHomePage.kt +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentHomePage.kt @@ -4,12 +4,19 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Button +import android.widget.ImageButton +import android.widget.ImageView +import android.widget.ScrollView import android.widget.Toast +import androidx.core.view.isVisible import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentTransaction import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.example.brzodolokacije.Adapters.ShowPostsHomePageAdapter import com.example.brzodolokacije.Interfaces.IBackendApi +import com.example.brzodolokacije.Models.LocationType import com.example.brzodolokacije.Models.PostPreview import com.example.brzodolokacije.R import com.example.brzodolokacije.Services.RetrofitHelper.baseUrl @@ -22,13 +29,8 @@ import retrofit2.converter.gson.GsonConverterFactory class FragmentHomePage : Fragment() { - private lateinit var posts : MutableList - private lateinit var mostViewedPosts : MutableList - private lateinit var newestPosts : MutableList - private lateinit var bestRatedPosts:MutableList - private lateinit var rvPopular: RecyclerView - private lateinit var rvNewest:RecyclerView - private lateinit var rvBestRated:RecyclerView + + private lateinit var btnBack:ImageView /* override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -40,96 +42,35 @@ class FragmentHomePage : Fragment() { ): View? { // Inflate the layout for this fragment var view:View= inflater.inflate(R.layout.fragment_home_page, container, false) + btnBack=view.findViewById(R.id.btnFragmentHomePageBack) + setBtnBackInvisible() - rvPopular=view.findViewById(R.id.rvFragmentHomePagePopular) - rvNewest=view.findViewById(R.id.rvFragmentHomePageNewest) - rvBestRated=view.findViewById(R.id.rvFragmentHomePageBestRated) - //pokupi sve objave iz baze' - getAllPosts() - - + var fm: FragmentTransaction =childFragmentManager.beginTransaction() + fm.replace(R.id.flFragmentHomePageMainContent, FragmentHomePageMainScroll()) + fm.commit() + btnBack.setOnClickListener{ + changeLocationViewToScrollView() + setBtnBackInvisible() + } return view } - private fun getAllPosts(){ - val api = Retrofit.Builder() - .addConverterFactory(GsonConverterFactory.create()) - .baseUrl(baseUrl) - .build() - .create(IBackendApi::class.java) - val token= SharedPreferencesHelper.getValue("jwt", requireActivity()) - val data=api.getPosts("Bearer "+token) - - data.enqueue(object : Callback> { - override fun onResponse( - call: Call>, - response: Response> - ) { - if (response.body() == null) { - Toast.makeText( - activity, "get all null", Toast.LENGTH_LONG - ).show(); - - return - } - //refresh list - Toast.makeText( - activity, "get all ", Toast.LENGTH_LONG - ).show(); - posts = response.body()!!.toMutableList() - getPopularPosts(posts) - getNewestPosts(posts) - getBestRatedPosts(posts) - } - - override fun onFailure(call: Call>, t: Throwable) { - Toast.makeText( - activity,"nema objava", Toast.LENGTH_LONG - ).show(); - } - }) + fun changeScrollVIewToLocationView(){ + var fm: FragmentTransaction =childFragmentManager.beginTransaction() + fm.replace(R.id.flFragmentHomePageMainContent, FragmentShowPostsByLocation()) + fm.commit() } - - private fun getPopularPosts(allPosts:MutableList){//most viewed - Toast.makeText( - activity, "get all mv ", Toast.LENGTH_LONG - ).show(); - mostViewedPosts=allPosts - mostViewedPosts.sortByDescending { it.views } - rvPopular.apply { - layoutManager= LinearLayoutManager(activity,LinearLayoutManager.HORIZONTAL,false) - adapter= ShowPostsHomePageAdapter(mostViewedPosts,requireActivity()) - - } - + fun changeLocationViewToScrollView(){ + var fm: FragmentTransaction =childFragmentManager.beginTransaction() + fm.replace(R.id.flFragmentHomePageMainContent, FragmentHomePageMainScroll()) + fm.commit() } - private fun getNewestPosts(allPosts:MutableList){ - Toast.makeText( - activity, "get all r ", Toast.LENGTH_LONG - ).show(); - newestPosts=allPosts/// izmeniti nakon dodavanja datuma u model!!!!!! - newestPosts.sortBy { it.ratings} - rvNewest.apply { - layoutManager=LinearLayoutManager(activity,LinearLayoutManager.HORIZONTAL,false) - adapter=ShowPostsHomePageAdapter(newestPosts,requireActivity()) - } + fun setBtnBackInvisible(){ + btnBack.isVisible=false } - - private fun getBestRatedPosts(allPosts:MutableList){ - Toast.makeText( - activity, "get all br ", Toast.LENGTH_LONG - ).show(); - bestRatedPosts=allPosts - bestRatedPosts.sortByDescending { it.ratings } - rvBestRated.apply { - layoutManager=LinearLayoutManager(activity,LinearLayoutManager.HORIZONTAL,false) - adapter=ShowPostsHomePageAdapter(bestRatedPosts,requireActivity()) - } - + fun setBtnBackVisible(){ + btnBack.isVisible=true } - - - -} \ No newline at end of file +} diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentHomePageMainScroll.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentHomePageMainScroll.kt new file mode 100644 index 0000000..bde4dd2 --- /dev/null +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentHomePageMainScroll.kt @@ -0,0 +1,263 @@ +package com.example.brzodolokacije.Fragments + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageButton +import android.widget.Toast +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentTransaction +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.example.brzodolokacije.Adapters.ShowPostsHomePageAdapter +import com.example.brzodolokacije.Interfaces.IBackendApi +import com.example.brzodolokacije.Models.LocationType +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 +import retrofit2.Retrofit +import retrofit2.converter.gson.GsonConverterFactory + +class FragmentHomePageMainScroll : Fragment() { + + private lateinit var posts : MutableList + private lateinit var mostViewedPosts : MutableList + private lateinit var newestPosts : MutableList + private lateinit var bestRatedPosts:MutableList + private lateinit var rvPopular: RecyclerView + private lateinit var rvNewest: RecyclerView + private lateinit var rvBestRated: RecyclerView + //NAVIGATION BUTTONS + private lateinit var location_city: ImageButton + private lateinit var location_beach: ImageButton + private lateinit var location_mountain: ImageButton + private lateinit var location_lake: ImageButton + private lateinit var location_spa: ImageButton + private lateinit var location_waterfall: ImageButton + private lateinit var location_amusement_park: ImageButton + private lateinit var location_attraction: ImageButton + private lateinit var location_landmark: ImageButton + + private lateinit var filter: LocationType + private lateinit var filterString: String + + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + + val view= inflater.inflate(R.layout.fragment_home_page_main_scroll, container, false) + + + + rvPopular=view.findViewById(R.id.rvFragmentHomePagePopular) + rvNewest=view.findViewById(R.id.rvFragmentHomePageNewest) + rvBestRated=view.findViewById(R.id.rvFragmentHomePageBestRated) + + location_amusement_park=view.findViewById(R.id.btnFragmentHomePagelocation_amusement_park) + location_attraction=view.findViewById(R.id.btnFragmentHomePagelocation_attraction) + location_beach=view.findViewById(R.id.btnFragmentHomePagelocation_beach) + location_lake=view.findViewById(R.id.btnFragmentHomePagelocation_lake) + location_city=view.findViewById(R.id.btnFragmentHomePagelocation_city) + location_landmark=view.findViewById(R.id.btnFragmentHomePagelocation_landmark) + location_mountain=view.findViewById(R.id.btnFragmentHomePagelocation_mountain) + location_spa=view.findViewById(R.id.btnFragmentHomePagelocation_spa) + location_waterfall=view.findViewById(R.id.btnFragmentHomePagelocation_waterfall) + + //pokupi sve objave iz baze' + getAllPosts() + + var bundle=Bundle() + var fragment=FragmentShowPostsByLocation() + + location_spa.setOnClickListener { + Toast.makeText( + activity, "BANJAAAAAAAAAAAAAAA", Toast.LENGTH_LONG + ).show(); + filter=LocationType.BANJA + filterString=filter.toString() + bundle.putString("data",filterString) + fragment.arguments=bundle + + val parentFrag: FragmentHomePage = this@FragmentHomePageMainScroll.getParentFragment() as FragmentHomePage + parentFrag.changeScrollVIewToLocationView() + parentFrag.setBtnBackVisible() + + + } + location_waterfall.setOnClickListener { + filter=LocationType.VODOPAD + filterString=filter.toString() + bundle.putString("data",filterString) + fragment.arguments=bundle + + val parentFrag: FragmentHomePage = this@FragmentHomePageMainScroll.getParentFragment() as FragmentHomePage + parentFrag.changeScrollVIewToLocationView() + parentFrag.setBtnBackVisible() + + + } + location_mountain.setOnClickListener { + filter=LocationType.PLANINA + filterString=filter.toString() + bundle.putString("data",filterString) + fragment.arguments=bundle + + val parentFrag: FragmentHomePage = this@FragmentHomePageMainScroll.getParentFragment() as FragmentHomePage + parentFrag.changeScrollVIewToLocationView() + parentFrag.setBtnBackVisible() + + + } + location_landmark.setOnClickListener { + filter=LocationType.LOKALITET + filterString=filter.toString() + bundle.putString("data",filterString) + fragment.arguments=bundle + + val parentFrag: FragmentHomePage = this@FragmentHomePageMainScroll.getParentFragment() as FragmentHomePage + parentFrag.changeScrollVIewToLocationView() + parentFrag.setBtnBackVisible() + + + } + location_city.setOnClickListener { + filter=LocationType.GRAD + filterString=filter.toString() + bundle.putString("data",filterString) + fragment.arguments=bundle + + val parentFrag: FragmentHomePage = this@FragmentHomePageMainScroll.getParentFragment() as FragmentHomePage + parentFrag.changeScrollVIewToLocationView() + parentFrag.setBtnBackVisible() + + } + location_lake.setOnClickListener { + filter=LocationType.JEZERO + filterString=filter.toString() + bundle.putString("data",filterString) + fragment.arguments=bundle + val parentFrag: FragmentHomePage = this@FragmentHomePageMainScroll.getParentFragment() as FragmentHomePage + parentFrag.changeScrollVIewToLocationView() + parentFrag.setBtnBackVisible() + + } + location_attraction.setOnClickListener { + filter=LocationType.ATRAKCIJA + filterString=filter.toString() + bundle.putString("data",filterString) + fragment.arguments=bundle + val parentFrag: FragmentHomePage = this@FragmentHomePageMainScroll.getParentFragment() as FragmentHomePage + parentFrag.changeScrollVIewToLocationView() + parentFrag.setBtnBackVisible() + } + location_amusement_park.setOnClickListener { + filter=LocationType.ZABAVNI_PARK + filterString=filter.toString() + bundle.putString("data",filterString) + fragment.arguments=bundle + val parentFrag: FragmentHomePage = this@FragmentHomePageMainScroll.getParentFragment() as FragmentHomePage + parentFrag.changeScrollVIewToLocationView() + parentFrag.setBtnBackVisible() + + } + location_beach.setOnClickListener { + filter=LocationType.PLAZA + filterString=filter.toString() + bundle.putString("data",filterString) + fragment.arguments=bundle + val parentFrag: FragmentHomePage = this@FragmentHomePageMainScroll.getParentFragment() as FragmentHomePage + parentFrag.changeScrollVIewToLocationView() + parentFrag.setBtnBackVisible() + + } + + + + return view + } + + private fun getAllPosts(){ + val api = Retrofit.Builder() + .addConverterFactory(GsonConverterFactory.create()) + .baseUrl(RetrofitHelper.baseUrl) + .build() + .create(IBackendApi::class.java) + val token= SharedPreferencesHelper.getValue("jwt", requireActivity()) + val data=api.getPosts("Bearer "+token) + + data.enqueue(object : Callback> { + override fun onResponse( + call: Call>, + response: Response> + ) { + if (response.body() == null) { +// Toast.makeText( +// activity, "get all null", Toast.LENGTH_LONG +// ).show(); + + return + } + //refresh list +// Toast.makeText( +// activity, "get all ", Toast.LENGTH_LONG +// ).show(); + posts = response.body()!!.toMutableList() + getPopularPosts(posts) + getNewestPosts(posts) + getBestRatedPosts(posts) + } + + override fun onFailure(call: Call>, t: Throwable) { +// Toast.makeText( +// activity,"nema objava", Toast.LENGTH_LONG +// ).show(); + } + }) + } + + private fun getPopularPosts(allPosts:MutableList){//most viewed +// Toast.makeText( +// activity, "get all mv ", Toast.LENGTH_LONG +// ).show(); + mostViewedPosts=allPosts + mostViewedPosts.sortByDescending { it.views } + rvPopular.apply { + layoutManager= LinearLayoutManager(activity, LinearLayoutManager.HORIZONTAL,false) + adapter= ShowPostsHomePageAdapter(mostViewedPosts,requireActivity()) + + } + + } + private fun getNewestPosts(allPosts:MutableList){ +// Toast.makeText( +// activity, "get all r ", Toast.LENGTH_LONG +// ).show(); + newestPosts=allPosts/// izmeniti nakon dodavanja datuma u model!!!!!! + newestPosts.sortBy { it.ratings} + rvNewest.apply { + layoutManager= LinearLayoutManager(activity, LinearLayoutManager.HORIZONTAL,false) + adapter= ShowPostsHomePageAdapter(newestPosts,requireActivity()) + } + } + + private fun getBestRatedPosts(allPosts:MutableList){ +// Toast.makeText( +// activity, "get all br ", Toast.LENGTH_LONG +// ).show(); + bestRatedPosts=allPosts + bestRatedPosts.sortByDescending { it.ratings } + rvBestRated.apply { + layoutManager= LinearLayoutManager(activity, LinearLayoutManager.HORIZONTAL,false) + adapter= ShowPostsHomePageAdapter(bestRatedPosts,requireActivity()) + } + + } + +} \ No newline at end of file diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentShowPostsByLocation.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentShowPostsByLocation.kt new file mode 100644 index 0000000..f9accc8 --- /dev/null +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentShowPostsByLocation.kt @@ -0,0 +1,96 @@ +package com.example.brzodolokacije.Fragments + +import android.os.Bundle +import androidx.fragment.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.Toast +import androidx.recyclerview.widget.GridLayoutManager +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import androidx.recyclerview.widget.StaggeredGridLayoutManager +import com.example.brzodolokacije.Adapters.ShowPostsHomePageAdapter +import com.example.brzodolokacije.Interfaces.IBackendApi +import com.example.brzodolokacije.Models.Post +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 +import retrofit2.Retrofit +import retrofit2.converter.gson.GsonConverterFactory + +class FragmentShowPostsByLocation : Fragment() { + + private lateinit var posts : MutableList + private lateinit var rvPosts:RecyclerView + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + // Inflate the layout for this fragment + val view= inflater.inflate(R.layout.fragment_show_posts_by_location, container, false) + + rvPosts=view.findViewById(R.id.rvFragmentShowPostsByLocationPosts)as RecyclerView + + val args=this.arguments + val filterString=args?.get("data").toString() + + getPosts(filterString) + + + + return view + } + + + private fun getPosts(location:String){ + val api = Retrofit.Builder() + .addConverterFactory(GsonConverterFactory.create()) + .baseUrl(RetrofitHelper.baseUrl) + .build() + .create(IBackendApi::class.java) + val token= SharedPreferencesHelper.getValue("jwt", requireActivity()) + val data=api.getPosts("Bearer "+token) + + data.enqueue(object : Callback> { + override fun onResponse(call: Call>, response: Response>) { + if (response.body() == null) { + Toast.makeText( + activity, "get all null", Toast.LENGTH_LONG + ).show(); + + return + } + //refresh list +// Toast.makeText( +// activity, "get all ", Toast.LENGTH_LONG +// ).show(); + var posts = response.body()!!.toMutableList() + showPosts(posts) + } + + override fun onFailure(call: Call>, t: Throwable) { + Toast.makeText( + activity,"nema objava", Toast.LENGTH_LONG + ).show(); + } + }) + } + + private fun showPosts(posts:MutableList){ +// Toast.makeText( +// activity, "get all sp ", Toast.LENGTH_LONG +// ).show(); + + rvPosts.apply { + layoutManager= GridLayoutManager(activity,2) + adapter= ShowPostsHomePageAdapter(posts,requireActivity()) + + } + + } +} \ No newline at end of file diff --git a/Client/BrzoDoLokacije/app/src/main/res/drawable/ic_baseline_arrow_back_24.xml b/Client/BrzoDoLokacije/app/src/main/res/drawable/ic_baseline_arrow_back_24.xml new file mode 100644 index 0000000..09fe069 --- /dev/null +++ b/Client/BrzoDoLokacije/app/src/main/res/drawable/ic_baseline_arrow_back_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_home_page.xml b/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_home_page.xml index ead86e7..5d9e62c 100644 --- a/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_home_page.xml +++ b/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_home_page.xml @@ -89,211 +89,28 @@ app:iconTint="#333D70" /> + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + app:layout_constraintTop_toBottomOf="@+id/btnFragmentHomePageBack"> + \ No newline at end of file diff --git a/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_home_page_main_scroll.xml b/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_home_page_main_scroll.xml new file mode 100644 index 0000000..90d1037 --- /dev/null +++ b/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_home_page_main_scroll.xml @@ -0,0 +1,190 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_show_posts.xml b/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_show_posts.xml index 64ad74c..5dfbc98 100644 --- a/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_show_posts.xml +++ b/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_show_posts.xml @@ -52,10 +52,12 @@ android:layout_width="50dp" android:layout_height="50dp" android:layout_alignParentRight="true" - android:src="@drawable/filter" + android:background="@color/white" android:padding="@dimen/component_padding" android:scaleType="centerCrop" - android:background="@color/white"/> + android:src="@drawable/filter" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toTopOf="parent" /> + + + + + + + \ No newline at end of file -- cgit v1.2.3