diff --git a/app/src/main/java/com/lionheart/presentation/course/CourseDetailActivity.kt b/app/src/main/java/com/lionheart/presentation/course/CourseDetailActivity.kt index 9382884..ba1b5f1 100644 --- a/app/src/main/java/com/lionheart/presentation/course/CourseDetailActivity.kt +++ b/app/src/main/java/com/lionheart/presentation/course/CourseDetailActivity.kt @@ -47,7 +47,12 @@ class CourseDetailActivity : private fun initRecyclerView() { _courseWeeklyTitleAdapter = CourseDetailTitleAdapter(viewModel.tempHeader) - _courseWeeklyAdapter = CourseDetailAdapter() + _courseWeeklyAdapter = CourseDetailAdapter { articleId, switching -> + viewModel.switchBookmark( + articleId, + switching, + ) + } getWeeklyArticleState() with(binding.rvCourseWeekly) { diff --git a/app/src/main/java/com/lionheart/presentation/course/CourseDetailAdapter.kt b/app/src/main/java/com/lionheart/presentation/course/CourseDetailAdapter.kt index a824342..b1a772c 100644 --- a/app/src/main/java/com/lionheart/presentation/course/CourseDetailAdapter.kt +++ b/app/src/main/java/com/lionheart/presentation/course/CourseDetailAdapter.kt @@ -9,7 +9,9 @@ import com.lionheart.core.view.ItemDiffCallback import com.lionheart.databinding.ItemCourseDetailThumbnailBinding import com.lionheart.domain.entity.Article -class CourseDetailAdapter : +class CourseDetailAdapter( + private val onClickBookmark: (articleId: Long, switching: Boolean) -> Unit, +) : ListAdapter(diffUtil) { private val bookmarkStatus = SparseBooleanArray() @@ -20,7 +22,11 @@ class CourseDetailAdapter : } override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { - (holder as CourseWeeklyViewHolder).onBind(getItem(position), bookmarkStatus) + (holder as CourseWeeklyViewHolder).onBind( + getItem(position), + bookmarkStatus, + onClickBookmark, + ) } companion object { @@ -33,21 +39,29 @@ class CourseDetailAdapter : class CourseWeeklyViewHolder(private val binding: ItemCourseDetailThumbnailBinding) : RecyclerView.ViewHolder(binding.root) { - fun onBind(data: Article, bookmarkStatus: SparseBooleanArray) { + fun onBind( + data: Article, + bookmarkStatus: SparseBooleanArray, + onClickBookmark: (articleId: Long, switching: Boolean) -> Unit, + ) { binding.data = data bookmarkStatus.put(layoutPosition, data.isMarked) - initBookmark(data, bookmarkStatus) + initBookmark(data, bookmarkStatus, onClickBookmark) } - private fun initBookmark(data: Article, bookmarkStatus: SparseBooleanArray) { + private fun initBookmark( + data: Article, + bookmarkStatus: SparseBooleanArray, + onClickBookmark: (articleId: Long, switching: Boolean) -> Unit, + ) { with(binding.btnCourseWeeklyThumbnailBookmark) { isSelected = data.isMarked setOnClickListener { bookmarkStatus.put(position, isSelected) isSelected = isSelected.not() // 북마크 저장 작업 + onClickBookmark(data.articleId, isSelected) } } } } - diff --git a/app/src/main/java/com/lionheart/presentation/course/CourseDetailViewModel.kt b/app/src/main/java/com/lionheart/presentation/course/CourseDetailViewModel.kt index 824a988..8575694 100644 --- a/app/src/main/java/com/lionheart/presentation/course/CourseDetailViewModel.kt +++ b/app/src/main/java/com/lionheart/presentation/course/CourseDetailViewModel.kt @@ -55,4 +55,10 @@ class CourseDetailViewModel @Inject constructor( } } } + + fun switchBookmark(articleId: Long, switching: Boolean) { + viewModelScope.launch { + articleRepository.switchBookmark(articleId, switching) + } + } } diff --git a/app/src/main/java/com/lionheart/presentation/course/CourseViewModel.kt b/app/src/main/java/com/lionheart/presentation/course/CourseViewModel.kt index 34befd5..048e4e9 100644 --- a/app/src/main/java/com/lionheart/presentation/course/CourseViewModel.kt +++ b/app/src/main/java/com/lionheart/presentation/course/CourseViewModel.kt @@ -12,6 +12,7 @@ import com.lionheart.core.uistate.UiState.Success import com.lionheart.data.repository.CourseRepositoryImpl import com.lionheart.domain.entity.Course import com.lionheart.domain.entity.CurriculumProgress +import com.lionheart.domain.repository.ArticleRepository import com.lionheart.domain.repository.CourseRepository import com.lionheart.domain.repository.CurriculumRepository import com.lionheart.presentation.search.category.SearchDetailViewModel.Companion.NETWORK_ERROR