conventionschedule-android/app/src/main/java/com/adlerosn/brasilfurfest/schedule/fragments/ConventionDayFragment.kt

92 lines
4.3 KiB
Kotlin
Raw Normal View History

2018-12-13 02:04:29 +00:00
package com.adlerosn.brasilfurfest.schedule.fragments
2018-07-13 21:09:43 +00:00
import android.os.Bundle
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.LinearLayoutManager
2018-07-13 21:09:43 +00:00
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.adlerosn.brasilfurfest.R
2018-12-12 04:30:34 +00:00
import com.adlerosn.brasilfurfest.helper.ActivitiesForFragments
2018-07-17 19:38:11 +00:00
import com.adlerosn.brasilfurfest.helper.dayRange
2019-05-23 14:58:10 +00:00
import com.adlerosn.brasilfurfest.helper.observables.Observer
2018-07-13 21:09:43 +00:00
import com.adlerosn.brasilfurfest.schedule.abstractDataTypes.GregorianCalendarRange
import com.adlerosn.brasilfurfest.schedule.adapters.DayHoursAdapter
2018-12-28 00:28:48 +00:00
import com.adlerosn.brasilfurfest.schedule.adapters.EmptyRecyclerViewAdapter
2018-12-13 02:04:29 +00:00
import com.adlerosn.brasilfurfest.schedule.managers.ScheduleManagerGetter
2018-07-13 21:09:43 +00:00
import com.brandongogetap.stickyheaders.StickyLayoutManager
import kotlinx.android.synthetic.main.fragment_schedule_day.view.*
2018-12-28 00:28:48 +00:00
import org.jetbrains.anko.doAsync
import org.jetbrains.anko.uiThread
2018-07-13 21:09:43 +00:00
class ConventionDayFragment : Fragment() {
companion object {
2018-12-13 02:04:29 +00:00
fun newInstance(day: GregorianCalendarRange): Fragment {
2018-07-13 21:09:43 +00:00
return ConventionDayFragment().apply {
arguments = Bundle().apply {
putSerializable("dayRange", day)
}
}
}
}
2018-12-28 00:28:48 +00:00
private val safeActivity = ActivitiesForFragments["ScheduleActivity"]!!
private val scheduleManager = ScheduleManagerGetter[safeActivity]
2018-07-13 21:09:43 +00:00
lateinit var day: GregorianCalendarRange
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val rootView = inflater.inflate(R.layout.fragment_schedule_day, container, false)
2018-12-28 00:28:48 +00:00
rootView.stickyDays.adapter = EmptyRecyclerViewAdapter()
rootView.stickyDays.layoutManager = LinearLayoutManager(rootView.context)
doAsync {
arguments?.apply {
day = getSerializable("dayRange")!! as GregorianCalendarRange
}
val adapter = DayHoursAdapter(
safeActivity,
day.split(
scheduleManager.convention.splitDayIn
).filter {
val today = scheduleManager.convention.days.first { conDay ->
it in conDay.dayRange
}.dayRange
if(scheduleManager.convention.paddingStartOfDayMillis <= scheduleManager.convention.paddingEndOfDayMillis) {
val today1 = GregorianCalendarRange(
today.start.timeInMillis+scheduleManager.convention.paddingStartOfDayMillis,
today.start.timeInMillis+scheduleManager.convention.paddingEndOfDayMillis
)
it in today1
} else {
val today1 = GregorianCalendarRange(
today.start.timeInMillis,
today.start.timeInMillis+scheduleManager.convention.paddingEndOfDayMillis
)
val today2 = GregorianCalendarRange(
today.start.timeInMillis+scheduleManager.convention.paddingStartOfDayMillis,
today.finish.timeInMillis
)
it in today1 || it in today2
}
}.filter {
it.start >= scheduleManager.convention.startCalendarOn
}.filter {
it.start < scheduleManager.convention.endCalendarOn
},
scheduleManager
)
val layoutManager = StickyLayoutManager(context!!, adapter)
layoutManager.elevateHeaders(3)
uiThread {
rootView.stickyDays.adapter = adapter
rootView.stickyDays.layoutManager = layoutManager
}
scheduleManager.addObserver(Observer { _, _: Any? ->
2018-12-28 00:28:48 +00:00
(0..(adapter.itemCount - 1)).forEach { pos: Int ->
safeActivity.runOnUiThread {
adapter.notifyItemChanged(pos)
}
2018-07-14 19:43:24 +00:00
}
})
2018-07-13 21:09:43 +00:00
}
return rootView
}
}