From 43d5ddf62f740f9e335ee4bb3f269405a74105bd Mon Sep 17 00:00:00 2001 From: roel Date: Fri, 10 Oct 2025 19:39:52 +0900 Subject: [PATCH 1/3] =?UTF-8?q?[FEAT/#419]=20=EC=9D=B4=EB=AF=B8=EC=A7=80?= =?UTF-8?q?=20=EB=A1=9C=EB=94=A9=20=EB=B7=B0=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../component/image/SpoonyImage.kt | 30 ++++++++++++++++--- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/spoony/spoony/core/designsystem/component/image/SpoonyImage.kt b/app/src/main/java/com/spoony/spoony/core/designsystem/component/image/SpoonyImage.kt index 4834f5bbc..7c39efd7a 100644 --- a/app/src/main/java/com/spoony/spoony/core/designsystem/component/image/SpoonyImage.kt +++ b/app/src/main/java/com/spoony/spoony/core/designsystem/component/image/SpoonyImage.kt @@ -1,7 +1,11 @@ package com.spoony.spoony.core.designsystem.component.image import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material3.CircularProgressIndicator import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.RectangleShape @@ -10,8 +14,10 @@ import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.platform.LocalInspectionMode import androidx.compose.ui.res.vectorResource -import coil3.compose.AsyncImage +import coil3.compose.SubcomposeAsyncImage +import coil3.compose.SubcomposeAsyncImageContent import com.spoony.spoony.R +import com.spoony.spoony.core.designsystem.theme.SpoonyAndroidTheme @Composable fun SpoonyImage( @@ -19,7 +25,8 @@ fun SpoonyImage( modifier: Modifier = Modifier, shape: Shape = RectangleShape, contentScale: ContentScale = ContentScale.Crop, - contentDescription: String? = null + contentDescription: String? = null, + showLoadingIndicator: Boolean = false ) { if (LocalInspectionMode.current) { Image( @@ -29,11 +36,26 @@ fun SpoonyImage( modifier = modifier.clip(shape) ) } else { - AsyncImage( + SubcomposeAsyncImage( model = model, contentDescription = contentDescription, contentScale = contentScale, - modifier = modifier.clip(shape) + modifier = modifier.clip(shape), + loading = { + if (showLoadingIndicator) { + Box( + modifier = Modifier.fillMaxSize(), + contentAlignment = Alignment.Center + ) { + CircularProgressIndicator( + color = SpoonyAndroidTheme.colors.gray300 + ) + } + } + }, + success = { + SubcomposeAsyncImageContent() + } ) } } From 93b26e30742ecbea465c52e4ca204a7b9ca3d71b Mon Sep 17 00:00:00 2001 From: roel Date: Fri, 10 Oct 2025 19:40:16 +0900 Subject: [PATCH 2/3] =?UTF-8?q?[FEAT/#419]=20=EC=9D=B4=EB=AF=B8=EC=A7=80?= =?UTF-8?q?=20=EB=A1=9C=EB=94=A9=20=EB=B7=B0=20=ED=95=84=EC=9A=94=ED=95=9C?= =?UTF-8?q?=20=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../spoony/core/designsystem/component/card/ReviewCard.kt | 3 ++- .../exploreSearch/component/ExploreSearchUserItem.kt | 3 ++- .../presentation/gourmet/map/component/MapPlaceDetailCard.kt | 3 ++- .../placeDetail/component/PlaceDetailImageLazyRow.kt | 3 ++- .../spoony/presentation/register/component/PhotoPicker.kt | 3 ++- 5 files changed, 10 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/spoony/spoony/core/designsystem/component/card/ReviewCard.kt b/app/src/main/java/com/spoony/spoony/core/designsystem/component/card/ReviewCard.kt index a977f525c..a8c719432 100644 --- a/app/src/main/java/com/spoony/spoony/core/designsystem/component/card/ReviewCard.kt +++ b/app/src/main/java/com/spoony/spoony/core/designsystem/component/card/ReviewCard.kt @@ -173,7 +173,8 @@ private fun ImageGrid( .aspectRatio(1f), shape = RoundedCornerShape(imageRadius), contentScale = ContentScale.Crop, - contentDescription = null + contentDescription = null, + showLoadingIndicator = true ) } } diff --git a/app/src/main/java/com/spoony/spoony/presentation/exploreSearch/component/ExploreSearchUserItem.kt b/app/src/main/java/com/spoony/spoony/presentation/exploreSearch/component/ExploreSearchUserItem.kt index 0a8da5786..7fc154c42 100644 --- a/app/src/main/java/com/spoony/spoony/presentation/exploreSearch/component/ExploreSearchUserItem.kt +++ b/app/src/main/java/com/spoony/spoony/presentation/exploreSearch/component/ExploreSearchUserItem.kt @@ -42,7 +42,8 @@ fun ExploreSearchUserItem( modifier = Modifier.size(48.dp), shape = CircleShape, contentScale = ContentScale.Crop, - contentDescription = null + contentDescription = null, + showLoadingIndicator = true ) Spacer(modifier = Modifier.width(14.dp)) Column { diff --git a/app/src/main/java/com/spoony/spoony/presentation/gourmet/map/component/MapPlaceDetailCard.kt b/app/src/main/java/com/spoony/spoony/presentation/gourmet/map/component/MapPlaceDetailCard.kt index 98ede6fbf..1bfefd26e 100644 --- a/app/src/main/java/com/spoony/spoony/presentation/gourmet/map/component/MapPlaceDetailCard.kt +++ b/app/src/main/java/com/spoony/spoony/presentation/gourmet/map/component/MapPlaceDetailCard.kt @@ -67,7 +67,8 @@ fun MapPlaceDetailCard( model = url, modifier = Modifier .height(103.dp) - .weight(1f) + .weight(1f), + showLoadingIndicator = true ) } } diff --git a/app/src/main/java/com/spoony/spoony/presentation/placeDetail/component/PlaceDetailImageLazyRow.kt b/app/src/main/java/com/spoony/spoony/presentation/placeDetail/component/PlaceDetailImageLazyRow.kt index 4621d943f..ffe53a7e4 100644 --- a/app/src/main/java/com/spoony/spoony/presentation/placeDetail/component/PlaceDetailImageLazyRow.kt +++ b/app/src/main/java/com/spoony/spoony/presentation/placeDetail/component/PlaceDetailImageLazyRow.kt @@ -36,7 +36,8 @@ fun PlaceDetailImageLazyRow( model = imageUrl, shape = RoundedCornerShape(10.dp), contentScale = ContentScale.Crop, - contentDescription = null + contentDescription = null, + showLoadingIndicator = true ) } } diff --git a/app/src/main/java/com/spoony/spoony/presentation/register/component/PhotoPicker.kt b/app/src/main/java/com/spoony/spoony/presentation/register/component/PhotoPicker.kt index 691cb5123..8fd670dca 100644 --- a/app/src/main/java/com/spoony/spoony/presentation/register/component/PhotoPicker.kt +++ b/app/src/main/java/com/spoony/spoony/presentation/register/component/PhotoPicker.kt @@ -159,7 +159,8 @@ fun PhotoPicker( model = photo.uri, modifier = Modifier.fillMaxSize(), shape = RoundedCornerShape(8.dp), - contentScale = ContentScale.Crop + contentScale = ContentScale.Crop, + showLoadingIndicator = true ) Icon( imageVector = ImageVector.vectorResource(id = R.drawable.ic_delete_filled_24), From 3cdbb3e57677876a246c653027d597867a7a163b Mon Sep 17 00:00:00 2001 From: roel Date: Mon, 27 Oct 2025 16:30:34 +0900 Subject: [PATCH 3/3] =?UTF-8?q?[FEAT/#420]=20LoadingIndicator=20=EC=BB=B4?= =?UTF-8?q?=ED=8F=AC=EB=84=8C=ED=8A=B8=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../component/image/SpoonyImage.kt | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/spoony/spoony/core/designsystem/component/image/SpoonyImage.kt b/app/src/main/java/com/spoony/spoony/core/designsystem/component/image/SpoonyImage.kt index 7c39efd7a..ab4e80c03 100644 --- a/app/src/main/java/com/spoony/spoony/core/designsystem/component/image/SpoonyImage.kt +++ b/app/src/main/java/com/spoony/spoony/core/designsystem/component/image/SpoonyImage.kt @@ -43,14 +43,7 @@ fun SpoonyImage( modifier = modifier.clip(shape), loading = { if (showLoadingIndicator) { - Box( - modifier = Modifier.fillMaxSize(), - contentAlignment = Alignment.Center - ) { - CircularProgressIndicator( - color = SpoonyAndroidTheme.colors.gray300 - ) - } + LoadingIndicator() } }, success = { @@ -59,3 +52,15 @@ fun SpoonyImage( ) } } + +@Composable +private fun LoadingIndicator() { + Box( + modifier = Modifier.fillMaxSize(), + contentAlignment = Alignment.Center + ) { + CircularProgressIndicator( + color = SpoonyAndroidTheme.colors.gray300 + ) + } +}