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

88 lines
4.2 KiB
Kotlin

package com.adlerosn.brasilfurfest.schedule.adapters
import android.app.Activity
import android.app.AlertDialog
import android.view.ViewGroup
import android.widget.ListView
import com.adlerosn.brasilfurfest.R
import com.adlerosn.brasilfurfest.helper.formatAsHoursAndMinutes
import com.adlerosn.brasilfurfest.helper.getString
import com.adlerosn.brasilfurfest.helper.layoutInflater
import com.adlerosn.brasilfurfest.schedule.abstractDataTypes.GregorianCalendarRange
import com.adlerosn.brasilfurfest.schedule.managers.ScheduleManager
import com.adlerosn.brasilfurfest.schedule.viewHolders.RecyclerStickyViewHolder
import com.adlerosn.brasilfurfest.schedule.viewHolders.RecyclerViewHolder
import com.brandongogetap.stickyheaders.exposed.StickyHeader
import com.brandongogetap.stickyheaders.exposed.StickyHeaderHandler
import kotlinx.android.synthetic.main.listitem_schedule_eventlist.view.*
import kotlinx.android.synthetic.main.listitem_schedule_eventlist_subitem_header.view.*
class DayHoursAdapter(
private val activity: Activity,
private val dayParts: List<GregorianCalendarRange>,
private val scheduleManager: ScheduleManager
) : RecyclerViewAdapter(), StickyHeaderHandler {
private val data = dayParts.flatMap { listOf(object : StickyHeader{}, it) }.toMutableList()
override fun getAdapterData() = data
override fun getItemCount(): Int = data.size
override fun getItemViewType(position: Int): Int = position%2
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerViewHolder {
return when(viewType){
0 -> RecyclerStickyViewHolder(parent.context.layoutInflater.inflate(R.layout.listitem_schedule_eventlist_subitem_header, parent, false))
else -> RecyclerViewHolder(parent.context.layoutInflater.inflate(R.layout.listitem_schedule_eventlist, parent, false).apply {
//timeFragmentList.layoutManager = LinearLayoutManager(context)
//timeFragmentList.adapter = DayHourEventsAdapter(mutableListOf(), mutableListOf(), activity)
})
}
}
// init {
// setHasStableIds(true)
// }
// override fun getItemId(position: Int) : Long = position.toLong()
override fun onBindViewHolder(holder: RecyclerViewHolder, position: Int) {
if (getItemViewType(position)==0)
onBindHeaderViewHolder(holder, position/2)
else
onBindItemViewHolder(holder, position/2)
}
private fun onBindItemViewHolder(holder: RecyclerViewHolder, position: Int) {
val dayPart = dayParts[position]
val events = scheduleManager.convention.events.toList()
.filter { it.timeRange.start in dayPart }.filterNot { it.hiddenFromTimeTable }
val customFavorites = scheduleManager.attendeeFavorites.toList()
.filter { it.timeRange.start in dayPart }.filter { it.isCustom }
val adapter = DayHourEventsAdapter(events, customFavorites, activity)
val viewGroup = holder.itemView.timeFragmentList
viewGroup.removeAllViews()
(0 until adapter.itemCount).forEach {
val vh = adapter.onCreateViewHolder(viewGroup, 0)
adapter.onBindViewHolder(vh, it)
viewGroup.addView(vh.itemView)
}
//(holder.itemView.timeFragmentList.adapter!! as DayHourEventsAdapter).onDataChanged(events, customFavorites)
}
private fun onBindHeaderViewHolder(holder: RecyclerViewHolder, position: Int) {
val dayPart = dayParts[position]
val start = dayPart.start.timeInMillis.formatAsHoursAndMinutes()
val finish = dayPart.finish.timeInMillis.formatAsHoursAndMinutes()
holder.itemView.time.text = start
holder.itemView.addButton.setOnClickListener {
val dialog = AlertDialog.Builder(activity).create()
dialog.setTitle(R.string.schedule_add_what.getString().format(start, finish))
val listView = ListView(activity)
listView.adapter = HourlyPlannedEventDialogListAdapter(dialog, dayPart)
dialog.setView(listView)
dialog.setButton(AlertDialog.BUTTON_NEUTRAL, R.string.dialog_cancel.getString()) { _, _ -> dialog.dismiss() }
dialog.show()
}
}
}