You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tasks/app/src/main/java/com/todoroo/astrid/adapter/FilterViewHolder.kt

111 lines
3.5 KiB
Kotlin

package com.todoroo.astrid.adapter
import android.app.Activity
import android.view.View
import android.widget.CheckedTextView
import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import butterknife.BindView
import butterknife.ButterKnife
import com.todoroo.astrid.api.*
import org.tasks.R
import org.tasks.billing.Inventory
import org.tasks.filters.PlaceFilter
import org.tasks.locale.Locale
import org.tasks.themes.ColorProvider
import org.tasks.themes.CustomIcons.getIconResId
import org.tasks.themes.DrawableUtil
class FilterViewHolder : RecyclerView.ViewHolder {
@BindView(R.id.row)
lateinit var row: View
@BindView(R.id.text)
lateinit var text: CheckedTextView
@BindView(R.id.icon)
lateinit var icon: ImageView
@BindView(R.id.size)
lateinit var size: TextView
private var onClick: ((FilterListItem?) -> Unit)? = null
private var navigationDrawer = false
private var locale: Locale? = null
private var activity: Activity? = null
private var inventory: Inventory? = null
private var colorProvider: ColorProvider? = null
internal constructor(
itemView: View,
navigationDrawer: Boolean,
locale: Locale,
activity: Activity,
inventory: Inventory,
colorProvider: ColorProvider,
onClick: ((FilterListItem?) -> Unit)?) : super(itemView) {
this.inventory = inventory
this.colorProvider = colorProvider
ButterKnife.bind(this, itemView)
this.navigationDrawer = navigationDrawer
this.locale = locale
this.activity = activity
this.onClick = onClick
if (navigationDrawer) {
text.checkMarkDrawable = null
}
}
internal constructor(itemView: View) : super(itemView)
fun bind(filter: FilterListItem, selected: Boolean, count: Int?) {
if (navigationDrawer) {
itemView.isSelected = selected
} else {
text.isChecked = selected
}
val icon = getIcon(filter)
this.icon.setImageDrawable(DrawableUtil.getWrapped(activity, icon))
this.icon.drawable.setTint(getColor(filter))
text.text = filter.listingTitle
if (count == null || count == 0) {
size.visibility = View.GONE
} else {
size.text = locale!!.formatNumber(count)
size.visibility = View.VISIBLE
}
if (onClick != null) {
row.setOnClickListener {
onClick?.invoke(filter)
}
}
}
private fun getColor(filter: FilterListItem): Int {
if (filter.tint != 0) {
val color = colorProvider!!.getThemeColor(filter.tint, true)
if (color.isFree || inventory!!.purchasedThemes()) {
return color.primaryColor
}
}
return activity!!.getColor(R.color.text_primary)
}
private fun getIcon(filter: FilterListItem): Int {
if (filter.icon < 1000 || inventory!!.hasPro()) {
val icon = getIconResId(filter.icon)
if (icon != null) {
return icon
}
}
return when (filter) {
is TagFilter -> R.drawable.ic_outline_label_24px
is GtasksFilter -> R.drawable.ic_list_24px
is CaldavFilter -> R.drawable.ic_list_24px
is CustomFilter -> R.drawable.ic_outline_filter_list_24px
is PlaceFilter -> R.drawable.ic_outline_place_24px
else -> filter.icon
}
}
}