88 lines
4.2 KiB
Kotlin
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()
|
|
}
|
|
}
|
|
|
|
} |