package com.amazonaws.ivs.player.scrollablefeed.common.heartview import android.content.Context import android.content.res.TypedArray import android.graphics.* import android.graphics.drawable.BitmapDrawable import android.widget.ImageView import androidx.core.content.ContextCompat import androidx.core.content.res.ResourcesCompat import androidx.core.graphics.drawable.toBitmap import com.amazonaws.ivs.player.scrollablefeed.R import com.amazonaws.ivs.player.scrollablefeed.common.HEART_ANIMATION_DURATION import com.amazonaws.ivs.player.scrollablefeed.common.HEART_ANIMATION_FACTOR fun ImageView.createHeartView(color: Int): ImageView { val heart: Bitmap? = context.createHeart(color) setImageDrawable(BitmapDrawable(resources, heart)) return this } fun TypedArray.toHeartConfig(): HeartConfig { return HeartConfig( x = getDimension(R.styleable.HeartLayout_initX, resources.getDimensionPixelOffset(R.dimen.heart_anim_init_x).toFloat()), y = getDimension(R.styleable.HeartLayout_initY, resources.getDimensionPixelOffset(R.dimen.heart_anim_init_y).toFloat()), rand = getDimension(R.styleable.HeartLayout_xRand, resources.getDimensionPixelOffset(R.dimen.heart_anim_bezier_x_rand).toFloat()).toInt(), animLengthRand = getDimension(R.styleable.HeartLayout_animLengthRand, resources.getDimensionPixelOffset(R.dimen.heart_anim_length_rand).toFloat()).toInt(), factor = getDimension(R.styleable.HeartLayout_bezierFactor, HEART_ANIMATION_FACTOR.toFloat()).toInt(), point = getDimension(R.styleable.HeartLayout_xPointFactor, resources.getDimensionPixelOffset(R.dimen.heart_anim_x_point_factor).toFloat()).toInt(), animLength = getDimension(R.styleable.HeartLayout_animLength, resources.getDimensionPixelOffset(R.dimen.heart_anim_length).toFloat()).toInt(), heartWidth = getDimension(R.styleable.HeartLayout_heart_width, resources.getDimensionPixelOffset(R.dimen.heart_size_width).toFloat()).toInt(), heartHeight = getDimension(R.styleable.HeartLayout_heart_height, resources.getDimensionPixelOffset(R.dimen.heart_size_height).toFloat()).toInt(), animDuration = getDimension(R.styleable.HeartLayout_anim_duration, HEART_ANIMATION_DURATION.toFloat()).toInt() ) } private fun Context.createHeart(color: Int): Bitmap? { val drawable = ResourcesCompat.getDrawable(resources, R.drawable.ic_favorite, null) val bitmap = drawable?.toBitmap() val canvas = bitmap?.let { Canvas(it) } val paint = Paint(Paint.ANTI_ALIAS_FLAG or Paint.FILTER_BITMAP_FLAG).apply { colorFilter = PorterDuffColorFilter(ContextCompat.getColor(this@createHeart, color), PorterDuff.Mode.SRC_ATOP) } canvas?.let { canvas.drawBitmap(bitmap, 0f, 0f, paint) } return bitmap }