diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index f87f0f070..7fe2bf5cd 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -93,6 +93,7 @@ dependencies {
implementation(projects.feature.signin)
implementation(projects.feature.library)
implementation(projects.feature.feed)
+ implementation(projects.feature.collection)
// AndroidX 및 Jetpack 기본 라이브러리
implementation(libs.androidx.core.ktx)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a67f2cedf..2446f0f1a 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -76,6 +76,10 @@
android:name=".ui.main.MainActivity"
android:exported="false"
android:screenOrientation="portrait" />
+
(fragment_my_page) {
setupObserver()
onProfileEditClick()
onStorageButtonClick()
+ setupCollectionEntry()
tracker.trackEvent("mypage")
}
@@ -92,6 +96,21 @@ class MyPageFragment : BaseFragment(fragment_my_page) {
binding.lifecycleOwner = viewLifecycleOwner
}
+ private fun setupCollectionEntry() {
+ binding.cvMyPageCollectionEntry.apply {
+ setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
+ setContent {
+ WebsosoTheme {
+ CollectionEntry(onClick = ::navigateToCollection)
+ }
+ }
+ }
+ }
+
+ private fun navigateToCollection() {
+ startActivity(CollectionActivity.getIntent(requireContext()))
+ }
+
private fun setupRestGenrePreferenceAdapter() {
binding.lvMyLibraryRestGenre.adapter = restGenrePreferenceAdapter
}
diff --git a/app/src/main/res/layout/fragment_my_page.xml b/app/src/main/res/layout/fragment_my_page.xml
index 5eabdef49..39e4f6d61 100644
--- a/app/src/main/res/layout/fragment_my_page.xml
+++ b/app/src/main/res/layout/fragment_my_page.xml
@@ -279,11 +279,28 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/cl_my_page_user_profile" />
+
+
+
+
+ app:layout_constraintTop_toBottomOf="@id/view_my_page_collection_divider">
+
+
+
diff --git a/feature/collection/src/main/java/com/into/websoso/feature/collection/CollectionEntry.kt b/feature/collection/src/main/java/com/into/websoso/feature/collection/CollectionEntry.kt
new file mode 100644
index 000000000..8329f710b
--- /dev/null
+++ b/feature/collection/src/main/java/com/into/websoso/feature/collection/CollectionEntry.kt
@@ -0,0 +1,71 @@
+package com.into.websoso.feature.collection
+
+import androidx.compose.foundation.Image
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.res.vectorResource
+import androidx.compose.ui.text.SpanStyle
+import androidx.compose.ui.text.buildAnnotatedString
+import androidx.compose.ui.text.withStyle
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.into.websoso.core.common.extensions.debouncedClickable
+import com.into.websoso.core.designsystem.theme.Gray300
+import com.into.websoso.core.designsystem.theme.Primary100
+import com.into.websoso.core.designsystem.theme.WebsosoTheme
+import com.into.websoso.core.designsystem.theme.White
+import com.into.websoso.core.resource.R
+
+@Composable
+fun CollectionEntry(
+ onClick: () -> Unit,
+ modifier: Modifier = Modifier,
+ collectionCount: Int = 0,
+) {
+ Row(
+ modifier = modifier
+ .fillMaxWidth()
+ .background(White)
+ .debouncedClickable(onClick = onClick)
+ .padding(
+ horizontal = 20.dp,
+ vertical = 20.dp,
+ ),
+ verticalAlignment = Alignment.CenterVertically,
+ ) {
+ Text(
+ text = buildAnnotatedString {
+ append("컬렉션 ")
+ withStyle(style = SpanStyle(color = Primary100)) {
+ append(collectionCount.toString())
+ }
+ append("개")
+ },
+ color = Gray300,
+ style = WebsosoTheme.typography.title2,
+ )
+ Spacer(modifier = Modifier.weight(1f))
+ Image(
+ imageVector = ImageVector.vectorResource(R.drawable.btn_setting_right),
+ contentDescription = null,
+ modifier = Modifier.size(24.dp),
+ )
+ }
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CollectionEntryPreview() {
+ WebsosoTheme {
+ CollectionEntry(onClick = {})
+ }
+}
diff --git a/feature/collection/src/main/java/com/into/websoso/feature/collection/CollectionNavHost.kt b/feature/collection/src/main/java/com/into/websoso/feature/collection/CollectionNavHost.kt
new file mode 100644
index 000000000..4d95db7af
--- /dev/null
+++ b/feature/collection/src/main/java/com/into/websoso/feature/collection/CollectionNavHost.kt
@@ -0,0 +1,24 @@
+package com.into.websoso.feature.collection
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.navigation.compose.NavHost
+import androidx.navigation.compose.composable
+import androidx.navigation.compose.rememberNavController
+
+private const val COLLECTION_ROUTE = "collection"
+
+@Composable
+fun CollectionNavHost(modifier: Modifier = Modifier) {
+ val navController = rememberNavController()
+
+ NavHost(
+ navController = navController,
+ startDestination = COLLECTION_ROUTE,
+ modifier = modifier,
+ ) {
+ composable(route = COLLECTION_ROUTE) {
+ CollectionScreen()
+ }
+ }
+}
diff --git a/feature/collection/src/main/java/com/into/websoso/feature/collection/CollectionScreen.kt b/feature/collection/src/main/java/com/into/websoso/feature/collection/CollectionScreen.kt
new file mode 100644
index 000000000..69cf4c753
--- /dev/null
+++ b/feature/collection/src/main/java/com/into/websoso/feature/collection/CollectionScreen.kt
@@ -0,0 +1,48 @@
+package com.into.websoso.feature.collection
+
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.padding
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.into.websoso.core.designsystem.theme.Black
+import com.into.websoso.core.designsystem.theme.Gray200
+import com.into.websoso.core.designsystem.theme.WebsosoTheme
+import com.into.websoso.core.designsystem.theme.White
+
+@Composable
+fun CollectionScreen(modifier: Modifier = Modifier) {
+ Column(
+ modifier = modifier
+ .fillMaxSize()
+ .background(White)
+ .padding(horizontal = 20.dp),
+ horizontalAlignment = Alignment.CenterHorizontally,
+ verticalArrangement = Arrangement.Center,
+ ) {
+ Text(
+ text = "컬렉션",
+ color = Black,
+ style = WebsosoTheme.typography.headline1,
+ )
+ Text(
+ text = "임시화면",
+ color = Gray200,
+ style = WebsosoTheme.typography.body2,
+ )
+ }
+}
+
+@Preview(showBackground = true)
+@Composable
+private fun CollectionScreenPreview() {
+ WebsosoTheme {
+ CollectionScreen()
+ }
+}
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index e2bcebb8b..f1901b57f 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -32,6 +32,7 @@ lifecycle-extensions = "2.2.0"
datastore-preferences = "1.2.0"
security-crypto = "1.1.0"
paging = "3.3.6"
+navigation = "2.9.8"
# Testing Libraries
junit = "4.13.2"
@@ -167,6 +168,7 @@ compose-material3 = { module = "androidx.compose.material3:material3" }
compose-runtime-livedata = { module = "androidx.compose.runtime:runtime-livedata" }
compose-ui-tooling = { module = "androidx.compose.ui:ui-tooling" }
compose-hilt-navigation = { module = "androidx.hilt:hilt-navigation-compose", version.ref = "hilt-navigation-compose" }
+navigation-compose = { module = "androidx.navigation:navigation-compose", version.ref = "navigation" }
lifecycle-runtime-compose = { module = "androidx.lifecycle:lifecycle-runtime-compose" }
androidx-foundation = { group = "androidx.compose.foundation", name = "foundation", version.ref = "foundation" }
diff --git a/settings.gradle.kts b/settings.gradle.kts
index e23a00fed..81a0aa86b 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -44,6 +44,7 @@ include(
":feature:signin",
":feature:library",
":feature:feed",
+ ":feature:collection",
)
include(":domain:feed")
include(":data:user")