Skip to content

Commit 3bf8910

Browse files
authored
πŸ”€ :: μ‹ μ²­ νŽ˜μ΄μ§€ κ΅¬ν˜„
πŸ”€ :: μ‹ μ²­ νŽ˜μ΄μ§€ κ΅¬ν˜„
2 parents d4d7915 + 8520fe7 commit 3bf8910

File tree

63 files changed

+2213
-30
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+2213
-30
lines changed

β€Žapp/build.gradle.ktsβ€Ž

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,6 @@ android {
3535
applicationIdSuffix = ".dev"
3636
versionNameSuffix = "-dev"
3737
buildConfigField("String", "ENVIRONMENT", "\"dev\"")
38-
39-
compileOptions {
40-
isCoreLibraryDesugaringEnabled = true
41-
}
4238
}
4339

4440
create("prod") {
@@ -144,7 +140,7 @@ dependencies {
144140
implementation(libs.material)
145141

146142
implementation(libs.javax.inject)
147-
coreLibraryDesugaring(libs.desugar.jdk.libs)
143+
// coreLibraryDesugaring(libs.desugar.jdk.libs)
148144

149145
implementation(libs.okhttp)
150146
implementation(libs.okhttp.interceptor.logging)

β€Žapp/src/dev/kotlin/team/aliens/dms/android/app/DmsApp.ktβ€Ž

Lines changed: 58 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import androidx.compose.material3.Scaffold
88
import androidx.compose.material3.SnackbarHost
99
import androidx.compose.material3.windowsizeclass.WindowSizeClass
1010
import androidx.compose.runtime.Composable
11+
import androidx.compose.runtime.CompositionLocalProvider
1112
import androidx.compose.runtime.LaunchedEffect
1213
import androidx.compose.runtime.collectAsState
1314
import androidx.compose.runtime.getValue
@@ -22,12 +23,16 @@ import kotlinx.coroutines.flow.StateFlow
2223
import kotlinx.serialization.Serializable
2324
import team.aliens.dms.android.core.designsystem.snackbar.DmsSnackBar
2425
import team.aliens.dms.android.core.designsystem.snackbar.DmsSnackBarVisuals
26+
import team.aliens.dms.android.core.ui.navigation.LocalResultStore
27+
import team.aliens.dms.android.core.ui.navigation.rememberResultStore
2528
import team.aliens.dms.android.feature.main.application.navigation.ApplicationRoute
2629
import team.aliens.dms.android.feature.main.home.navigation.HomeRoute
2730
import team.aliens.dms.android.feature.main.mypage.navigation.MyPageRoute
2831
import team.aliens.dms.android.feature.meal.navigation.MealRoute
2932
import team.aliens.dms.android.feature.onboarding.navigation.OnboardingRoute
33+
import team.aliens.dms.android.feature.remain.navigation.RemainApplicationRoute
3034
import team.aliens.dms.android.feature.signin.navigation.SignInRoute
35+
import team.aliens.dms.android.feature.vote.navigation.VoteRoute
3136

3237
@Serializable
3338
data object OnboardingScreenNav : NavKey
@@ -44,6 +49,12 @@ data object MealScreenNav : NavKey
4449
@Serializable
4550
data object ApplicationScreenNav : NavKey
4651

52+
@Serializable
53+
data class VoteScreenNav(val title: String, val startTime: String, val endTime: String) : NavKey
54+
55+
@Serializable
56+
data object RemainScreenNav : NavKey
57+
4758
@Serializable
4859
data object MyPageScreenNav : NavKey
4960

@@ -58,6 +69,7 @@ fun DmsApp(
5869
val isJwtAvailableState by isJwtAvailable.collectAsState()
5970

6071
val backStack = rememberNavBackStack(OnboardingScreenNav)
72+
val resultStore = rememberResultStore()
6173
val currentScreen = backStack.lastOrNull()
6274
val shouldShowBottomBar = currentScreen in listOf(
6375
HomeScreenNav,
@@ -98,13 +110,14 @@ fun DmsApp(
98110
}
99111
}
100112
) { paddingValues ->
101-
NavDisplay(
102-
modifier = Modifier
103-
.padding(paddingValues)
104-
.navigationBarsPadding(),
105-
backStack = backStack,
106-
onBack = { backStack.removeLastOrNull() },
107-
entryProvider = entryProvider {
113+
CompositionLocalProvider(LocalResultStore provides resultStore) {
114+
NavDisplay(
115+
modifier = Modifier
116+
.padding(paddingValues)
117+
.navigationBarsPadding(),
118+
backStack = backStack,
119+
onBack = { backStack.removeLastOrNull() },
120+
entryProvider = entryProvider {
108121
entry<OnboardingScreenNav> {
109122
OnboardingRoute(
110123
navigateToSignIn = {
@@ -136,18 +149,53 @@ fun DmsApp(
136149
)
137150
}
138151
entry<ApplicationScreenNav> {
139-
ApplicationRoute()
152+
ApplicationRoute(
153+
onNavigateRemainApplication = {
154+
backStack.add(RemainScreenNav)
155+
},
156+
onNavigateOutingApplication = {},
157+
onNavigateVolunteerApplication = {},
158+
onNavigateVote = {
159+
backStack.add(VoteScreenNav(it.topicName, it.startTime.toString(), it.endTime.toString()))
160+
},
161+
onShowSnackBar = { snackBarType, message ->
162+
appState.showSnackBar(snackBarType, message)
163+
},
164+
)
165+
}
166+
entry<VoteScreenNav> { voteNav ->
167+
VoteRoute(
168+
title = voteNav.title,
169+
startTime = voteNav.startTime,
170+
endTime = voteNav.endTime,
171+
onNavigateBack = { backStack.remove(VoteScreenNav(voteNav.title, voteNav.startTime, voteNav.endTime)) },
172+
onShowSnackBar = { snackBarType, message ->
173+
appState.showSnackBar(snackBarType, message)
174+
}
175+
)
176+
}
177+
entry<RemainScreenNav> {
178+
RemainApplicationRoute(
179+
onNavigateBack = { title ->
180+
resultStore.setResult<String?>("remain_application_result", title)
181+
backStack.remove(RemainScreenNav)
182+
},
183+
onShowSnackBar = { snackBarType, message ->
184+
appState.showSnackBar(snackBarType, message)
185+
}
186+
)
140187
}
141188
entry<MyPageScreenNav> {
142189
MyPageRoute()
143190
}
144191
entry<MealScreenNav> {
145192
MealRoute(
146-
onNavigateBack = { backStack.removeLastOrNull() }
193+
onNavigateBack = { backStack.remove(MealScreenNav) }
147194
)
148195
}
149196
},
150-
)
197+
)
198+
}
151199
SnackbarHost(
152200
modifier = Modifier
153201
.statusBarsPadding()

β€ŽbuildSrc/src/main/kotlin/ProjectProperties.ktβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
object ProjectProperties {
22
const val COMPILE_SDK = 36
3-
const val MIN_SDK = 24
3+
const val MIN_SDK = 26
44
const val TARGET_SDK = 36
55
const val VERSION_CODE = 28
66
const val VERSION_NAME = "1.5.3"

β€Žcore/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/button/Button.ktβ€Ž

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,15 @@ import androidx.compose.animation.animateColorAsState
44
import androidx.compose.foundation.background
55
import androidx.compose.foundation.layout.Box
66
import androidx.compose.foundation.layout.PaddingValues
7+
import androidx.compose.foundation.layout.WindowInsets
8+
import androidx.compose.foundation.layout.fillMaxWidth
79
import androidx.compose.foundation.layout.height
810
import androidx.compose.foundation.layout.imePadding
11+
import androidx.compose.foundation.layout.navigationBars
12+
import androidx.compose.foundation.layout.offset
913
import androidx.compose.foundation.layout.padding
14+
import androidx.compose.foundation.layout.systemBarsPadding
15+
import androidx.compose.foundation.layout.windowInsetsPadding
1016
import androidx.compose.foundation.shape.RoundedCornerShape
1117
import androidx.compose.material3.Text
1218
import androidx.compose.runtime.Composable
@@ -21,6 +27,7 @@ import androidx.compose.ui.graphics.Color
2127
import androidx.compose.ui.graphics.Shape
2228
import androidx.compose.ui.platform.LocalDensity
2329
import androidx.compose.ui.text.style.TextDecoration
30+
import androidx.compose.ui.unit.Dp
2431
import androidx.compose.ui.unit.dp
2532
import team.aliens.dms.android.core.designsystem.DmsTheme
2633
import team.aliens.dms.android.core.designsystem.bodyM
@@ -308,8 +315,6 @@ fun DmsButton(
308315
PaddingValues(horizontal = 20.dp, vertical = 16.dp)
309316
}
310317

311-
// val buttonShape = if (buttonType == ButtonType.Rounded) RoundedCornerShape(24.dp) else shape
312-
313318
BasicButton(
314319
modifier = modifier,
315320
backgroundColor = backgroundColor,
@@ -349,3 +354,35 @@ fun DmsButton(
349354
}
350355
}
351356
}
357+
@Composable
358+
fun DmsLayeredButton(
359+
modifier: Modifier = Modifier,
360+
text: String,
361+
buttonType: ButtonType,
362+
buttonColor: ButtonColor,
363+
enabled: Boolean = true,
364+
shape: RoundedCornerShape,
365+
backgroundColor: Color = DmsTheme.colorScheme.surfaceVariant,
366+
layerOffset: Dp = 24.dp,
367+
isLoading: Boolean,
368+
onClick: () -> Unit,
369+
) {
370+
Box(
371+
modifier = modifier
372+
.background(color = Color.White, shape = shape)
373+
.windowInsetsPadding(WindowInsets.navigationBars)
374+
.padding(layerOffset),
375+
) {
376+
DmsButton(
377+
modifier = Modifier
378+
.fillMaxWidth()
379+
.align(Alignment.Center),
380+
text = text,
381+
buttonType = buttonType,
382+
buttonColor = buttonColor,
383+
enabled = enabled,
384+
isLoading = isLoading,
385+
onClick = onClick,
386+
)
387+
}
388+
}
Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
package team.aliens.dms.android.core.designsystem.card
2+
3+
import androidx.annotation.DrawableRes
4+
import androidx.compose.animation.animateColorAsState
5+
import androidx.compose.foundation.Image
6+
import androidx.compose.foundation.background
7+
import androidx.compose.foundation.border
8+
import androidx.compose.foundation.layout.Arrangement
9+
import androidx.compose.foundation.layout.Column
10+
import androidx.compose.foundation.layout.Row
11+
import androidx.compose.foundation.layout.Spacer
12+
import androidx.compose.foundation.layout.fillMaxWidth
13+
import androidx.compose.foundation.layout.padding
14+
import androidx.compose.foundation.layout.size
15+
import androidx.compose.foundation.shape.RoundedCornerShape
16+
import androidx.compose.material3.Icon
17+
import androidx.compose.material3.Text
18+
import androidx.compose.runtime.Composable
19+
import androidx.compose.runtime.getValue
20+
import androidx.compose.ui.Alignment
21+
import androidx.compose.ui.Modifier
22+
import androidx.compose.ui.draw.clip
23+
import androidx.compose.ui.res.painterResource
24+
import androidx.compose.ui.unit.dp
25+
import team.aliens.dms.android.core.designsystem.DmsTheme
26+
import team.aliens.dms.android.core.designsystem.bodyB
27+
import team.aliens.dms.android.core.designsystem.endPadding
28+
import team.aliens.dms.android.core.designsystem.foundation.DmsIcon
29+
import team.aliens.dms.android.core.designsystem.labelB
30+
import team.aliens.dms.android.core.designsystem.labelM
31+
import team.aliens.dms.android.core.designsystem.util.clickable
32+
33+
@Composable
34+
fun DmsApplicationCard(
35+
modifier: Modifier = Modifier,
36+
title: String,
37+
description: String? = null,
38+
period: String? = null,
39+
appliedTitle: String? = null,
40+
@DrawableRes iconRes: Int,
41+
isSelected: Boolean = false,
42+
onClick: () -> Unit,
43+
) {
44+
val borderColor by animateColorAsState(
45+
targetValue = if (isSelected) {
46+
DmsTheme.colorScheme.onPrimaryContainer
47+
} else {
48+
DmsTheme.colorScheme.surfaceTint
49+
},
50+
)
51+
Column(
52+
modifier = modifier
53+
.fillMaxWidth()
54+
.clip(RoundedCornerShape(32.dp))
55+
.background(DmsTheme.colorScheme.surfaceTint)
56+
.clickable(onClick = onClick)
57+
.border(
58+
width = 2.dp,
59+
color = borderColor,
60+
shape = RoundedCornerShape(32.dp),
61+
)
62+
.padding(horizontal = 16.dp, vertical = 24.dp),
63+
verticalArrangement = Arrangement.spacedBy(8.dp),
64+
) {
65+
Row(
66+
verticalAlignment = Alignment.CenterVertically,
67+
) {
68+
Image(
69+
modifier = Modifier.size(32.dp),
70+
painter = painterResource(iconRes),
71+
contentDescription = null,
72+
)
73+
Text(
74+
modifier = Modifier.padding(start = 8.dp),
75+
text = title,
76+
style = DmsTheme.typography.bodyB,
77+
color = DmsTheme.colorScheme.inverseOnSurface,
78+
)
79+
Spacer(modifier = Modifier.weight(1f))
80+
if (description == null && appliedTitle != null) {
81+
AppliedTitleText(
82+
modifier = Modifier.endPadding(16.dp),
83+
appliedTitle = appliedTitle,
84+
)
85+
}
86+
Icon(
87+
painter = painterResource(DmsIcon.Forward),
88+
tint = DmsTheme.colorScheme.scrim,
89+
contentDescription = null,
90+
)
91+
}
92+
period?.let {
93+
Text(
94+
text = period,
95+
style = DmsTheme.typography.labelM,
96+
color = DmsTheme.colorScheme.onPrimaryContainer,
97+
)
98+
}
99+
description?.let {
100+
Row(
101+
verticalAlignment = Alignment.CenterVertically,
102+
horizontalArrangement = Arrangement.SpaceBetween,
103+
) {
104+
Text(
105+
text = description,
106+
style = DmsTheme.typography.labelM,
107+
color = DmsTheme.colorScheme.inverseSurface,
108+
)
109+
Spacer(modifier = Modifier.weight(1f))
110+
appliedTitle?.let {
111+
AppliedTitleText(appliedTitle = appliedTitle)
112+
}
113+
}
114+
}
115+
}
116+
}
117+
118+
@Composable
119+
private fun AppliedTitleText(
120+
modifier: Modifier = Modifier,
121+
appliedTitle: String,
122+
) {
123+
Text(
124+
modifier = modifier
125+
.background(
126+
color = DmsTheme.colorScheme.primary,
127+
shape = RoundedCornerShape(6.dp),
128+
)
129+
.padding(horizontal = 22.dp, vertical = 8.dp),
130+
text = appliedTitle,
131+
style = DmsTheme.typography.labelB,
132+
color = DmsTheme.colorScheme.onPrimaryContainer,
133+
)
134+
}

0 commit comments

Comments
Β (0)