Skip to content

Commit 1a90ef2

Browse files
authored
[MERGE] #304 -> develop
[FEAT/#304] 온보딩 뷰 / 필터링 건너뛰기 추가
2 parents 9e12f9e + c388c49 commit 1a90ef2

File tree

11 files changed

+139
-121
lines changed

11 files changed

+139
-121
lines changed

build-logic/src/main/java/terning.android.feature.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,5 @@ dependencies {
3636
implementation(libs.findLibrary("lottie").get())
3737
implementation(libs.findLibrary("accompanist.systemuicontroller").get())
3838
implementation(libs.findLibrary("androidx.browser").get())
39+
implementation(libs.findLibrary("kotlin.collections.immutable").get())
3940
}

core/designsystem/docs.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,17 @@ contentDescription을 사용하지 않는 Image가 담긴 패키지입니다.
1616
# Package com.terning.core.designsystem.component.item
1717
여러 화면에서 쓰이는 아이템들이 들어있는 패키지입니다.
1818

19+
# Package com.terning.core.designsystem.component.snackbar
20+
스낵바가 들어있는 패키지입니다.
21+
1922
# Package com.terning.core.designsystem.component.textfield
2023
텍스트 필드가 있는 패키지입니다.
2124

2225
# Package com.terning.core.designsystem.component.topappbar
2326
탑바가 있는 패키지입니다.
2427

2528
# Package com.terning.core.designsystem.theme
26-
<terning>의 theme가 있는 패키지입니다.
29+
terning의 theme가 있는 패키지입니다.
2730

2831
# Package com.terning.core.designsystem.type
2932
여러 가지 타입을 나타내는 패키지입니다.

core/designsystem/src/main/java/com/terning/core/designsystem/component/button/RectangleButton.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ fun RectangleButton(
4444

4545
@Preview(showBackground = true)
4646
@Composable
47-
fun RectangleButtonPreview() {
47+
private fun RectangleButtonPreview() {
4848
TerningPointTheme {
4949
RectangleButton(
5050
style = TerningTheme.typography.button0,

core/designsystem/src/main/java/com/terning/core/designsystem/component/button/RoundButton.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ fun RoundButton(
4646

4747
@Preview(showBackground = true)
4848
@Composable
49-
fun RoundButtonPreview() {
49+
private fun RoundButtonPreview() {
5050
TerningPointTheme {
5151
RoundButton(
5252
style = TerningTheme.typography.button0,

core/designsystem/src/main/java/com/terning/core/designsystem/component/button/TerningBasicButton.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ fun TerningBasicButton(
5757

5858
CompositionLocalProvider(LocalRippleTheme provides NoRippleTheme) {
5959
Button(
60-
contentPadding = PaddingValues(paddingVertical),
60+
contentPadding = PaddingValues(vertical = paddingVertical),
6161
modifier = modifier.fillMaxWidth(),
6262
interactionSource = interactionSource,
6363
enabled = isEnabled,
@@ -80,7 +80,7 @@ fun TerningBasicButton(
8080

8181
@Preview(showBackground = true)
8282
@Composable
83-
fun TerningBasicButtonPreview() {
83+
private fun TerningBasicButtonPreview() {
8484
TerningPointTheme {
8585
TerningBasicButton(
8686
text = R.string.button_preview,

feature/filtering/src/main/java/com/terning/feature/filtering/startfiltering/StartFilteringRoute.kt

Lines changed: 69 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ package com.terning.feature.filtering.startfiltering
33
import androidx.compose.animation.AnimatedVisibility
44
import androidx.compose.animation.fadeIn
55
import androidx.compose.foundation.background
6-
import androidx.compose.foundation.layout.Box
76
import androidx.compose.foundation.layout.Column
87
import androidx.compose.foundation.layout.Spacer
8+
import androidx.compose.foundation.layout.aspectRatio
99
import androidx.compose.foundation.layout.fillMaxSize
1010
import androidx.compose.foundation.layout.fillMaxWidth
1111
import androidx.compose.foundation.layout.height
@@ -21,17 +21,18 @@ import androidx.compose.ui.Modifier
2121
import androidx.compose.ui.platform.LocalConfiguration
2222
import androidx.compose.ui.res.stringResource
2323
import androidx.compose.ui.text.style.TextAlign
24+
import androidx.compose.ui.text.style.TextDecoration
2425
import androidx.compose.ui.tooling.preview.Preview
2526
import androidx.compose.ui.unit.dp
2627
import androidx.hilt.navigation.compose.hiltViewModel
2728
import androidx.lifecycle.compose.collectAsStateWithLifecycle
28-
import com.airbnb.lottie.compose.LottieCompositionSpec
2929
import com.airbnb.lottie.compose.LottieConstants
30-
import com.airbnb.lottie.compose.rememberLottieComposition
3130
import com.terning.core.analytics.EventType
3231
import com.terning.core.analytics.LocalTracker
33-
import com.terning.core.designsystem.component.button.RectangleButton
32+
import com.terning.core.designsystem.component.button.RoundButton
3433
import com.terning.core.designsystem.component.item.TerningLottieAnimation
34+
import com.terning.core.designsystem.extension.noRippleClickable
35+
import com.terning.core.designsystem.theme.Grey500
3536
import com.terning.core.designsystem.theme.TerningPointTheme
3637
import com.terning.core.designsystem.theme.TerningTheme
3738
import com.terning.core.designsystem.theme.White
@@ -40,7 +41,8 @@ import kotlinx.coroutines.delay
4041

4142
@Composable
4243
fun StartFilteringRoute(
43-
onNextClick: () -> Unit,
44+
onStartClick: () -> Unit,
45+
onLaterClick: () -> Unit,
4446
viewModel: StartFilteringViewModel = hiltViewModel()
4547
) {
4648
val state by viewModel.state.collectAsStateWithLifecycle()
@@ -56,69 +58,90 @@ fun StartFilteringRoute(
5658
}
5759

5860
StartFilteringScreen(
59-
onNextClick = {
60-
onNextClick()
61+
onStartClick = {
62+
onStartClick()
6163
amplitudeTracker.track(
6264
type = EventType.CLICK,
6365
name = "start_service"
6466
)
6567
},
68+
onLaterClick = onLaterClick,
6669
buttonState = state.isButtonVisible,
6770
screenHeight = screenHeight,
6871
)
69-
7072
}
7173

7274
@Composable
7375
fun StartFilteringScreen(
74-
onNextClick: () -> Unit,
76+
onStartClick: () -> Unit,
77+
onLaterClick: () -> Unit,
7578
buttonState: Boolean,
7679
screenHeight: Float,
7780
) {
78-
Box(
81+
Column(
7982
modifier = Modifier
8083
.fillMaxSize()
8184
.statusBarsPadding()
8285
.navigationBarsPadding()
83-
.background(White)
86+
.background(White),
87+
horizontalAlignment = Alignment.CenterHorizontally
88+
) {
89+
Spacer(modifier = Modifier.height((138 * screenHeight).dp))
90+
Text(
91+
text = stringResource(id = R.string.start_filtering_title),
92+
style = TerningTheme.typography.title1,
93+
textAlign = TextAlign.Center
94+
)
95+
TerningLottieAnimation(
96+
jsonFile = R.raw.terning_onboarding_start,
97+
iterations = LottieConstants.IterateForever,
98+
modifier = Modifier
99+
.fillMaxWidth()
100+
.aspectRatio(1f)
101+
.padding(horizontal = 24.dp)
102+
)
103+
Spacer(modifier = Modifier.height((79 * screenHeight).dp))
104+
ButtonAnimation(
105+
buttonState = buttonState,
106+
onStartClick = onStartClick,
107+
onLaterClick = onLaterClick
108+
)
109+
Spacer(modifier = Modifier.height((24 * screenHeight).dp))
110+
}
111+
}
112+
113+
@Composable
114+
private fun ButtonAnimation(
115+
buttonState: Boolean,
116+
onStartClick: () -> Unit,
117+
onLaterClick: () -> Unit,
118+
modifier: Modifier = Modifier,
119+
) {
120+
AnimatedVisibility(
121+
visible = buttonState,
122+
enter = fadeIn(initialAlpha = 0.3f),
84123
) {
85124
Column(
86-
modifier = Modifier.fillMaxSize(),
125+
modifier = modifier,
87126
horizontalAlignment = Alignment.CenterHorizontally
88127
) {
89-
Spacer(modifier = Modifier.height((128 * screenHeight).dp))
90-
Text(
91-
text = stringResource(id = R.string.start_filtering_title),
92-
style = TerningTheme.typography.title1,
93-
modifier = Modifier.padding(bottom = 36.dp),
94-
textAlign = TextAlign.Center
128+
RoundButton(
129+
style = TerningTheme.typography.button0,
130+
paddingVertical = 17.dp,
131+
text = R.string.start_filtering_button,
132+
onButtonClick = onStartClick,
133+
cornerRadius = 10.dp,
134+
modifier = Modifier.padding(horizontal = 24.dp)
95135
)
96-
TerningLottieAnimation(
97-
jsonFile = R.raw.terning_onboarding_start,
98-
iterations = LottieConstants.IterateForever,
99-
modifier = Modifier
100-
.fillMaxWidth()
101-
.height(372.dp)
102-
.padding(horizontal = 24.dp)
136+
Spacer(modifier = Modifier.height(12.dp))
137+
Text(
138+
text = stringResource(R.string.start_filtering_later),
139+
style = TerningTheme.typography.detail3.copy(
140+
textDecoration = TextDecoration.Underline
141+
),
142+
color = Grey500,
143+
modifier = Modifier.noRippleClickable { onLaterClick() }
103144
)
104-
Spacer(modifier = Modifier.weight(2f))
105-
}
106-
Box(
107-
modifier = Modifier
108-
.align(Alignment.BottomCenter)
109-
.padding(bottom = 12.dp)
110-
) {
111-
AnimatedVisibility(
112-
visible = buttonState,
113-
enter = fadeIn(initialAlpha = 0.3f),
114-
) {
115-
RectangleButton(
116-
style = TerningTheme.typography.button0,
117-
paddingVertical = 20.dp,
118-
text = R.string.start_filtering_button,
119-
onButtonClick = onNextClick,
120-
)
121-
}
122145
}
123146
}
124147
}
@@ -127,10 +150,11 @@ private const val DELAY: Long = 1000
127150

128151
@Preview(showBackground = true)
129152
@Composable
130-
fun StartFilteringScreenPreview() {
153+
private fun StartFilteringScreenPreview() {
131154
TerningPointTheme {
132155
StartFilteringScreen(
133-
onNextClick = {},
156+
onStartClick = {},
157+
onLaterClick = {},
134158
buttonState = true,
135159
screenHeight = 1f
136160
)

feature/filtering/src/main/java/com/terning/feature/filtering/startfiltering/navigation/StartFilteringNavigation.kt

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,10 @@ package com.terning.feature.filtering.startfiltering.navigation
22

33
import androidx.navigation.NavController
44
import androidx.navigation.NavGraphBuilder
5-
import androidx.navigation.NavHostController
65
import androidx.navigation.NavOptions
76
import androidx.navigation.compose.composable
87
import androidx.navigation.toRoute
98
import com.terning.core.navigation.Route
10-
import com.terning.feature.filtering.filteringone.navigation.navigateFilteringOne
119
import com.terning.feature.filtering.startfiltering.StartFilteringRoute
1210
import kotlinx.serialization.Serializable
1311

@@ -22,14 +20,14 @@ fun NavController.navigateStartFiltering(
2220
}
2321

2422
fun NavGraphBuilder.startFilteringNavGraph(
25-
navHostController: NavHostController
23+
onStartClick: (String) -> Unit,
24+
onLaterClick: () -> Unit
2625
) {
2726
composable<StartFiltering> {
2827
val args = it.toRoute<StartFiltering>()
2928
StartFilteringRoute(
30-
onNextClick = {
31-
navHostController.navigateFilteringOne(args.name)
32-
}
29+
onStartClick = { onStartClick(args.name) },
30+
onLaterClick = onLaterClick
3331
)
3432
}
3533
}

0 commit comments

Comments
 (0)