From a2f219f896ac3d5877a97cedebabffc1f7a2bc33 Mon Sep 17 00:00:00 2001 From: Kamalesh Garnayak Date: Tue, 16 Jul 2024 14:45:32 +0530 Subject: [PATCH] UIS-3 | Kamalesh | Added icon code functionality in Scratch Card (#502) --- .../navi/uitron/render/ScratchCardRenderer.kt | 44 ++++++++++++++----- 1 file changed, 32 insertions(+), 12 deletions(-) diff --git a/navi-uitron/src/main/java/com/navi/uitron/render/ScratchCardRenderer.kt b/navi-uitron/src/main/java/com/navi/uitron/render/ScratchCardRenderer.kt index d1fefe8..85159fb 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/render/ScratchCardRenderer.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/render/ScratchCardRenderer.kt @@ -9,6 +9,7 @@ package com.navi.uitron.render import android.graphics.Bitmap import android.view.MotionEvent +import androidx.appcompat.content.res.AppCompatResources import androidx.compose.animation.core.animateFloatAsState import androidx.compose.animation.core.spring import androidx.compose.foundation.Canvas @@ -39,6 +40,7 @@ import androidx.compose.ui.graphics.asAndroidBitmap import androidx.compose.ui.graphics.asImageBitmap import androidx.compose.ui.graphics.drawscope.clipPath import androidx.compose.ui.input.pointer.pointerInteropFilter +import androidx.compose.ui.layout.layoutId import androidx.compose.ui.layout.onGloballyPositioned import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.unit.IntSize @@ -47,6 +49,7 @@ import coil.compose.AsyncImagePainter import coil.compose.rememberAsyncImagePainter import coil.request.ImageRequest import coil.size.Size +import com.navi.uitron.UiTronSdkManager import com.navi.uitron.model.action.MvelAction import com.navi.uitron.model.data.ScratchCardData import com.navi.uitron.model.data.ScratchPath @@ -54,6 +57,7 @@ import com.navi.uitron.model.data.UiTronData import com.navi.uitron.model.ui.ScratchCardProperty import com.navi.uitron.model.ui.UiTronView import com.navi.uitron.utils.BitmapFacade +import com.navi.uitron.utils.EMPTY import com.navi.uitron.utils.KEY_MVEL_ACTION import com.navi.uitron.utils.KEY_PROPERTY import com.navi.uitron.utils.KEY_UI_TRON_DATA @@ -62,6 +66,7 @@ import com.navi.uitron.utils.orFalse import com.navi.uitron.utils.orTrue import com.navi.uitron.utils.orValue import com.navi.uitron.utils.setHeight +import com.navi.uitron.utils.setTag import com.navi.uitron.utils.setWidth import com.navi.uitron.viewmodel.UiTronViewModel @@ -140,19 +145,32 @@ class ScratchCardRenderer( else -> Unit } } - - rememberAsyncImagePainter( - model = - ImageRequest.Builder(LocalContext.current) - .data(property.iconUrl) - .size(Size.ORIGINAL) - .build(), - onState = ::updateOuterImageBitmap - ) + val uiTronProvider = remember { UiTronSdkManager.getDependencyProvider() } + val isImagePresentLocally by + remember(property.iconUrl) { + mutableStateOf(uiTronProvider.getIconResourceId(property.iconUrl)) + } + isImagePresentLocally?.let { + overlayImage = + AppCompatResources.getDrawable(LocalContext.current, it) + ?.toBitmap() + ?.copy(Bitmap.Config.ARGB_8888, true) + ?.asImageBitmap() + } + ?: run { + rememberAsyncImagePainter( + model = + ImageRequest.Builder(LocalContext.current) + .data(property.iconUrl) + .size(Size.ORIGINAL) + .build(), + onState = ::updateOuterImageBitmap + ) + } var imageScale by remember { mutableFloatStateOf(1f) } val imageScaleAnimation by - animateFloatAsState(targetValue = imageScale, animationSpec = spring(), label = "") + animateFloatAsState(targetValue = imageScale, animationSpec = spring(), label = EMPTY) if (property.visible.orTrue()) { overlayImage?.let { @@ -169,11 +187,13 @@ class ScratchCardRenderer( modifier = Modifier.setWidth(property.width) .setHeight(property.height) - .scale(imageScaleAnimation), + .scale(imageScaleAnimation) + .setTag(property) + .layoutId(property.layoutId.orEmpty()), currentPathThickness = property.pathThickness ?: 150f, property = property ) { - childrenComposeViews.forEachIndexed() { _, it -> + childrenComposeViews.forEachIndexed { _, it -> if (it.data.isNullOrEmpty()) { uiTronRenderer.Render(composeViews = listOf(it)) } else {