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, 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() } } }