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

146 lines
6.6 KiB
Kotlin
Raw Normal View History

2018-12-12 04:30:34 +00:00
package com.adlerosn.brasilfurfest.schedule.adapters
import android.app.Activity
import android.content.Intent
import android.content.res.ColorStateList
import android.support.v4.content.ContextCompat
import android.support.v7.util.DiffUtil
import android.support.v7.widget.RecyclerView
import android.view.View
import android.view.ViewGroup
import com.adlerosn.brasilfurfest.R
import com.adlerosn.brasilfurfest.helper.*
import com.adlerosn.brasilfurfest.schedule.EventActivity
2018-12-13 02:04:29 +00:00
import com.adlerosn.brasilfurfest.schedule.managers.ScheduleManager
2018-12-12 04:30:34 +00:00
import com.adlerosn.brasilfurfest.schedule.abstractDataTypes.dataholder.PeekableEvent
import com.adlerosn.brasilfurfest.schedule.abstractDataTypes.managed.AttendeeConFavorite
2018-12-13 02:04:29 +00:00
import com.adlerosn.brasilfurfest.schedule.viewHolders.RecyclerViewHolder
2018-12-12 04:30:34 +00:00
import kotlinx.android.synthetic.main.activity_search_filter_circle.view.*
import kotlinx.android.synthetic.main.activity_search_filter_item.view.*
import java.text.SimpleDateFormat
class PeekableEventRecyclerViewAdapter(
var items: MutableList<PeekableEvent>,
val scheduleManager: ScheduleManager,
val activity: Activity,
val triggerViewRefresh: ()->Unit
): RecyclerViewAdapter() {
2018-12-12 04:30:34 +00:00
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerViewHolder {
return RecyclerViewHolder(parent.context.layoutInflater.inflate(R.layout.activity_search_filter_item))
}
fun onDataChanged(newData: List<PeekableEvent>){
val oldData = items
activity.runOnUiThread {
items = newData.toMutableList()
val diff = DiffUtil.calculateDiff(ListDiffCallback(oldData, newData))
diff.dispatchUpdatesTo(this)
}
}
override fun getItemCount(): Int = items.size
override fun onBindViewHolder(holder: RecyclerViewHolder, position: Int) {
val it = items[position]
holder.itemView.apply {
val dowFormatter = SimpleDateFormat("E", context.runtimeLanguage.locale)
val hourMinuteFormatter = SimpleDateFormat("HH:mm", context.runtimeLanguage.locale)
2018-12-28 00:28:48 +00:00
eventTitle.text = it.title.solved
2018-12-12 04:30:34 +00:00
startDay.text = dowFormatter.format(it.timeRange.start.timeInMillis).capitalize()
startText.text = hourMinuteFormatter.format(it.timeRange.start.timeInMillis)
finishText.text = hourMinuteFormatter.format(it.timeRange.finish.timeInMillis)
val ccls = circles!!
ccls.removeAllViews()
it.tags?.forEach {
context.layoutInflater.inflate(R.layout.activity_search_filter_circle).apply {
tag_color.imageTintList = ColorStateList.valueOf(it.color)
ccls.addView(this)
}
}
it.places?.forEach {
context.layoutInflater.inflate(R.layout.activity_search_filter_circle).apply {
tag_color.imageTintList = ColorStateList.valueOf(it.color)
ccls.addView(this)
}
}
context.layoutInflater.inflate(R.layout.activity_search_filter_circle).apply {
tag_color.imageTintList = ColorStateList.valueOf(0x00000000)
ccls.addView(this)
}
if (it.language == null) {
flag.visibility = View.INVISIBLE
} else {
flag.visibility = View.VISIBLE
flag.setImageDrawable(ContextCompat.getDrawable(context, it.language.drawableId))
}
val favorites = scheduleManager.attendeeFavorites.toList()
val event = scheduleManager.convention.events.firstOrNull { ev -> ev.conbookId == it.id }
val showsStar = event?.let{
2018-12-28 00:28:48 +00:00
scheduleManager.canAttend(it)
2018-12-12 04:30:34 +00:00
&& !it.hiddenFromTimeTable
} ?: true
var hasStar = favorites.any { fav -> it.similarEnough(fav, context) }
if (showsStar)
starImage.visibility = View.VISIBLE
else
starImage.visibility = View.INVISIBLE
if (hasStar)
starImage.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_star_black_24dp))
else
starImage.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_star_border_black_24dp))
val starValue = if(!showsStar) null else hasStar
this.starButton.setOnClickListener { _ ->
if(showsStar){
2018-12-12 04:45:36 +00:00
if(hasStar) {
starImage.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_star_border_black_24dp))
hasStar = false
2018-12-12 04:30:34 +00:00
scheduleManager.attendeeFavorites.toList().firstOrNull { fav ->
it.similarEnough(fav, context)
}?.let {
scheduleManager.attendeeFavorites.remove(it).apply {
triggerViewRefresh()
}
}
2018-12-12 04:45:36 +00:00
}
else {
starImage.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_star_black_24dp))
hasStar = true
2018-12-12 04:30:34 +00:00
event?.let {
scheduleManager.attendeeFavorites.add(
AttendeeConFavorite(
scheduleManager.convention,
it
)
).apply {
triggerViewRefresh()
}
}
2018-12-12 04:45:36 +00:00
}
2018-12-12 04:30:34 +00:00
}
}
this.setOnClickListener { _ ->
val favorite = scheduleManager.attendeeFavorites.toList().firstOrNull {
fav -> it.similarEnough(fav, context)
} ?: AttendeeConFavorite(
scheduleManager.convention,
event!!
)
activity.startActivity(
Intent(activity, EventActivity::class.java).apply {
putExtra("favorite", favorite)
putExtra("offerStar", showsStar)
}
)
}
bindPeekAndPop(
activity,
this as ViewGroup,
this,
starValue,
{this.starButton.callOnClick()},
{this.callOnClick()},
it
)
}
}
}