diff --git a/app/src/main/ic_label-playstore.png b/app/src/main/ic_label-playstore.png new file mode 100644 index 000000000..5f5e38941 Binary files /dev/null and b/app/src/main/ic_label-playstore.png differ diff --git a/app/src/main/java/com/umc/edison/ui/bubblestorage/BubbleStorageScreen.kt b/app/src/main/java/com/umc/edison/ui/bubblestorage/BubbleStorageScreen.kt index a4da79935..54e3dc456 100644 --- a/app/src/main/java/com/umc/edison/ui/bubblestorage/BubbleStorageScreen.kt +++ b/app/src/main/java/com/umc/edison/ui/bubblestorage/BubbleStorageScreen.kt @@ -41,9 +41,21 @@ import com.umc.edison.ui.components.calculateBubbleSize import com.umc.edison.ui.navigation.NavRoute import com.umc.edison.ui.onboarding.BubbleSpaceOnboarding import com.umc.edison.ui.theme.Gray300 +import com.umc.edison.ui.theme.Gray500 +import com.umc.edison.ui.theme.Gray700 import com.umc.edison.ui.theme.Gray800 import com.umc.edison.ui.theme.Gray900 import com.umc.edison.ui.theme.White000 +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.Surface +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextAlign +import com.umc.edison.R +import com.umc.edison.ui.theme.EdisonTypography +import com.umc.edison.ui.theme.EmptyViewCtaBg +import com.umc.edison.ui.theme.GradientBlue +import com.umc.edison.ui.theme.GradientPink +import com.umc.edison.ui.theme.GradientYellow @OptIn(ExperimentalMaterial3Api::class) @Composable @@ -99,6 +111,15 @@ fun BubbleStorageScreen( } }, ) { + if (uiState.bubbles.isEmpty()) { + BubbleStorageEmptyView( + onCtaClick = { + navHostController.navigate(NavRoute.BubbleEdit.createRoute()) + } + ) + return@BaseContent + } + var onBubbleClick: (BubbleModel) -> Unit = {} var onBubbleLongClick: (BubbleModel) -> Unit = {} @@ -293,3 +314,55 @@ fun BubbleStorageScreen( } } } + +@Composable +private fun BubbleStorageEmptyView( + onCtaClick: () -> Unit, + modifier: Modifier = Modifier, +) { + + Column( + modifier = modifier.fillMaxSize(), + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally + ) { + Text( + text = stringResource(R.string.bubble_storage_empty_title), + style = EdisonTypography.displayLarge, + color = Gray700, + textAlign = TextAlign.Center, + ) + + Spacer(modifier = Modifier.height(24.dp)) + + Text( + text = stringResource(R.string.bubble_storage_empty_subtitle), + style = EdisonTypography.bodyMedium, + color = Gray500, + textAlign = TextAlign.Center, + ) + + Spacer(modifier = Modifier.height(4.dp)) + + val ctaTextBrush = Brush.horizontalGradient( + colors = listOf( + GradientYellow, + GradientPink, + GradientBlue, + ) + ) + + Surface( + onClick = onCtaClick, + shape = RoundedCornerShape(100.dp), + color = EmptyViewCtaBg, + ) { + Text( + text = stringResource(R.string.bubble_storage_empty_cta), + modifier = Modifier.padding(horizontal = 16.dp, vertical = 8.dp), + style = MaterialTheme.typography.displaySmall.copy(brush = ctaTextBrush), + textAlign = TextAlign.Center, + ) + } + } +} diff --git a/app/src/main/java/com/umc/edison/ui/edison/MyEdisonScreen.kt b/app/src/main/java/com/umc/edison/ui/edison/MyEdisonScreen.kt index 90a9fac02..0ccfdb4e5 100644 --- a/app/src/main/java/com/umc/edison/ui/edison/MyEdisonScreen.kt +++ b/app/src/main/java/com/umc/edison/ui/edison/MyEdisonScreen.kt @@ -234,4 +234,4 @@ private fun OnboardingImagePlaceholder( alignment = Alignment.Center, contentScale = ContentScale.Crop, ) -} \ No newline at end of file +} diff --git a/app/src/main/java/com/umc/edison/ui/navigation/NavRoute.kt b/app/src/main/java/com/umc/edison/ui/navigation/NavRoute.kt index 91c63f22f..c1bd1ff9d 100644 --- a/app/src/main/java/com/umc/edison/ui/navigation/NavRoute.kt +++ b/app/src/main/java/com/umc/edison/ui/navigation/NavRoute.kt @@ -68,8 +68,8 @@ sealed class NavRoute(val route: String) { } data object BubbleEdit : NavRoute("$MY_EDISON_ROUTE/edit") { - fun createRoute(bubbleId: String?): String { - return if (bubbleId != null) { + fun createRoute(bubbleId: String? = null): String { + return if (!bubbleId.isNullOrEmpty()) { "$route?bubbleId=$bubbleId" } else { route diff --git a/app/src/main/java/com/umc/edison/ui/space/BubbleGraphScreen.kt b/app/src/main/java/com/umc/edison/ui/space/BubbleGraphScreen.kt index 163d143ff..20a9d4603 100644 --- a/app/src/main/java/com/umc/edison/ui/space/BubbleGraphScreen.kt +++ b/app/src/main/java/com/umc/edison/ui/space/BubbleGraphScreen.kt @@ -97,7 +97,7 @@ fun BubbleGraphScreen( val transformedOffset = (tapOffset - offset) / scale val radius = BUBBLE_DOT_RADIUS val touchRadius = radius * 1.5f - + uiState.bubbles.forEach { positionedBubble -> val dx = transformedOffset.x - positionedBubble.position.x val dy = transformedOffset.y - positionedBubble.position.y diff --git a/app/src/main/java/com/umc/edison/ui/theme/Color.kt b/app/src/main/java/com/umc/edison/ui/theme/Color.kt index 843b73a9f..52cc47c7a 100644 --- a/app/src/main/java/com/umc/edison/ui/theme/Color.kt +++ b/app/src/main/java/com/umc/edison/ui/theme/Color.kt @@ -49,6 +49,11 @@ val Orange100 = Color(0xFFFFE2CD) val LightGreen100 = Color(0XFFD5FFAB) val LightBlue100 = Color(0XFFA8F4F7) +val EmptyViewCtaBg = Color(0xFFFFF7F7) +val GradientYellow = Color(0xFFF2F227) +val GradientPink = Color(0xFFFF87D5) +val GradientBlue = Color(0xFF5BADFF) + val ColorPickerList = listOf( Red100, Yellow100, @@ -62,4 +67,4 @@ val ColorPickerList = listOf( Green200, Purple100, Color(0xFFC9CBD3), -) \ No newline at end of file +) diff --git a/app/src/main/res/drawable/ic_label.xml b/app/src/main/res/drawable/ic_label.xml index 4d6edb347..e10ca6c31 100644 --- a/app/src/main/res/drawable/ic_label.xml +++ b/app/src/main/res/drawable/ic_label.xml @@ -3,22 +3,7 @@ android:height="24dp" android:viewportWidth="24" android:viewportHeight="24"> - - - - - + diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_label.xml b/app/src/main/res/mipmap-anydpi-v26/ic_label.xml new file mode 100644 index 000000000..438ab2867 --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_label.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_label_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_label_round.xml new file mode 100644 index 000000000..438ab2867 --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_label_round.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/mipmap-hdpi/ic_label.webp b/app/src/main/res/mipmap-hdpi/ic_label.webp new file mode 100644 index 000000000..1671a8e86 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_label.webp differ diff --git a/app/src/main/res/mipmap-hdpi/ic_label_foreground.webp b/app/src/main/res/mipmap-hdpi/ic_label_foreground.webp new file mode 100644 index 000000000..8283af7e0 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_label_foreground.webp differ diff --git a/app/src/main/res/mipmap-hdpi/ic_label_round.webp b/app/src/main/res/mipmap-hdpi/ic_label_round.webp new file mode 100644 index 000000000..bec242e4f Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_label_round.webp differ diff --git a/app/src/main/res/mipmap-mdpi/ic_label.webp b/app/src/main/res/mipmap-mdpi/ic_label.webp new file mode 100644 index 000000000..cc38e5d42 Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_label.webp differ diff --git a/app/src/main/res/mipmap-mdpi/ic_label_foreground.webp b/app/src/main/res/mipmap-mdpi/ic_label_foreground.webp new file mode 100644 index 000000000..5e4c45a6a Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_label_foreground.webp differ diff --git a/app/src/main/res/mipmap-mdpi/ic_label_round.webp b/app/src/main/res/mipmap-mdpi/ic_label_round.webp new file mode 100644 index 000000000..649dce409 Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_label_round.webp differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_label.webp b/app/src/main/res/mipmap-xhdpi/ic_label.webp new file mode 100644 index 000000000..e1d5effbf Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_label.webp differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_label_foreground.webp b/app/src/main/res/mipmap-xhdpi/ic_label_foreground.webp new file mode 100644 index 000000000..f8729ad23 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_label_foreground.webp differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_label_round.webp b/app/src/main/res/mipmap-xhdpi/ic_label_round.webp new file mode 100644 index 000000000..985d30752 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_label_round.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_label.webp b/app/src/main/res/mipmap-xxhdpi/ic_label.webp new file mode 100644 index 000000000..0b91c2a83 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_label.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_label_foreground.webp b/app/src/main/res/mipmap-xxhdpi/ic_label_foreground.webp new file mode 100644 index 000000000..95488da63 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_label_foreground.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_label_round.webp b/app/src/main/res/mipmap-xxhdpi/ic_label_round.webp new file mode 100644 index 000000000..f347cb705 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_label_round.webp differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_label.webp b/app/src/main/res/mipmap-xxxhdpi/ic_label.webp new file mode 100644 index 000000000..e93b3a3e4 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_label.webp differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_label_foreground.webp b/app/src/main/res/mipmap-xxxhdpi/ic_label_foreground.webp new file mode 100644 index 000000000..cc9e33cdf Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_label_foreground.webp differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_label_round.webp b/app/src/main/res/mipmap-xxxhdpi/ic_label_round.webp new file mode 100644 index 000000000..883fcc736 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_label_round.webp differ diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 802b06edf..2b5ce53ec 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -35,4 +35,7 @@ 3. 해당 계정으로 Edison에 재가입할 경우, 새로운 계정으로 간주됩니다. 안내 사항을 모두 확인하였으며, 이에 동의합니다. 로그인이 필요한 기능입니다 - \ No newline at end of file + 지난 한 달간 새로 작성한\n버블이 없어요! + 에디슨과 함께 + 찰나의 영감을 기록하기 +