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버블이 없어요!
+ 에디슨과 함께
+ 찰나의 영감을 기록하기
+