diff --git a/presentation/src/main/java/com/dpm/presentation/home/HomeActivity.kt b/presentation/src/main/java/com/dpm/presentation/home/HomeActivity.kt index 931a0b3d..df995616 100644 --- a/presentation/src/main/java/com/dpm/presentation/home/HomeActivity.kt +++ b/presentation/src/main/java/com/dpm/presentation/home/HomeActivity.kt @@ -174,7 +174,7 @@ class HomeActivity : BaseActivity( } } - private fun setLayoutBorder(){ + private fun setLayoutBorder() { binding.clHomeArchiving.clipToOutline = true binding.clHomeScrap.clipToOutline = true } @@ -224,6 +224,11 @@ class HomeActivity : BaseActivity( when (state) { is UiState.Empty -> Unit is UiState.Failure -> { + binding.tvHomeTeam.text = if(sharedPreference.teamId == 0){ + "모두를 응원하는" + } else { + sharedPreference.teamName + } makeSpotImageAppbar("내 정보 불러오기를 실패하였습니다.\uD83E\uDEE2") } @@ -262,8 +267,8 @@ class HomeActivity : BaseActivity( message = "현재 잠실야구장만 이용할 수 있어요!", endMessage = "잠실야구장 보기", marginBottom = 87, - onClick = {startStadiumActivity(it)} - ) .show() + onClick = { startStadiumActivity(it) } + ).show() } else { MixpanelManager.track("home_find_view") @@ -324,6 +329,7 @@ class HomeActivity : BaseActivity( shimmerHomeStadium.visibility = View.GONE } } + private fun setHomeFeedVisibility(isSuccess: Boolean) { val visibility = if (isSuccess) View.VISIBLE else View.GONE with(binding) { diff --git a/presentation/src/main/java/com/dpm/presentation/scrap/ScrapActivity.kt b/presentation/src/main/java/com/dpm/presentation/scrap/ScrapActivity.kt index ae73a4cd..4f0cd223 100644 --- a/presentation/src/main/java/com/dpm/presentation/scrap/ScrapActivity.kt +++ b/presentation/src/main/java/com/dpm/presentation/scrap/ScrapActivity.kt @@ -77,8 +77,11 @@ class ScrapActivity : BaseActivity( when (state) { is UiState.Success -> { binding.tvScrapCount.text = state.data.totalScrapCount.toString() - scrapAdapter.submitList(state.data.reviews) - isLoading = false + scrapAdapter.submitList(state.data.reviews) { + binding.rvScrapRecord.invalidateItemDecorations() + isLoading = false + } + setScrapScreenVisibility(ScrapScreenState.SUCCESS) } @@ -131,7 +134,7 @@ class ScrapActivity : BaseActivity( val scrollBottom = !binding.rvScrapRecord.canScrollVertically(1) val scrollTop = !binding.rvScrapRecord.canScrollVertically(-1) - if (scrollBottom && !isLoading && (viewModel.scrap.value as UiState.Success).data.hasNext) { + if (scrollBottom && !isLoading && viewModel.scrap.value is UiState.Success && (viewModel.scrap.value as UiState.Success).data.hasNext) { viewModel.getNextScrapRecord() isLoading = true } diff --git a/presentation/src/main/java/com/dpm/presentation/scrap/ScrapDetailPictureFragment.kt b/presentation/src/main/java/com/dpm/presentation/scrap/ScrapDetailPictureFragment.kt index b6305b65..c39a7dc1 100644 --- a/presentation/src/main/java/com/dpm/presentation/scrap/ScrapDetailPictureFragment.kt +++ b/presentation/src/main/java/com/dpm/presentation/scrap/ScrapDetailPictureFragment.kt @@ -79,8 +79,9 @@ class ScrapDetailPictureFragment : BindingFragment - adapter.submitList(data.reviews.map { it.baseReview }.toList()) - binding.vpScrap.setCurrentItem(viewModel.currentPage.value, false) + adapter.submitList(data.reviews.map { it.baseReview }.toList()){ + binding.vpScrap.setCurrentItem(viewModel.currentPage.value, false) + } isLoading = false } @@ -151,8 +152,7 @@ class ScrapDetailPictureFragment : BindingFragment= adapter.itemCount - 2 && (viewModel.scrap.value as UiState.Success).data.hasNext) { + if (!isLoading && position >= adapter.itemCount - 2 && viewModel.scrap.value is UiState.Success && viewModel.detailScrap.value.hasNext) { isLoading = true viewModel.getNextScrapRecord() } diff --git a/presentation/src/main/java/com/dpm/presentation/scrap/viewmodel/ScrapViewModel.kt b/presentation/src/main/java/com/dpm/presentation/scrap/viewmodel/ScrapViewModel.kt index 3808cd22..9c240ce4 100644 --- a/presentation/src/main/java/com/dpm/presentation/scrap/viewmodel/ScrapViewModel.kt +++ b/presentation/src/main/java/com/dpm/presentation/scrap/viewmodel/ScrapViewModel.kt @@ -42,7 +42,7 @@ data class BadReviewData( class ScrapViewModel @Inject constructor( private val homeRepository: HomeRepository, private val viewfinderRepository: ViewfinderRepository, - private val sharedPreference: SharedPreference + private val sharedPreference: SharedPreference, ) : ViewModel() { private var monthsSelected: List = emptyList() @@ -100,12 +100,12 @@ class ScrapViewModel @Inject constructor( } } - fun updateIsFirstLike(isFirstLike : Boolean) { + fun updateIsFirstLike(isFirstLike: Boolean) { sharedPreference.isFirstLike = isFirstLike _isFirstLike.value = isFirstLike } - fun updateIsFirstShare(isFirstShare : Boolean) { + fun updateIsFirstShare(isFirstShare: Boolean) { sharedPreference.isFirstShare = isFirstShare } @@ -114,16 +114,16 @@ class ScrapViewModel @Inject constructor( } fun reloadScrap() { - if(GlobalVariable.isScrap && _scrap.value is UiState.Empty) { + if (GlobalVariable.isScrap && _scrap.value is UiState.Empty) { getScrapRecord() } } fun updateScrapRecord() { - if(_detailScrap.value.reviews.count { it.baseReview.isScrapped } == 0){ + if (_detailScrap.value.reviews.count { it.baseReview.isScrapped } == 0) { _scrap.value = UiState.Empty - }else{ - _scrap.value = UiState.Success( detailScrap.value.copy( + } else { + _scrap.value = UiState.Success(detailScrap.value.copy( reviews = _detailScrap.value.reviews.filter { it.baseReview.isScrapped } )) } @@ -131,6 +131,8 @@ class ScrapViewModel @Inject constructor( fun getNextScrapRecord() { + val data = (_scrap.value as? UiState.Success)?.data ?: return + if (!data.hasNext || data.nextCursor == null) return viewModelScope.launch { homeRepository.getScrap( size = 20, @@ -156,7 +158,14 @@ class ScrapViewModel @Inject constructor( ) _scrap.value = UiState.Success(updatedScrap) val currentDetailScrap = _detailScrap.value.reviews - _detailScrap.value = detailScrap.value.copy(reviews = currentDetailScrap + it.reviews) + _detailScrap.value = + detailScrap.value.copy( + reviews = currentDetailScrap + it.reviews, + nextCursor = it.nextCursor, + hasNext = it.hasNext, + totalScrapCount = it.totalScrapCount, + filter = it.filter + ) }.onFailure {} } } @@ -181,7 +190,7 @@ class ScrapViewModel @Inject constructor( getScrapRecord() } - fun setCurrentPage(page : Int) { + fun setCurrentPage(page: Int) { _currentPage.value = page } @@ -248,11 +257,11 @@ class ScrapViewModel @Inject constructor( } } val updatedDetailList = detailScrap.value.reviews.map { review -> - if(review.baseReview.id == id){ + if (review.baseReview.id == id) { review.copy( baseReview = review.baseReview.copy( isLiked = !review.baseReview.isLiked, - likesCount = if (review.baseReview.isLiked) { + likesCount = if (review.baseReview.isLiked) { review.baseReview.likesCount - 1 } else { review.baseReview.likesCount + 1 @@ -290,7 +299,7 @@ class ScrapViewModel @Inject constructor( } val detailScrapUpdatedList = detailScrap.value.reviews.map { review -> - if(review.baseReview.id == id){ + if (review.baseReview.id == id) { review.copy( baseReview = review.baseReview.copy( isScrapped = !review.baseReview.isScrapped