/** * Created by Yosua on 30/10/2023 */ class MyLearningCourseAdapter( private val selectedProgram: String? = "", private val isHistoryPage: Boolean = false ) : PagingDataAdapter( DiffCallback ) { var courseListener: CourseListener? = null var searchOtherCourseListener: SearchOtherCourseListener? = null object DiffCallback : DiffUtil.ItemCallback() { override fun areItemsTheSame( oldItem: ModelResponseGetMyLearningCourse.LearningCourse, newItem: ModelResponseGetMyLearningCourse.LearningCourse ): Boolean { return oldItem.id == newItem.id } override fun areContentsTheSame( oldItem: ModelResponseGetMyLearningCourse.LearningCourse, newItem: ModelResponseGetMyLearningCourse.LearningCourse ): Boolean { return oldItem == newItem } } inner class CourseViewHolder(val binding: ItemCourseBinding) : RecyclerView.ViewHolder(binding.root) { fun bindData(course: ModelResponseGetMyLearningCourse.LearningCourse) { } } inner class SearchOtherCourseViewHolder(val binding: LayoutSearchOtherCourseBinding) : RecyclerView.ViewHolder(binding.root) { fun bindData() { binding.apply { btnSearchOtherCourse.setOnClickListener { searchOtherCourseListener?.onSearchOtherCourseSelected() } } } } override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { if (itemCount > 1) { if (holder.itemViewType == VIEW_TYPE_SEARCH_OTHER_COURSE) { val searchOtherCourseViewHolder = holder as SearchOtherCourseViewHolder searchOtherCourseViewHolder.bindData() } else { val item = getItem(position) if (item != null) { val courseViewHolder = holder as CourseViewHolder courseViewHolder.bindData(item) } } } } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { return when (viewType) { VIEW_TYPE_SEARCH_OTHER_COURSE -> { val binding = LayoutSearchOtherCourseBinding.inflate(LayoutInflater.from(parent.context), parent,false) SearchOtherCourseViewHolder(binding) } else -> { val binding = ItemCourseBinding.inflate(LayoutInflater.from(parent.context), parent, false) CourseViewHolder(binding) } } } override fun getItemViewType(position: Int): Int { return if (isHistoryPage && position == itemCount - 1) { VIEW_TYPE_SEARCH_OTHER_COURSE } else { VIEW_TYPE_COURSE } } override fun getItemCount(): Int { return if (isHistoryPage) { super.getItemCount() + 1 } else { super.getItemCount() } } interface CourseListener { fun onCourseSelected(course: ModelResponseGetMyLearningCourse.LearningCourse) } interface SearchOtherCourseListener { fun onSearchOtherCourseSelected() } companion object { const val VIEW_TYPE_COURSE = 1 const val VIEW_TYPE_SEARCH_OTHER_COURSE = 2 } }