87 lines
3.4 KiB
Kotlin
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)
|
|
)
|
|
}
|
|
|
|
}
|