/
HorizontalSessionItem.kt
93 lines (81 loc) · 3.64 KB
/
HorizontalSessionItem.kt
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
package io.github.droidkaigi.confsched2018.presentation.search.item
import android.support.v4.app.Fragment
import android.view.View
import com.bumptech.glide.load.resource.bitmap.CircleCrop
import com.xwray.groupie.OnItemClickListener
import com.xwray.groupie.databinding.BindableItem
import com.xwray.groupie.databinding.ViewHolder
import io.github.droidkaigi.confsched2018.R
import io.github.droidkaigi.confsched2018.databinding.ItemHorizontalSessionBinding
import io.github.droidkaigi.confsched2018.model.Session
import io.github.droidkaigi.confsched2018.util.CustomGlideApp
import io.github.droidkaigi.confsched2018.util.ViewSizeCalculator.calculateViewSizeByScreenAndCount
import io.github.droidkaigi.confsched2018.util.ext.context
import io.github.droidkaigi.confsched2018.util.ext.displaySize
import io.github.droidkaigi.confsched2018.util.ext.getFloat
import io.github.droidkaigi.confsched2018.util.ext.toGone
import io.github.droidkaigi.confsched2018.util.ext.toVisible
import io.github.droidkaigi.confsched2018.util.lang
class HorizontalSessionItem(
val session: Session.SpeechSession,
private val onFavoriteClickListener: (Session.SpeechSession) -> Unit,
private val onItemClickListener: OnItemClickListener,
private val fragment: Fragment
) : BindableItem<ItemHorizontalSessionBinding>(
session.id.hashCode().toLong()
) {
override fun createViewHolder(itemView: View): ViewHolder<ItemHorizontalSessionBinding> {
val viewHolder = super.createViewHolder(itemView)
val binding = viewHolder.binding
val width = calculateViewSizeByScreenAndCount(
binding.context.displaySize().width,
binding.context.resources.getFloat(R.dimen.horizontal_visible_item_count))
itemView.layoutParams.width = width
return viewHolder
}
override fun bind(viewBinding: ItemHorizontalSessionBinding, position: Int) {
viewBinding.session = session
viewBinding.level.text = session.level.getNameByLang(lang())
val speakerImages = arrayOf(
viewBinding.speakerImage1,
viewBinding.speakerImage2,
viewBinding.speakerImage3,
viewBinding.speakerImage4,
viewBinding.speakerImage5
)
speakerImages.forEachIndexed { index, imageView ->
if (index < session.speakers.size) {
imageView.toVisible()
val size = viewBinding.root.resources.getDimensionPixelSize(R.dimen.speaker_image)
CustomGlideApp
.with(fragment)
.load(session.speakers[index].imageUrl)
.placeholder(R.drawable.ic_person_black_24dp)
.override(size, size)
.dontAnimate()
.transform(CircleCrop())
.into(imageView)
} else {
imageView.toGone()
}
}
viewBinding.speakers.text = session.speakers.joinToString { it.name }
viewBinding.root.setOnClickListener { view ->
onItemClickListener.onItemClick(this, view)
}
viewBinding.favorite.setOnClickListener {
onFavoriteClickListener(session)
}
}
override fun getLayout(): Int = R.layout.item_horizontal_session
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (javaClass != other?.javaClass) return false
other as HorizontalSessionItem
if (session != other.session) return false
return true
}
override fun hashCode(): Int {
return session.hashCode()
}
}