mirror of
https://github.com/SimpleMobileTools/Simple-Calendar.git
synced 2025-02-20 05:30:40 +01:00
rewriting FilterEventTypeAdapter
This commit is contained in:
parent
28aab35b4c
commit
61f637c03e
@ -1,7 +1,7 @@
|
|||||||
package com.simplemobiletools.calendar.adapters
|
package com.simplemobiletools.calendar.adapters
|
||||||
|
|
||||||
import android.support.v7.widget.RecyclerView
|
import android.support.v7.widget.RecyclerView
|
||||||
import android.view.LayoutInflater
|
import android.util.SparseArray
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import com.simplemobiletools.calendar.R
|
import com.simplemobiletools.calendar.R
|
||||||
@ -9,64 +9,76 @@ import com.simplemobiletools.calendar.activities.SimpleActivity
|
|||||||
import com.simplemobiletools.calendar.extensions.config
|
import com.simplemobiletools.calendar.extensions.config
|
||||||
import com.simplemobiletools.calendar.models.EventType
|
import com.simplemobiletools.calendar.models.EventType
|
||||||
import com.simplemobiletools.commons.extensions.setBackgroundWithStroke
|
import com.simplemobiletools.commons.extensions.setBackgroundWithStroke
|
||||||
|
import com.simplemobiletools.commons.interfaces.MyAdapterListener
|
||||||
import kotlinx.android.synthetic.main.filter_event_type_view.view.*
|
import kotlinx.android.synthetic.main.filter_event_type_view.view.*
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
class FilterEventTypeAdapter(val activity: SimpleActivity, val mItems: List<EventType>, mDisplayEventTypes: Set<String>) :
|
class FilterEventTypeAdapter(val activity: SimpleActivity, val eventTypes: List<EventType>, val displayEventTypes: Set<String>) :
|
||||||
RecyclerView.Adapter<FilterEventTypeAdapter.ViewHolder>() {
|
RecyclerView.Adapter<FilterEventTypeAdapter.ViewHolder>() {
|
||||||
val views = ArrayList<View>()
|
private val itemViews = SparseArray<View>()
|
||||||
|
private val selectedPositions = HashSet<Int>()
|
||||||
companion object {
|
|
||||||
var textColor = 0
|
|
||||||
lateinit var displayEventTypes: Set<String>
|
|
||||||
lateinit var selectedItems: ArrayList<String>
|
|
||||||
}
|
|
||||||
|
|
||||||
init {
|
init {
|
||||||
textColor = activity.config.textColor
|
eventTypes.forEachIndexed { index, eventType ->
|
||||||
displayEventTypes = mDisplayEventTypes
|
if (displayEventTypes.contains(eventType.id.toString())) {
|
||||||
selectedItems = ArrayList()
|
selectedPositions.add(index)
|
||||||
displayEventTypes.mapTo(selectedItems, { it })
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun toggleItemSelection(select: Boolean, pos: Int) {
|
||||||
|
if (select) {
|
||||||
|
if (itemViews[pos] != null) {
|
||||||
|
selectedPositions.add(pos)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
selectedPositions.remove(pos)
|
||||||
|
}
|
||||||
|
|
||||||
|
itemViews[pos]?.filter_event_type_checkbox?.isChecked = select
|
||||||
|
}
|
||||||
|
|
||||||
|
private val adapterListener = object : MyAdapterListener {
|
||||||
|
override fun toggleItemSelectionAdapter(select: Boolean, position: Int) {
|
||||||
|
toggleItemSelection(select, position)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getSelectedPositions() = selectedPositions
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getSelectedItemsSet(): HashSet<String> {
|
fun getSelectedItemsSet(): HashSet<String> {
|
||||||
val selectedItemsSet = HashSet<String>(selectedItems.size)
|
val selectedItemsSet = HashSet<String>(selectedPositions.size)
|
||||||
selectedItems.mapTo(selectedItemsSet, { it })
|
selectedPositions.forEach { selectedItemsSet.add(eventTypes[it].id.toString()) }
|
||||||
return selectedItemsSet
|
return selectedItemsSet
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder {
|
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder {
|
||||||
val view = LayoutInflater.from(parent?.context).inflate(R.layout.filter_event_type_view, parent, false)
|
val view = activity.layoutInflater.inflate(R.layout.filter_event_type_view, parent, false)
|
||||||
return ViewHolder(activity, view)
|
return ViewHolder(view, adapterListener, activity)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
|
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
|
||||||
views.add(holder.bindView(mItems[position]))
|
val eventType = eventTypes[position]
|
||||||
|
itemViews.put(position, holder.bindView(eventType))
|
||||||
|
toggleItemSelection(selectedPositions.contains(position), position)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getItemCount() = mItems.size
|
override fun getItemCount() = eventTypes.size
|
||||||
|
|
||||||
class ViewHolder(val activity: SimpleActivity, view: View) : RecyclerView.ViewHolder(view) {
|
class ViewHolder(view: View, val adapterListener: MyAdapterListener, val activity: SimpleActivity) : RecyclerView.ViewHolder(view) {
|
||||||
fun bindView(eventType: EventType): View {
|
fun bindView(eventType: EventType): View {
|
||||||
val id = eventType.id.toString()
|
|
||||||
itemView.apply {
|
itemView.apply {
|
||||||
filter_event_type_checkbox.setColors(activity.config.textColor, activity.config.primaryColor, activity.config.backgroundColor)
|
filter_event_type_checkbox.setColors(activity.config.textColor, activity.config.primaryColor, activity.config.backgroundColor)
|
||||||
filter_event_type_checkbox.text = eventType.getDisplayTitle()
|
filter_event_type_checkbox.text = eventType.getDisplayTitle()
|
||||||
filter_event_type_color.setBackgroundWithStroke(eventType.color, activity.config.backgroundColor)
|
filter_event_type_color.setBackgroundWithStroke(eventType.color, activity.config.backgroundColor)
|
||||||
|
filter_event_type_holder.setOnClickListener { viewClicked(!filter_event_type_checkbox.isChecked) }
|
||||||
filter_event_type_holder.setOnClickListener {
|
|
||||||
filter_event_type_checkbox.toggle()
|
|
||||||
if (filter_event_type_checkbox.isChecked) {
|
|
||||||
selectedItems.add(id)
|
|
||||||
} else {
|
|
||||||
selectedItems.remove(id)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
filter_event_type_checkbox.isChecked = displayEventTypes.contains(id)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return itemView
|
return itemView
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun viewClicked(select: Boolean) {
|
||||||
|
adapterListener.toggleItemSelectionAdapter(select, adapterPosition)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user