From 38e46d72f2eb3509b590b66a47f06626a783827c Mon Sep 17 00:00:00 2001 From: Erik Cavazos Date: Sun, 6 Aug 2023 23:22:53 -0600 Subject: [PATCH] WIP feeds --- .../java/com/isolaatti/home/FeedFragment.kt | 12 +++++------- .../presentation/PostListingViewModelBase.kt | 2 +- .../profile/presentation/ProfileViewModel.kt | 6 +++++- ...sionsFragment.kt => ProfileMainFragment.kt} | 18 ++++++++++++------ .../main/res/layout/fragment_discussions.xml | 1 + .../main/res/navigation/profile_navigation.xml | 6 +++--- 6 files changed, 27 insertions(+), 18 deletions(-) rename app/src/main/java/com/isolaatti/profile/ui/{DiscussionsFragment.kt => ProfileMainFragment.kt} (93%) diff --git a/app/src/main/java/com/isolaatti/home/FeedFragment.kt b/app/src/main/java/com/isolaatti/home/FeedFragment.kt index 6959c75..c960bc1 100644 --- a/app/src/main/java/com/isolaatti/home/FeedFragment.kt +++ b/app/src/main/java/com/isolaatti/home/FeedFragment.kt @@ -57,6 +57,8 @@ class FeedFragment : Fragment(), OnUserInteractedWithPostCallback { private val viewModel: FeedViewModel by activityViewModels() val optionsViewModel: BottomSheetPostOptionsViewModel by activityViewModels() + private var currentUserId = 0 + private lateinit var viewBinding: FragmentFeedBinding private lateinit var adapter: PostsRecyclerViewAdapter @@ -101,7 +103,7 @@ class FeedFragment : Fragment(), OnUserInteractedWithPostCallback { viewBinding.homeDrawer.setNavigationItemSelectedListener { when(it.itemId) { R.id.my_profile_menu_item -> { - startActivity(Intent(requireActivity(), ProfileActivity::class.java)) + ProfileActivity.startActivity(requireContext(), currentUserId) true } R.id.drafts_menu_item -> { @@ -168,13 +170,12 @@ class FeedFragment : Fragment(), OnUserInteractedWithPostCallback { textViewName?.text = it.name textViewEmail?.text = it.email + currentUserId = it.id } - - viewModel.posts.observe(viewLifecycleOwner){ - if (it.first != null) { + if (it?.first != null) { adapter.updateList(it.first!!, it.second) } } @@ -183,9 +184,6 @@ class FeedFragment : Fragment(), OnUserInteractedWithPostCallback { viewBinding.swipeToRefresh.isRefreshing = it } -// viewModel.noMoreContent.observe(viewLifecycleOwner) { -// -// } viewModel.errorLoading.observe(viewLifecycleOwner) { errorViewModel.error.postValue(it) diff --git a/app/src/main/java/com/isolaatti/posting/posts/presentation/PostListingViewModelBase.kt b/app/src/main/java/com/isolaatti/posting/posts/presentation/PostListingViewModelBase.kt index c7a616b..7d9e716 100644 --- a/app/src/main/java/com/isolaatti/posting/posts/presentation/PostListingViewModelBase.kt +++ b/app/src/main/java/com/isolaatti/posting/posts/presentation/PostListingViewModelBase.kt @@ -22,7 +22,7 @@ abstract class PostListingViewModelBase : ViewModel() { @Inject lateinit var getProfilePosts: GetProfilePosts - val posts: MutableLiveData> = MutableLiveData() + val posts: MutableLiveData?> = MutableLiveData() val loadingPosts = MutableLiveData(false) diff --git a/app/src/main/java/com/isolaatti/profile/presentation/ProfileViewModel.kt b/app/src/main/java/com/isolaatti/profile/presentation/ProfileViewModel.kt index 91400bb..9b732fd 100644 --- a/app/src/main/java/com/isolaatti/profile/presentation/ProfileViewModel.kt +++ b/app/src/main/java/com/isolaatti/profile/presentation/ProfileViewModel.kt @@ -44,11 +44,15 @@ class ProfileViewModel @Inject constructor(private val getProfileUseCase: GetPro override fun getFeed(refresh: Boolean) { viewModelScope.launch { + if(refresh) { + posts.value = Pair(null, UpdateEvent(UpdateEvent.UpdateType.REFRESH, null)) + getLastId() + } getProfilePostsUseCase(profileId, getLastId(), false, null).onEach { feedDtoResource -> when (feedDtoResource) { is Resource.Success -> { loadingPosts.postValue(false) - posts.postValue(Pair(posts.value?.first?.concatFeed(feedDtoResource.data) ?: feedDtoResource.data, UpdateEvent(UpdateEvent.UpdateType.PAGE_ADDED, null))) + posts.postValue(Pair(posts.value?.first?.concatFeed(feedDtoResource.data) ?: feedDtoResource.data, UpdateEvent(if(refresh) UpdateEvent.UpdateType.REFRESH else UpdateEvent.UpdateType.PAGE_ADDED, null))) noMoreContent.postValue(feedDtoResource.data?.moreContent == false) } diff --git a/app/src/main/java/com/isolaatti/profile/ui/DiscussionsFragment.kt b/app/src/main/java/com/isolaatti/profile/ui/ProfileMainFragment.kt similarity index 93% rename from app/src/main/java/com/isolaatti/profile/ui/DiscussionsFragment.kt rename to app/src/main/java/com/isolaatti/profile/ui/ProfileMainFragment.kt index 7483ccf..fc4a97e 100644 --- a/app/src/main/java/com/isolaatti/profile/ui/DiscussionsFragment.kt +++ b/app/src/main/java/com/isolaatti/profile/ui/ProfileMainFragment.kt @@ -17,7 +17,6 @@ import com.isolaatti.databinding.FragmentDiscussionsBinding import com.isolaatti.home.FeedFragment import com.isolaatti.posting.PostViewerActivity import com.isolaatti.posting.comments.presentation.BottomSheetPostComments -import com.isolaatti.posting.common.domain.OnUserInteractedWithPostCallback import com.isolaatti.posting.common.options_bottom_sheet.domain.Options import com.isolaatti.posting.common.options_bottom_sheet.presentation.BottomSheetPostOptionsViewModel import com.isolaatti.posting.common.options_bottom_sheet.ui.BottomSheetPostOptionsFragment @@ -38,7 +37,7 @@ import io.noties.markwon.image.destination.ImageDestinationProcessorRelativeToAb import io.noties.markwon.linkify.LinkifyPlugin @AndroidEntryPoint -class DiscussionsFragment : Fragment() { +class ProfileMainFragment : Fragment() { lateinit var viewBinding: FragmentDiscussionsBinding private val viewModel: ProfileViewModel by viewModels() val optionsViewModel: BottomSheetPostOptionsViewModel by activityViewModels() @@ -62,8 +61,8 @@ class DiscussionsFragment : Fragment() { viewBinding.textViewDescription.text = profile.descriptionText } - private val postsObserver: Observer> = Observer { - if(it.first != null) { + private val postsObserver: Observer?> = Observer { + if(it?.first != null) { postsAdapter.updateList(it.first!!, it.second) } @@ -96,11 +95,11 @@ class DiscussionsFragment : Fragment() { viewBinding.bottomAppBar.setOnMenuItemClickListener { when(it.itemId) { R.id.audios_menu_item -> { - findNavController().navigate(DiscussionsFragmentDirections.actionDiscussionsFragmentToAudiosFragment()) + findNavController().navigate(ProfileMainFragmentDirections.actionDiscussionsFragmentToAudiosFragment()) true } R.id.images_menu_item -> { - findNavController().navigate(DiscussionsFragmentDirections.actionDiscussionsFragmentToImagesFragment()) + findNavController().navigate(ProfileMainFragmentDirections.actionDiscussionsFragmentToImagesFragment()) true } else -> { false } @@ -109,11 +108,18 @@ class DiscussionsFragment : Fragment() { viewBinding.feedRecyclerView.adapter = postsAdapter viewBinding.feedRecyclerView.layoutManager = LinearLayoutManager(requireContext(), LinearLayoutManager.VERTICAL, false) + + viewBinding.swipeToRefresh.setOnRefreshListener { + viewModel.getFeed(true) + } } private fun setObservers() { viewModel.profile.observe(viewLifecycleOwner, profileObserver) viewModel.posts.observe(viewLifecycleOwner, postsObserver) + viewModel.loadingPosts.observe(viewLifecycleOwner) { + viewBinding.swipeToRefresh.isRefreshing = it + } } private fun getData() { diff --git a/app/src/main/res/layout/fragment_discussions.xml b/app/src/main/res/layout/fragment_discussions.xml index a3049ef..3217bb3 100644 --- a/app/src/main/res/layout/fragment_discussions.xml +++ b/app/src/main/res/layout/fragment_discussions.xml @@ -97,6 +97,7 @@ + app:startDestination="@id/mainFragment">