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

88 lines
4.2 KiB
Kotlin
Raw Normal View History

2018-07-13 21:09:43 +00:00
package com.adlerosn.brasilfurfest.schedule.adapters
2018-12-12 04:30:34 +00:00
import android.app.Activity
import android.app.AlertDialog
2018-07-13 21:09:43 +00:00
import android.view.ViewGroup
import android.widget.ListView
2018-07-13 21:09:43 +00:00
import com.adlerosn.brasilfurfest.R
2018-12-28 00:28:48 +00:00
import com.adlerosn.brasilfurfest.helper.formatAsHoursAndMinutes
import com.adlerosn.brasilfurfest.helper.getString
import com.adlerosn.brasilfurfest.helper.layoutInflater
2018-07-13 21:09:43 +00:00
import com.adlerosn.brasilfurfest.schedule.abstractDataTypes.GregorianCalendarRange
2018-12-28 00:28:48 +00:00
import com.adlerosn.brasilfurfest.schedule.managers.ScheduleManager
2018-12-13 02:04:29 +00:00
import com.adlerosn.brasilfurfest.schedule.viewHolders.RecyclerStickyViewHolder
import com.adlerosn.brasilfurfest.schedule.viewHolders.RecyclerViewHolder
2018-07-13 21:09:43 +00:00
import com.brandongogetap.stickyheaders.exposed.StickyHeader
import com.brandongogetap.stickyheaders.exposed.StickyHeaderHandler
import kotlinx.android.synthetic.main.listitem_schedule_eventlist.view.*
2018-12-28 00:28:48 +00:00
import kotlinx.android.synthetic.main.listitem_schedule_eventlist_subitem_header.view.*
2018-07-13 21:09:43 +00:00
class DayHoursAdapter(
2018-12-12 04:30:34 +00:00
private val activity: Activity,
2018-07-13 21:09:43 +00:00
private val dayParts: List<GregorianCalendarRange>,
2018-12-28 00:28:48 +00:00
private val scheduleManager: ScheduleManager
) : RecyclerViewAdapter(), StickyHeaderHandler {
2018-07-13 21:09:43 +00:00
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))
2018-12-28 00:28:48 +00:00
else -> RecyclerViewHolder(parent.context.layoutInflater.inflate(R.layout.listitem_schedule_eventlist, parent, false).apply {
//timeFragmentList.layoutManager = LinearLayoutManager(context)
//timeFragmentList.adapter = DayHourEventsAdapter(mutableListOf(), mutableListOf(), activity)
})
2018-07-13 21:09:43 +00:00
}
}
2018-12-28 00:28:48 +00:00
// init {
// setHasStableIds(true)
// }
// override fun getItemId(position: Int) : Long = position.toLong()
2018-07-13 21:09:43 +00:00
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]
2018-12-28 00:28:48 +00:00
val events = scheduleManager.convention.events.toList()
.filter { it.timeRange.start in dayPart }.filterNot { it.hiddenFromTimeTable }
val customFavorites = scheduleManager.attendeeFavorites.toList()
2018-12-28 00:28:48 +00:00
.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)
2018-07-13 21:09:43 +00:00
}
2018-12-28 00:28:48 +00:00
//(holder.itemView.timeFragmentList.adapter!! as DayHourEventsAdapter).onDataChanged(events, customFavorites)
2018-07-13 21:09:43 +00:00
}
private fun onBindHeaderViewHolder(holder: RecyclerViewHolder, position: Int) {
val dayPart = dayParts[position]
2018-12-28 00:28:48 +00:00
val start = dayPart.start.timeInMillis.formatAsHoursAndMinutes()
val finish = dayPart.finish.timeInMillis.formatAsHoursAndMinutes()
2018-07-13 21:09:43 +00:00
holder.itemView.time.text = start
holder.itemView.addButton.setOnClickListener {
val dialog = AlertDialog.Builder(activity).create()
2018-12-28 00:28:48 +00:00
dialog.setTitle(R.string.schedule_add_what.getString().format(start, finish))
val listView = ListView(activity)
2018-12-28 00:28:48 +00:00
listView.adapter = HourlyPlannedEventDialogListAdapter(dialog, dayPart)
dialog.setView(listView)
2018-12-28 00:28:48 +00:00
dialog.setButton(AlertDialog.BUTTON_NEUTRAL, R.string.dialog_cancel.getString()) { _, _ -> dialog.dismiss() }
dialog.show()
}
2018-07-13 21:09:43 +00:00
}
}