From e6bb1a00d7010a04ecbbdaf3592d4cba4a05e2e1 Mon Sep 17 00:00:00 2001 From: Jelena Petrovic Date: Sun, 20 Nov 2022 00:00:22 +0100 Subject: Omoguceno slanje pretrage, filtriranja itd putem modela, sad se salju samo hardkodovane vrednosti #36 --- .../brzodolokacije/Adapters/ShowPostsAdapter.kt | 16 ++++---- .../brzodolokacije/Fragments/FragmentShowPosts.kt | 44 ++++------------------ .../java/com/example/brzodolokacije/Models/Post.kt | 6 +++ .../paging/SearchPostsPagingSource.kt | 8 ++-- .../brzodolokacije/paging/SearchPostsRepository.kt | 7 ++-- .../brzodolokacije/paging/SearchPostsViewModel.kt | 9 ++--- 6 files changed, 34 insertions(+), 56 deletions(-) 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 a827dcb..cf16689 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 @@ -26,7 +26,7 @@ import retrofit2.Call import retrofit2.Response -class ShowPostsAdapter (val activity:Activity,val items : MutableList) +class ShowPostsAdapter (val activity:Activity,val items : MutableList?=null) : PagingDataAdapter(REPO_COMPARATOR) { private lateinit var token: String private lateinit var imageApi: IBackendApi @@ -59,13 +59,13 @@ class ShowPostsAdapter (val activity:Activity,val items : MutableList = mutableListOf() private var linearManagerVar: RecyclerView.LayoutManager? = null private var adapterVar: ShowPostsAdapter? = null private var recyclerView: RecyclerView?=null private var gridManagerVar: RecyclerView.LayoutManager?=null private var swipeRefreshLayout:SwipeRefreshLayout?=null private lateinit var searchPostsViewModel:SearchPostsViewModel + private var searchParams:SearchParams?= SearchParams("6375784fe84e2d53df32bf03",1,1) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setUpViewModel() binding=FragmentShowPostsBinding.inflate(layoutInflater) //instantiate adapter and linearLayout - adapterVar=ShowPostsAdapter(requireActivity(),posts) + adapterVar=ShowPostsAdapter(requireActivity()) linearManagerVar= LinearLayoutManager(activity) gridManagerVar=GridLayoutManager(activity,2) } @@ -82,39 +82,13 @@ class FragmentShowPosts : Fragment(), SwipeRefreshLayout.OnRefreshListener { } } - fun requestToBack(){ + fun requestToBack(searchParams: SearchParams){ lifecycleScope.launch{ - searchPostsViewModel.fetchPosts().distinctUntilChanged().collectLatest { - adapterVar?.submitData(it) + searchPostsViewModel.fetchPosts(searchParams).distinctUntilChanged().collectLatest { + adapterVar?.submitData(lifecycle,it) swipeRefreshLayout?.isRefreshing=false } } -// val postApi= RetrofitHelper.getInstance() -// val token=SharedPreferencesHelper.getValue("jwt", requireActivity()) -// val request=postApi.getPosts("Bearer "+token) -// request.enqueue(object : retrofit2.Callback?> { -// override fun onResponse(call: Call?>, response: Response?>) { -// if(response.isSuccessful){ -// posts=response.body()!! -// recyclerView?.adapter=ShowPostsAdapter(requireActivity(),posts) -// Toast.makeText( -// activity, "prosao zahtev", Toast.LENGTH_LONG -// ).show() -// swipeRefreshLayout?.isRefreshing=false -// }else{ -// if(response.errorBody()!=null) -// Toast.makeText(activity, response.errorBody()!!.string(), Toast.LENGTH_LONG).show(); -// } -// -// -// } -// -// override fun onFailure(call: Call?>, t: Throwable) { -// Toast.makeText( -// activity, t.toString(), Toast.LENGTH_LONG -// ).show(); -// } -// }) } override fun onCreateView( @@ -138,16 +112,14 @@ class FragmentShowPosts : Fragment(), SwipeRefreshLayout.OnRefreshListener { R.color.purple_700 ) swipeRefreshLayout?.post(kotlinx.coroutines.Runnable { - //swipeRefreshLayout?.isRefreshing=true - requestToBack() + swipeRefreshLayout?.isRefreshing=true + requestToBack(searchParams!!) }) return rootView } override fun onRefresh() { - //requestToBack() - adapterVar!!.notifyDataSetChanged() - Log.d("main",adapterVar!!.itemCount.toString()) + requestToBack(searchParams!!) } } \ 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 f990133..a292160 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 @@ -80,3 +80,9 @@ data class PagedPosts( var totalposts:Int, var posts:MutableList ) + +data class SearchParams( + var locationId: String, + var sorttype:Int, + var filterdate:Int +) \ No newline at end of file diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/paging/SearchPostsPagingSource.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/paging/SearchPostsPagingSource.kt index 2f69a7a..b1c89db 100644 --- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/paging/SearchPostsPagingSource.kt +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/paging/SearchPostsPagingSource.kt @@ -6,20 +6,22 @@ import androidx.paging.PagingSource import com.example.brzodolokacije.Interfaces.IBackendApi import com.example.brzodolokacije.Models.PagedPosts import com.example.brzodolokacije.Models.PostPreview +import com.example.brzodolokacije.Models.SearchParams import com.example.brzodolokacije.Services.SharedPreferencesHelper import retrofit2.HttpException import java.io.IOException class SearchPostsPagingSource( val backend: IBackendApi, - val activity: Activity + val activity: Activity, + val searchParams:SearchParams ):PagingSource() { override suspend fun load(params: LoadParams): LoadResult { val page=params.key?:0 val token=SharedPreferencesHelper.getValue("jwt", activity) return try{ - val response=backend.getPagedPosts("Bearer "+token,"6375784fe84e2d53df32bf03", - page,1,1 + val response=backend.getPagedPosts("Bearer "+token,searchParams.locationId, + page,searchParams.sorttype,searchParams.filterdate ) Log.d("main",page.toString()) LoadResult.Page( diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/paging/SearchPostsRepository.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/paging/SearchPostsRepository.kt index ae3a684..4eeb85b 100644 --- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/paging/SearchPostsRepository.kt +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/paging/SearchPostsRepository.kt @@ -6,21 +6,22 @@ import androidx.paging.PagingConfig import androidx.paging.PagingData import androidx.paging.cachedIn import com.example.brzodolokacije.Models.PostPreview +import com.example.brzodolokacije.Models.SearchParams import com.example.brzodolokacije.Services.RetrofitHelper import kotlinx.coroutines.flow.Flow -class SearchPostsRepository(val activity: Activity) { +class SearchPostsRepository(val activity: Activity,val searchParams: SearchParams) { companion object{ const val DEFAULT_PAGE_SIZE=20 const val DEFAULT_PAGE_INDEX=1 - fun getInstance(activity: Activity)=SearchPostsRepository(activity) + fun getInstance(activity: Activity,searchParams: SearchParams)=SearchPostsRepository(activity,searchParams) } fun letSearchedPostsFlow(pagingConfig: PagingConfig=getDefaultPageConfig()): Flow> { return Pager( config=pagingConfig, - pagingSourceFactory = {SearchPostsPagingSource(RetrofitHelper.getInstance(),activity)} + pagingSourceFactory = {SearchPostsPagingSource(RetrofitHelper.getInstance(),activity,searchParams)} ).flow } diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/paging/SearchPostsViewModel.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/paging/SearchPostsViewModel.kt index d0bf3ef..cee1a34 100644 --- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/paging/SearchPostsViewModel.kt +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/paging/SearchPostsViewModel.kt @@ -9,17 +9,14 @@ import androidx.paging.PagingData import androidx.paging.cachedIn import com.example.brzodolokacije.Interfaces.IBackendApi import com.example.brzodolokacije.Models.PostPreview +import com.example.brzodolokacije.Models.SearchParams import kotlinx.coroutines.flow.Flow class SearchPostsViewModel( private val api:IBackendApi, val activity:Activity ): ViewModel() { - val posts = - Pager(config = PagingConfig(pageSize = 10), pagingSourceFactory = { - SearchPostsPagingSource(api,activity) - }).flow.cachedIn(viewModelScope) - fun fetchPosts(): Flow>{ - return SearchPostsRepository.getInstance(activity).letSearchedPostsFlow().cachedIn(viewModelScope) + fun fetchPosts(searchParams: SearchParams): Flow>{ + return SearchPostsRepository.getInstance(activity,searchParams).letSearchedPostsFlow().cachedIn(viewModelScope) } } \ No newline at end of file -- cgit v1.2.3