package com.adlerosn.brasilfurfest.schedule.adapters import android.app.Activity import android.content.Intent import androidx.recyclerview.widget.DiffUtil import android.view.View import android.view.ViewGroup import com.adlerosn.brasilfurfest.R import com.adlerosn.brasilfurfest.helper.* import com.adlerosn.brasilfurfest.helper.observables.Observable import com.adlerosn.brasilfurfest.helper.observables.Observer import com.adlerosn.brasilfurfest.schedule.EventActivity import com.adlerosn.brasilfurfest.schedule.managers.ScheduleManager import com.adlerosn.brasilfurfest.schedule.abstractDataTypes.dataholder.PeekableEvent import com.adlerosn.brasilfurfest.schedule.viewHolders.RecyclerViewHolder import kotlinx.android.synthetic.main.activity_favorites_item.view.* class FavoritesAdapter( private val activity: Activity, private val scheduleManager: ScheduleManager ) : RecyclerViewAdapter(), Observer, Any?> { var data = scheduleManager.attendeeFavorites.toList() override fun update(observable: Observable, args: Any?) = onDataChanged() private fun onDataChanged(){ val oldData = data val newData = scheduleManager.attendeeFavorites.toList() activity.runOnUiThread { data = newData val diff = DiffUtil.calculateDiff(ListDiffCallback(oldData, newData)) diff.dispatchUpdatesTo(this) } } override fun getItemCount(): Int = data.size override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerViewHolder = RecyclerViewHolder(parent.context.layoutInflater.inflate(R.layout.activity_favorites_item)) override fun onBindViewHolder(holder: RecyclerViewHolder, position: Int) { val favorite = data[position] val view = holder.itemView view.startDay.text = favorite.timeRange.start.timeInMillis.formatAsDayOfWeek().toLowerCase().capitalize() view.startText.text = favorite.timeRange.start.timeInMillis.formatAsHoursAndMinutes() view.finishText.text = favorite.timeRange.finish.timeInMillis.formatAsHoursAndMinutes() view.eventTitle.text = favorite.getString() view.eventSubtitle.text = favorite.getSecondaryString() val event = favorite.findInConvention(scheduleManager.convention) if(event?.language == null){ view.flag.visibility = View.GONE }else{ view.flag.visibility = View.VISIBLE view.flag.setImageResource(event.language.drawableId) } view.setOnClickListener { activity.startActivity( Intent(activity, EventActivity::class.java).apply { putExtra("favorite", favorite) putExtra("offerStar", false) } ) } view.starButton.setOnClickListener { scheduleManager.attendeeFavorites.remove(favorite) onDataChanged() } bindPeekAndPop( activity, view as ViewGroup, view, true, {view.starButton.callOnClick()}, {view.callOnClick()}, scheduleManager.convention.events.firstOrNull { it.conbookId == favorite.conBookId }?.let { PeekableEvent(it) } ?: PeekableEvent(favorite) ) } }