blob: 8da9f1a3cef4fe3c2a9be24dc6eaec0173fd0394 [file] [log] [blame]
package com.airbnb.lottie.samples.views
import android.content.Context
import android.util.AttributeSet
import android.widget.FrameLayout
import com.airbnb.epoxy.CallbackProp
import com.airbnb.epoxy.ModelProp
import com.airbnb.epoxy.ModelView
import com.airbnb.epoxy.OnViewRecycled
import com.airbnb.lottie.samples.databinding.ListingCardBinding
import com.airbnb.lottie.samples.utils.viewBinding
@ModelView(autoLayout = ModelView.Size.MATCH_WIDTH_WRAP_HEIGHT)
class ListingCard @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : FrameLayout(context, attrs, defStyleAttr) {
private val binding: ListingCardBinding by viewBinding()
@CallbackProp
fun onToggled(listener: ((isWishListed: Boolean) -> Unit)?) {
binding.wishListIcon.setOnClickListener(when (listener) {
null -> null
else -> { _ ->
listener(binding.wishListIcon.progress == 0f)
}
})
}
@ModelProp
fun isWishListed(isWishListed: Boolean) {
val targetProgress = if (isWishListed) 1f else 0f
binding.wishListIcon.speed = if (isWishListed) 1f else -1f
if (binding.wishListIcon.progress != targetProgress) {
binding.wishListIcon.playAnimation()
}
}
@OnViewRecycled
fun onRecycled() {
binding.wishListIcon.pauseAnimation()
binding.wishListIcon.progress = 0f
}
}