-
Notifications
You must be signed in to change notification settings - Fork 71
Expand file tree
/
Copy pathFeaturesAdapter.kt
More file actions
102 lines (89 loc) · 3.23 KB
/
FeaturesAdapter.kt
File metadata and controls
102 lines (89 loc) · 3.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package com.map.mom.adapters
import android.content.Context
import android.graphics.drawable.GradientDrawable
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.cardview.widget.CardView
import androidx.core.content.res.ResourcesCompat
import androidx.recyclerview.widget.RecyclerView
import com.map.mom.utility.Constants
import com.map.mom.models.Feature
import com.map.mom.R
import com.map.mom.databinding.ItemFeatureBinding
class FeaturesAdapter(
private val mContext: Context,
private val features: List<Feature>,
private val iOnFeatureItemClickListener: IOnFeatureItemClickListener
) :
RecyclerView.Adapter<FeaturesAdapter.ViewHolder>() {
private lateinit var shapeDrawable: GradientDrawable
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val binding = ItemFeatureBinding.bind(itemView)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val binding = ItemFeatureBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return ViewHolder(binding.root)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val feature = features[position]
holder.binding.apply {
tvFeature.text = Constants.featureTextMap[feature.name] ?: ""
if (feature.isSelected) {
cardview.setFeatureSelected(feature.name)
} else {
cardview.setFeatureUnSelected()
}
ivFeature.setImageDrawable(
ResourcesCompat.getDrawable(
mContext.resources,
Constants.featureImageMap[feature.name] ?: R.drawable.activity,
null
)
)
}
holder.itemView.setOnClickListener {
iOnFeatureItemClickListener.onItemClick(feature, position)
}
}
private fun initDrawable() {
shapeDrawable = GradientDrawable()
shapeDrawable.setColor(
ResourcesCompat.getColor(
mContext.resources,
R.color.background,
null
)
)
shapeDrawable.cornerRadius = 15.dpToPx().toFloat()
}
private fun Int.dpToPx(): Int = (this * mContext.resources.displayMetrics.density).toInt()
override fun getItemCount(): Int {
return features.size
}
fun getSelectedFeature(): String?{
val selectedFeature = features.find { it.isSelected }
return selectedFeature?.name
}
private fun CardView.setFeatureSelected(featureName: String) {
//Apply same color to card as Map marker
//initialize for every different feature
initDrawable()
shapeDrawable.setStroke(
5.dpToPx(),
ResourcesCompat.getColor(
mContext.resources,
Constants.featureColorMap[featureName] ?: R.color.grey,
null
)
)
background = shapeDrawable
setContentPadding(10, 10, 10, 10)
}
private fun CardView.setFeatureUnSelected(){
setContentPadding(0, 0, 0, 0)
}
interface IOnFeatureItemClickListener {
fun onItemClick(feature: Feature, position: Int)
}
}