package com.candlefinance.fasterimage import android.graphics.BitmapFactory import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.Drawable import android.util.Base64 import androidx.appcompat.widget.AppCompatImageView import coil.load import coil.size.Scale import coil.transform.CircleCropTransformation import com.facebook.react.uimanager.SimpleViewManager import com.facebook.react.uimanager.ThemedReactContext import com.facebook.react.uimanager.annotations.ReactProp class FasterImageViewManager : SimpleViewManager() { override fun getName() = "FasterImageView" override fun createViewInstance(reactContext: ThemedReactContext): AppCompatImageView { return AppCompatImageView(reactContext) } private val placeholder = "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" @ReactProp(name = "url") fun setImageSource(view: AppCompatImageView, url: String) { val decodedString: ByteArray = Base64.decode(placeholder, Base64.DEFAULT) val decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.size) val d: Drawable = BitmapDrawable(view.context.resources, decodedByte) view.load(url) { error(d) crossfade(true) transformations(CircleCropTransformation()) scale(Scale.FIT) crossfade(100) } } }