-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathImageViewBindingAdapters.kt
35 lines (29 loc) · 1.07 KB
/
ImageViewBindingAdapters.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
package com.mercariapp.feature.common.databinding
import android.widget.ImageView
import androidx.databinding.BindingAdapter
import com.aidanvii.toolbox.databinding.trackValue
import com.mercariapp.common.utils.isNotNullAndNotEmpty
import com.mercariapp.feature.common.R
import kotlin.contracts.ExperimentalContracts
abstract class ImageViewBindingAdapters {
@BindingAdapter("imageUrl")
@ExperimentalContracts
fun ImageView.bind(imageUrl: String?) {
trackValue(
newValue = imageUrlFor(imageUrl),
valueResId = R.id.image_view_url,
onNewValue = { loadImage(it) },
onOldValue = {
cancelPendingRequest()
if (imageUrl == null) {
setImageDrawable(null)
}
}
)
}
@ExperimentalContracts
private fun imageUrlFor(imageUrl: String?): String? =
if (imageUrl.isNotNullAndNotEmpty()) imageUrl else null
protected abstract fun ImageView.loadImage(imageUrl: String)
protected abstract fun ImageView.cancelPendingRequest()
}