diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/adapters/EventsListAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/adapters/EventsListAdapter.kt index a5bb6785e..eeeadc7ec 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/adapters/EventsListAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/adapters/EventsListAdapter.kt @@ -5,12 +5,18 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.BaseAdapter +import android.widget.TextView import com.simplemobiletools.calendar.Formatter import com.simplemobiletools.calendar.R -import com.simplemobiletools.calendar.models.Event +import com.simplemobiletools.calendar.models.ListEvent +import com.simplemobiletools.calendar.models.ListItem +import com.simplemobiletools.calendar.models.ListSection import kotlinx.android.synthetic.main.event_item.view.* -class EventsListAdapter(context: Context, private val mEvents: List) : BaseAdapter() { +class EventsListAdapter(context: Context, private val mEvents: List) : BaseAdapter() { + val ITEM_EVENT = 0 + val ITEM_HEADER = 1 + private val mInflater: LayoutInflater init { @@ -20,30 +26,50 @@ class EventsListAdapter(context: Context, private val mEvents: List) : Ba override fun getView(position: Int, convertView: View?, parent: ViewGroup): View { var view = convertView val viewHolder: ViewHolder + val type = getItemViewType(position) + if (view == null) { - view = mInflater.inflate(R.layout.event_item, parent, false) - viewHolder = ViewHolder(view) + if (type == ITEM_EVENT) { + view = mInflater.inflate(R.layout.event_item, parent, false) + viewHolder = ViewHolder(view) + } else { + view = mInflater.inflate(R.layout.event_section, parent, false) + viewHolder = ViewHolder(view) + } view!!.tag = viewHolder } else { viewHolder = view.tag as ViewHolder } - val event = mEvents[position] - viewHolder.apply { - title.text = event.title - description.text = event.description - start.text = Formatter.getTime(event.startTS) + if (type == ITEM_EVENT) { + val item = mEvents[position] as ListEvent + viewHolder.apply { + title.text = item.title + description?.text = item.description + start?.text = Formatter.getTime(item.startTS) - if (event.startTS == event.endTS) { - end.visibility = View.INVISIBLE - } else { - end.text = Formatter.getTime(event.endTS) + if (item.startTS == item.endTS) { + end?.visibility = View.INVISIBLE + } else { + end?.text = Formatter.getTime(item.endTS) + } } + } else { + val item = mEvents[position] as ListSection + viewHolder.title.text = item.title } return view } + override fun getItemViewType(position: Int): Int { + return if (mEvents[position] is ListEvent) ITEM_EVENT else ITEM_HEADER + } + + override fun getViewTypeCount(): Int { + return 2 + } + override fun getCount(): Int { return mEvents.size } @@ -53,13 +79,13 @@ class EventsListAdapter(context: Context, private val mEvents: List) : Ba } override fun getItemId(position: Int): Long { - return 0 + return position.toLong() } class ViewHolder(view: View) { val title = view.event_item_title - val description = view.event_item_description - val start = view.event_item_start - val end = view.event_item_end + val description: TextView? = view.event_item_description + val start: TextView? = view.event_item_start + val end: TextView? = view.event_item_end } } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/EventListFragment.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/EventListFragment.kt index 41c18c3ff..90b3245b0 100644 --- a/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/EventListFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/fragments/EventListFragment.kt @@ -7,10 +7,14 @@ import android.view.View import android.view.ViewGroup import com.simplemobiletools.calendar.DBHelper import com.simplemobiletools.calendar.R -import com.simplemobiletools.calendar.adapters.EventsAdapter +import com.simplemobiletools.calendar.adapters.EventsListAdapter import com.simplemobiletools.calendar.models.Event +import com.simplemobiletools.calendar.models.ListEvent +import com.simplemobiletools.calendar.models.ListItem import kotlinx.android.synthetic.main.fragment_event_list.view.* import org.joda.time.DateTime +import java.util.* +import kotlin.comparisons.compareBy class EventListFragment : Fragment(), DBHelper.GetEventsListener { lateinit var mView: View @@ -28,7 +32,11 @@ class EventListFragment : Fragment(), DBHelper.GetEventsListener { } override fun gotEvents(events: MutableList) { - val eventsAdapter = EventsAdapter(context, events) + val listItems = ArrayList(events.size) + val sorted = events.sortedWith(compareBy({ it.startTS }, { it.endTS })) + sorted.forEach { listItems.add(ListEvent(it.id, it.startTS, it.endTS, it.title, it.description)) } + + val eventsAdapter = EventsListAdapter(context, listItems) activity?.runOnUiThread { mView.calendar_events_list.adapter = eventsAdapter } diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/models/ListEvent.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/models/ListEvent.kt new file mode 100644 index 000000000..e8e2edf93 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/models/ListEvent.kt @@ -0,0 +1,7 @@ +package com.simplemobiletools.calendar.models + +class ListEvent(var id: Int = 0, var startTS: Int = 0, var endTS: Int = 0, var title: String = "", var description: String = "") : ListItem() { + override fun toString(): String { + return "Event {id=$id, startTS=$startTS, endTS=$endTS, title=$title, description=$description}" + } +} diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/models/ListItem.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/models/ListItem.kt new file mode 100644 index 000000000..41e2ece59 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/models/ListItem.kt @@ -0,0 +1,3 @@ +package com.simplemobiletools.calendar.models + +open class ListItem diff --git a/app/src/main/kotlin/com/simplemobiletools/calendar/models/ListSection.kt b/app/src/main/kotlin/com/simplemobiletools/calendar/models/ListSection.kt new file mode 100644 index 000000000..c31dbb20a --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/calendar/models/ListSection.kt @@ -0,0 +1,7 @@ +package com.simplemobiletools.calendar.models + +class ListSection(val title: String, val isToday: Boolean) : ListItem() { + override fun toString(): String { + return "ListSection {title=$title, isToday=$isToday}" + } +} diff --git a/app/src/main/res/layout/event_section.xml b/app/src/main/res/layout/event_section.xml new file mode 100644 index 000000000..e3a462550 --- /dev/null +++ b/app/src/main/res/layout/event_section.xml @@ -0,0 +1,7 @@ + +