conventionschedule-android/app/src/main/java/com/adlerosn/brasilfurfest/schedule/adapters/FavoritesAdapter.kt

87 lines
3.4 KiB
Kotlin

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<Observable<Any?>, Any?>
{
var data = scheduleManager.attendeeFavorites.toList()
override fun update(observable: Observable<Any?>, 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)
)
}
}