CardPresenter.kt
2.98 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
package com.apaas.bigscreem
import android.graphics.drawable.Drawable
import androidx.leanback.widget.ImageCardView
import androidx.leanback.widget.Presenter
import androidx.core.content.ContextCompat
import android.util.Log
import android.view.ViewGroup
import com.bumptech.glide.Glide
import kotlin.properties.Delegates
/**
* A CardPresenter is used to generate Views and bind Objects to them on demand.
* It contains an ImageCardView.
*/
class CardPresenter : Presenter() {
private var mDefaultCardImage: Drawable? = null
private var sSelectedBackgroundColor: Int by Delegates.notNull()
private var sDefaultBackgroundColor: Int by Delegates.notNull()
override fun onCreateViewHolder(parent: ViewGroup): Presenter.ViewHolder {
Log.d(TAG, "onCreateViewHolder")
sDefaultBackgroundColor = ContextCompat.getColor(parent.context, R.color.default_background)
sSelectedBackgroundColor =
ContextCompat.getColor(parent.context, R.color.selected_background)
mDefaultCardImage = ContextCompat.getDrawable(parent.context, R.drawable.movie)
val cardView = object : ImageCardView(parent.context) {
override fun setSelected(selected: Boolean) {
updateCardBackgroundColor(this, selected)
super.setSelected(selected)
}
}
cardView.isFocusable = true
cardView.isFocusableInTouchMode = true
updateCardBackgroundColor(cardView, false)
return Presenter.ViewHolder(cardView)
}
override fun onBindViewHolder(viewHolder: Presenter.ViewHolder, item: Any) {
val movie = item as Movie
val cardView = viewHolder.view as ImageCardView
Log.d(TAG, "onBindViewHolder")
if (movie.cardImageUrl != null) {
cardView.titleText = movie.title
cardView.contentText = movie.studio
cardView.setMainImageDimensions(CARD_WIDTH, CARD_HEIGHT)
Glide.with(viewHolder.view.context)
.load(movie.cardImageUrl)
.centerCrop()
.error(mDefaultCardImage)
.into(cardView.mainImageView)
}
}
override fun onUnbindViewHolder(viewHolder: Presenter.ViewHolder) {
Log.d(TAG, "onUnbindViewHolder")
val cardView = viewHolder.view as ImageCardView
// Remove references to images so that the garbage collector can free up memory
cardView.badgeImage = null
cardView.mainImage = null
}
private fun updateCardBackgroundColor(view: ImageCardView, selected: Boolean) {
val color = if (selected) sSelectedBackgroundColor else sDefaultBackgroundColor
// Both background colors should be set because the view"s background is temporarily visible
// during animations.
view.setBackgroundColor(color)
view.setInfoAreaBackgroundColor(color)
}
companion object {
private val TAG = "CardPresenter"
private val CARD_WIDTH = 313
private val CARD_HEIGHT = 176
}
}