Skip to content

Commit ff47acd

Browse files
authored
Merge pull request #75 from Nexters/feature/home-navigation
[FEAT] 스타일로 프로필 생성하기 버튼을 눌러 사진 업로드 화면으로 이동
2 parents 4e97b96 + 97aad68 commit ff47acd

File tree

9 files changed

+193
-107
lines changed

9 files changed

+193
-107
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
2+
android:width="32dp"
3+
android:height="32dp"
4+
android:viewportWidth="32"
5+
android:viewportHeight="32">
6+
<path
7+
android:pathData="M5,13.545L12.333,23L27,10"
8+
android:strokeLineJoin="round"
9+
android:strokeWidth="2"
10+
android:fillColor="#00000000"
11+
android:strokeColor="#ffffff"
12+
android:strokeLineCap="round"/>
13+
</vector>
-258 KB
Loading

core/designsystem/src/main/res/values/strings.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<!-- Home -->
1515
<string name="home_style">Style</string>
1616
<string name="home_profile">Profile</string>
17-
<string name="home_generate_img_with_this_keyword">키워드로 프로필 생성하기</string>
17+
<string name="home_generate_img_with_this_style">스타일로 프로필 생성하기</string>
1818

1919
<!-- My Page -->
2020
<string name="mypage_title">MY</string>

core/ui/src/main/kotlin/com/nexters/ilab/core/ui/component/Image.kt

Lines changed: 53 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import android.os.Build.VERSION.SDK_INT
44
import androidx.compose.foundation.Image
55
import androidx.compose.foundation.background
66
import androidx.compose.foundation.layout.Box
7+
import androidx.compose.foundation.layout.Column
8+
import androidx.compose.foundation.layout.Spacer
79
import androidx.compose.foundation.layout.aspectRatio
810
import androidx.compose.foundation.layout.fillMaxSize
911
import androidx.compose.foundation.layout.fillMaxWidth
@@ -19,17 +21,20 @@ import androidx.compose.ui.Alignment
1921
import androidx.compose.ui.Modifier
2022
import androidx.compose.ui.draw.clip
2123
import androidx.compose.ui.graphics.Color
24+
import androidx.compose.ui.graphics.vector.ImageVector
2225
import androidx.compose.ui.layout.ContentScale
2326
import androidx.compose.ui.platform.LocalContext
2427
import androidx.compose.ui.platform.LocalInspectionMode
2528
import androidx.compose.ui.res.painterResource
29+
import androidx.compose.ui.res.vectorResource
2630
import androidx.compose.ui.unit.dp
2731
import coil.ImageLoader
2832
import coil.compose.AsyncImage
2933
import coil.decode.GifDecoder
3034
import coil.decode.ImageDecoderDecoder
3135
import coil.request.ImageRequest
32-
import com.nexters.ilab.android.core.designsystem.theme.Title2
36+
import com.nexters.ilab.android.core.designsystem.theme.Contents2
37+
import com.nexters.ilab.android.core.designsystem.R
3338
import com.nexters.ilab.core.ui.ComponentPreview
3439

3540
@Composable
@@ -109,6 +114,7 @@ fun StyleImage(
109114
resId: Int,
110115
style: String,
111116
contentDescription: String,
117+
isSelectedIndex: Boolean,
112118
modifier: Modifier = Modifier,
113119
backgroundColor: Color = Color.Transparent,
114120
) {
@@ -124,28 +130,41 @@ fun StyleImage(
124130
.aspectRatio(1f),
125131
)
126132
} else {
127-
Box {
128-
AsyncImage(
129-
model = ImageRequest.Builder(context)
130-
.data(resId)
131-
.crossfade(true)
132-
.build(),
133-
contentDescription = contentDescription,
134-
contentScale = ContentScale.Fit,
135-
modifier = modifier,
136-
)
137-
Box(
138-
modifier = Modifier
139-
.clip(RoundedCornerShape(12.dp))
140-
.fillMaxWidth()
141-
.aspectRatio(1f)
142-
.background(backgroundColor),
143-
)
133+
Column(
134+
horizontalAlignment = Alignment.CenterHorizontally,
135+
) {
136+
Box {
137+
AsyncImage(
138+
model = ImageRequest.Builder(context)
139+
.data(resId)
140+
.crossfade(true)
141+
.build(),
142+
contentDescription = contentDescription,
143+
contentScale = ContentScale.Fit,
144+
modifier = modifier,
145+
)
146+
Box(
147+
modifier = Modifier
148+
.clip(RoundedCornerShape(12.dp))
149+
.fillMaxWidth()
150+
.aspectRatio(1f)
151+
.background(backgroundColor),
152+
) {
153+
if (isSelectedIndex) {
154+
Icon(
155+
imageVector = ImageVector.vectorResource(R.drawable.ic_check),
156+
contentDescription = "Check Icon",
157+
modifier = Modifier.align(Alignment.Center),
158+
tint = Color.Unspecified,
159+
)
160+
}
161+
}
162+
}
163+
Spacer(modifier = Modifier.height(12.dp))
144164
Text(
145165
text = style,
146-
style = Title2,
147-
color = Color.White,
148-
modifier = Modifier.align(Alignment.Center),
166+
style = Contents2,
167+
color = Color.Black,
149168
)
150169
}
151170
}
@@ -228,10 +247,22 @@ fun LoadingImagePreview() {
228247

229248
@ComponentPreview
230249
@Composable
231-
fun StyleImagePreview() {
250+
fun UnSelectedStyleImagePreview() {
251+
StyleImage(
252+
resId = 0,
253+
style = "#스타일",
254+
contentDescription = "Style Image",
255+
isSelectedIndex = false,
256+
)
257+
}
258+
259+
@ComponentPreview
260+
@Composable
261+
fun SelectedStyleImagePreview() {
232262
StyleImage(
233263
resId = 0,
234264
style = "#스타일",
235265
contentDescription = "Style Image",
266+
isSelectedIndex = true,
236267
)
237268
}

feature/home/src/main/kotlin/com/nexters/ilab/android/feature/home/HomeScreen.kt

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ import com.nexters.ilab.core.ui.component.TopAppBarNavigationType
5454
internal fun HomeRoute(
5555
padding: PaddingValues,
5656
onSettingClick: () -> Unit,
57+
onGenerateImgBtnClick: () -> Unit,
5758
onShowErrorSnackBar: (throwable: Throwable?) -> Unit,
5859
viewModel: HomeViewModel = hiltViewModel(),
5960
) {
@@ -63,6 +64,7 @@ internal fun HomeRoute(
6364
uiState = uiState,
6465
padding = padding,
6566
onSettingClick = onSettingClick,
67+
onGenerateImgBtnClick = onGenerateImgBtnClick,
6668
)
6769
}
6870

@@ -71,6 +73,7 @@ internal fun HomeScreen(
7173
uiState: HomeState,
7274
padding: PaddingValues,
7375
onSettingClick: () -> Unit,
76+
onGenerateImgBtnClick: () -> Unit,
7477
) {
7578
Column(
7679
modifier = Modifier
@@ -82,7 +85,7 @@ internal fun HomeScreen(
8285
HomeContent(
8386
styleImageList = uiState.styleImageList,
8487
profileImageList = uiState.profileImageList,
85-
onGenerateImgBtnClick = {},
88+
onGenerateImgBtnClick = onGenerateImgBtnClick,
8689
)
8790
}
8891
}
@@ -160,7 +163,6 @@ internal fun HomeKeywordView(
160163
.fillMaxWidth()
161164
.wrapContentHeight(),
162165
)
163-
164166
Column(modifier = Modifier.fillMaxSize()) {
165167
Spacer(modifier = Modifier.height(32.dp))
166168
Text(
@@ -209,7 +211,7 @@ internal fun HomeKeywordView(
209211
contentColor = Color.White,
210212
text = {
211213
Text(
212-
text = stringResource(id = R.string.home_generate_img_with_this_keyword),
214+
text = stringResource(id = R.string.home_generate_img_with_this_style),
213215
style = Subtitle1,
214216
)
215217
},
@@ -259,5 +261,10 @@ internal fun KeywordSampleImageItem(
259261
@Preview(showBackground = true)
260262
@Composable
261263
internal fun previewHomeScreen() {
262-
HomeScreen(HomeState(), PaddingValues(0.dp), {})
264+
HomeScreen(
265+
uiState = HomeState(),
266+
padding = PaddingValues(0.dp),
267+
onSettingClick = {},
268+
onGenerateImgBtnClick = {},
269+
)
263270
}

feature/home/src/main/kotlin/com/nexters/ilab/android/feature/home/navigation/HomeNavigation.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,14 @@ fun NavController.navigateToHome(navOptions: NavOptions) {
1616
fun NavGraphBuilder.homeNavGraph(
1717
padding: PaddingValues,
1818
onSettingClick: () -> Unit,
19+
onGenerateImgBtnClick: () -> Unit,
1920
onShowErrorSnackBar: (throwable: Throwable?) -> Unit,
2021
) {
2122
composable(route = HOME_ROUTE) {
2223
HomeRoute(
2324
padding = padding,
2425
onSettingClick = onSettingClick,
26+
onGenerateImgBtnClick = onGenerateImgBtnClick,
2527
onShowErrorSnackBar = onShowErrorSnackBar,
2628
)
2729
}

feature/main/src/main/kotlin/com/nexters/ilab/android/feature/main/MainScreen.kt

Lines changed: 43 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -71,56 +71,56 @@ internal fun MainScreen(
7171

7272
Scaffold(
7373
content = { padding ->
74-
Box(
74+
NavHost(
75+
navController = navigator.navController,
76+
startDestination = navigator.startDestination,
7577
modifier = Modifier.fillMaxSize(),
7678
) {
77-
NavHost(
78-
navController = navigator.navController,
79-
startDestination = navigator.startDestination,
80-
) {
81-
homeNavGraph(
82-
padding = padding,
83-
onSettingClick = { navigator.navigateToSetting() },
84-
onShowErrorSnackBar = onShowErrorSnackBar,
85-
)
79+
homeNavGraph(
80+
padding = padding,
81+
onSettingClick = navigator::navigateToSetting,
82+
onGenerateImgBtnClick = {
83+
navigator.navigate(MainTab.UPLOAD_PHOTO)
84+
},
85+
onShowErrorSnackBar = onShowErrorSnackBar,
86+
)
8687

87-
uploadPhotoNavGraph(
88-
navController = navigator.navController,
89-
onBackClick = navigator::popBackStackIfNotHome,
90-
onNavigateToPrivacyPolicy = navigator::navigateToPrivacyPolicy,
91-
onNavigateToUploadCheck = navigator::navigateToUploadCheck,
92-
onNavigateToInputStyle = navigator::navigateToInputStyle,
93-
onNavigateToCreateImage = navigator::navigateToCreateImage,
94-
)
88+
uploadPhotoNavGraph(
89+
navController = navigator.navController,
90+
onBackClick = navigator::popBackStackIfNotHome,
91+
onNavigateToPrivacyPolicy = navigator::navigateToPrivacyPolicy,
92+
onNavigateToUploadCheck = navigator::navigateToUploadCheck,
93+
onNavigateToInputStyle = navigator::navigateToInputStyle,
94+
onNavigateToCreateImage = navigator::navigateToCreateImage,
95+
)
9596

96-
createImageNavGraph(
97-
navController = navigator.navController,
98-
onCloseClick = navigator::clearBackStack,
99-
onNavigateToCreateImageComplete = navigator::navigateToCreateImageComplete,
100-
)
97+
createImageNavGraph(
98+
navController = navigator.navController,
99+
onCloseClick = navigator::clearBackStack,
100+
onNavigateToCreateImageComplete = navigator::navigateToCreateImageComplete,
101+
)
101102

102-
myPageNavGraph(
103-
navController = navigator.navController,
104-
padding = padding,
105-
onCloseClick = navigator::popBackStackIfNotHome,
106-
onSettingClick = { navigator.navigateToSetting() },
107-
onNavigateToMyAlbumImage = { navigator.navigateToMyAlbumImage() },
108-
onShowErrorSnackBar = onShowErrorSnackBar,
109-
)
103+
myPageNavGraph(
104+
navController = navigator.navController,
105+
padding = padding,
106+
onCloseClick = navigator::popBackStackIfNotHome,
107+
onSettingClick = { navigator.navigateToSetting() },
108+
onNavigateToMyAlbumImage = { navigator.navigateToMyAlbumImage() },
109+
onShowErrorSnackBar = onShowErrorSnackBar,
110+
)
110111

111-
settingNavGraph(
112-
onBackClick = navigator::popBackStackIfNotHome,
113-
onChangeDarkTheme = onChangeDarkTheme,
114-
onNavigateToPrivacyPolicy = navigator::navigateToPrivacyPolicy,
115-
onLogoutClick = onLogoutClick,
116-
onDeleteAccountClick = onDeleteAccountClick,
117-
onShowErrorSnackBar = onShowErrorSnackBar,
118-
)
112+
settingNavGraph(
113+
onBackClick = navigator::popBackStackIfNotHome,
114+
onChangeDarkTheme = onChangeDarkTheme,
115+
onNavigateToPrivacyPolicy = navigator::navigateToPrivacyPolicy,
116+
onLogoutClick = onLogoutClick,
117+
onDeleteAccountClick = onDeleteAccountClick,
118+
onShowErrorSnackBar = onShowErrorSnackBar,
119+
)
119120

120-
privacyPolicyNavGraph(
121-
onCloseClick = navigator::popBackStackIfNotHome,
122-
)
123-
}
121+
privacyPolicyNavGraph(
122+
onCloseClick = navigator::popBackStackIfNotHome,
123+
)
124124
}
125125
},
126126
bottomBar = {

0 commit comments

Comments
 (0)