Simple-Calendar/app/src/main/kotlin/com/simplemobiletools/calendar/adapters/DayEventsAdapter.kt

123 lines
4.8 KiB
Kotlin

package com.simplemobiletools.calendar.adapters
import android.view.Menu
import android.view.View
import android.view.ViewGroup
import com.simplemobiletools.calendar.R
import com.simplemobiletools.calendar.activities.SimpleActivity
import com.simplemobiletools.calendar.dialogs.DeleteEventDialog
import com.simplemobiletools.calendar.extensions.config
import com.simplemobiletools.calendar.extensions.shareEvents
import com.simplemobiletools.calendar.helpers.Formatter
import com.simplemobiletools.calendar.interfaces.DeleteEventsListener
import com.simplemobiletools.calendar.models.Event
import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter
import com.simplemobiletools.commons.extensions.applyColorFilter
import com.simplemobiletools.commons.extensions.beInvisible
import com.simplemobiletools.commons.extensions.beInvisibleIf
import com.simplemobiletools.commons.views.MyRecyclerView
import kotlinx.android.synthetic.main.event_item_day_view.view.*
class DayEventsAdapter(activity: SimpleActivity, val events: ArrayList<Event>, val listener: DeleteEventsListener?, recyclerView: MyRecyclerView,
itemClick: (Any) -> Unit) : MyRecyclerViewAdapter(activity, recyclerView, itemClick) {
private var allDayString = resources.getString(R.string.all_day)
private var replaceDescriptionWithLocation = activity.config.replaceDescription
override fun getActionMenuId() = R.menu.cab_day
override fun prepareActionMode(menu: Menu) {}
override fun prepareItemSelection(view: View) {}
override fun markItemSelection(select: Boolean, view: View?) {
view?.event_item_frame?.isSelected = select
}
override fun actionItemPressed(id: Int) {
when (id) {
R.id.cab_share -> shareEvents()
R.id.cab_delete -> askConfirmDelete()
}
}
override fun getSelectableItemCount() = events.size
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int) = createViewHolder(R.layout.event_item_day_view, parent)
override fun onBindViewHolder(holder: MyRecyclerViewAdapter.ViewHolder, position: Int) {
val event = events[position]
val view = holder.bindView(event) { itemView, layoutPosition ->
setupView(itemView, event)
}
bindViewHolder(holder, position, view)
}
override fun getItemCount() = events.size
private fun setupView(view: View, event: Event) {
view.apply {
event_section_title.text = event.title
event_item_description.text = if (replaceDescriptionWithLocation) event.location else event.description
event_item_start.text = if (event.getIsAllDay()) allDayString else Formatter.getTimeFromTS(context, event.startTS)
event_item_end.beInvisibleIf(event.startTS == event.endTS)
event_item_color.applyColorFilter(event.color)
if (event.startTS != event.endTS) {
val startCode = Formatter.getDayCodeFromTS(event.startTS)
val endCode = Formatter.getDayCodeFromTS(event.endTS)
event_item_end.apply {
text = Formatter.getTimeFromTS(context, event.endTS)
if (startCode != endCode) {
if (event.getIsAllDay()) {
text = Formatter.getDateFromCode(context, endCode, true)
} else {
append(" (${Formatter.getDateFromCode(context, endCode, true)})")
}
} else if (event.getIsAllDay()) {
beInvisible()
}
}
}
event_item_start.setTextColor(textColor)
event_item_end.setTextColor(textColor)
event_section_title.setTextColor(textColor)
event_item_description.setTextColor(textColor)
}
}
private fun shareEvents() {
val eventIds = ArrayList<Int>(selectedPositions.size)
selectedPositions.forEach {
eventIds.add(events[it].id)
}
activity.shareEvents(eventIds.distinct())
}
private fun askConfirmDelete() {
val eventIds = ArrayList<Int>(selectedPositions.size)
val timestamps = ArrayList<Int>(selectedPositions.size)
selectedPositions.forEach {
eventIds.add(events[it].id)
timestamps.add(events[it].startTS)
}
DeleteEventDialog(activity, eventIds) {
val eventsToDelete = ArrayList<Event>(selectedPositions.size)
selectedPositions.sortedDescending().forEach {
eventsToDelete.add(events[it])
}
events.removeAll(eventsToDelete)
if (it) {
listener?.deleteItems(eventIds)
} else {
listener?.addEventRepeatException(eventIds, timestamps)
}
removeSelectedItems()
}
}
}