Skip to content

Commit 190b37c

Browse files
committed
Refactor: 홈화면 리디자인 반영
1 parent 0c65dde commit 190b37c

4 files changed

Lines changed: 77 additions & 77 deletions

File tree

core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilFloatingButton.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@ fun BitnagilFloatingButton(
5454
BitnagilIcon(
5555
id = id,
5656
tint = if (isActive) colors.activeIconColor else colors.defaultIconColor,
57-
modifier = Modifier.size(24.dp),
5857
)
5958
}
6059
}

presentation/src/main/java/com/threegap/bitnagil/presentation/home/HomeScreen.kt

Lines changed: 71 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,40 @@
11
package com.threegap.bitnagil.presentation.home
22

33
import androidx.compose.foundation.background
4+
import androidx.compose.foundation.layout.Arrangement
45
import androidx.compose.foundation.layout.Box
56
import androidx.compose.foundation.layout.Column
7+
import androidx.compose.foundation.layout.Row
68
import androidx.compose.foundation.layout.Spacer
79
import androidx.compose.foundation.layout.fillMaxSize
810
import androidx.compose.foundation.layout.fillMaxWidth
911
import androidx.compose.foundation.layout.height
1012
import androidx.compose.foundation.layout.padding
1113
import androidx.compose.foundation.lazy.LazyColumn
1214
import androidx.compose.foundation.shape.RoundedCornerShape
15+
import androidx.compose.material3.Text
1316
import androidx.compose.runtime.Composable
1417
import androidx.compose.runtime.getValue
1518
import androidx.compose.ui.Alignment
1619
import androidx.compose.ui.Modifier
17-
import androidx.compose.ui.geometry.Offset
18-
import androidx.compose.ui.graphics.Brush
1920
import androidx.compose.ui.input.nestedscroll.nestedScroll
2021
import androidx.compose.ui.tooling.preview.Preview
2122
import androidx.compose.ui.unit.dp
22-
import androidx.compose.ui.zIndex
2323
import androidx.hilt.navigation.compose.hiltViewModel
2424
import androidx.lifecycle.compose.collectAsStateWithLifecycle
2525
import com.threegap.bitnagil.designsystem.BitnagilTheme
26-
import com.threegap.bitnagil.designsystem.R
27-
import com.threegap.bitnagil.designsystem.component.atom.BitnagilIcon
2826
import com.threegap.bitnagil.designsystem.modifier.clickableWithoutRipple
2927
import com.threegap.bitnagil.presentation.common.flow.collectAsEffect
3028
import com.threegap.bitnagil.presentation.common.toast.GlobalBitnagilToast
3129
import com.threegap.bitnagil.presentation.home.component.template.CollapsibleHomeHeader
3230
import com.threegap.bitnagil.presentation.home.component.template.DeleteConfirmDialog
33-
import com.threegap.bitnagil.presentation.home.component.template.RoutineDetailsBottomSheet
3431
import com.threegap.bitnagil.presentation.home.component.template.EmptyRoutineView
32+
import com.threegap.bitnagil.presentation.home.component.template.RoutineDetailsBottomSheet
3533
import com.threegap.bitnagil.presentation.home.component.template.RoutineSection
3634
import com.threegap.bitnagil.presentation.home.component.template.WeeklyDatePicker
3735
import com.threegap.bitnagil.presentation.home.model.HomeIntent
3836
import com.threegap.bitnagil.presentation.home.model.HomeSideEffect
3937
import com.threegap.bitnagil.presentation.home.model.HomeState
40-
import com.threegap.bitnagil.presentation.home.model.RoutineUiModel
4138
import com.threegap.bitnagil.presentation.home.util.rememberCollapsibleHeaderState
4239
import java.time.LocalDate
4340

@@ -125,15 +122,15 @@ fun HomeScreenContainer(
125122
onSubRoutineCompletionToggle = { routineId, subRoutineId, isCompleted ->
126123
viewModel.toggleSubRoutineCompletion(routineId, subRoutineId, isCompleted)
127124
},
128-
onShowRoutineDetailsBottomSheet = { routine ->
129-
viewModel.sendIntent(HomeIntent.ShowRoutineDetailsBottomSheet(routine))
130-
},
131125
onRegisterRoutineClick = {
132126
viewModel.sendIntent(HomeIntent.OnRegisterRoutineClick)
133127
},
134128
onRegisterEmotionClick = {
135129
viewModel.sendIntent(HomeIntent.OnRegisterEmotionClick)
136130
},
131+
onShowMoreRoutinesClick = {
132+
// TODO: 루틴 리스트 화면으로 이동
133+
}
137134
)
138135
}
139136

@@ -145,26 +142,17 @@ private fun HomeScreen(
145142
onNextWeekClick: () -> Unit,
146143
onRoutineCompletionToggle: (String, Boolean) -> Unit,
147144
onSubRoutineCompletionToggle: (String, String, Boolean) -> Unit,
148-
onShowRoutineDetailsBottomSheet: (RoutineUiModel) -> Unit,
149145
onRegisterRoutineClick: () -> Unit,
150146
onRegisterEmotionClick: () -> Unit,
147+
onShowMoreRoutinesClick: () -> Unit,
151148
modifier: Modifier = Modifier,
152149
) {
153150
val collapsibleHeaderState = rememberCollapsibleHeaderState()
154151

155152
Box(
156153
modifier = modifier
157154
.fillMaxSize()
158-
.background(
159-
brush = Brush.linearGradient(
160-
colors = listOf(
161-
BitnagilTheme.colors.homeGradientStartColor,
162-
BitnagilTheme.colors.homeGradientEndColor,
163-
),
164-
start = Offset(0f, 0f),
165-
end = Offset(collapsibleHeaderState.screenHeight.value, collapsibleHeaderState.screenWidth.value * 2),
166-
),
167-
),
155+
.background(BitnagilTheme.colors.coolGray10),
168156
) {
169157
Column {
170158
Spacer(modifier = Modifier.height(collapsibleHeaderState.currentHeaderHeight))
@@ -177,76 +165,88 @@ private fun HomeScreen(
177165
onNextWeekClick = onNextWeekClick,
178166
modifier = Modifier
179167
.background(
180-
color = BitnagilTheme.colors.white,
168+
color = BitnagilTheme.colors.coolGray99,
181169
shape = RoundedCornerShape(
182170
topStart = 20.dp,
183171
topEnd = 20.dp,
184172
),
185173
),
186174
)
187175

188-
LazyColumn(
189-
state = collapsibleHeaderState.lazyListState,
190-
modifier = Modifier
191-
.fillMaxSize()
192-
.background(BitnagilTheme.colors.white)
193-
.nestedScroll(collapsibleHeaderState.nestedScrollConnection),
194-
) {
195-
if (uiState.selectedDateRoutines.isEmpty()) {
196-
item {
197-
EmptyRoutineView(
198-
onRegisterRoutineClick = onRegisterRoutineClick,
199-
modifier = Modifier
200-
.fillMaxSize()
201-
.padding(top = 62.dp),
202-
)
203-
}
204-
} else {
205-
uiState.selectedDateRoutines.forEachIndexed { index, routine ->
176+
if (uiState.selectedDateRoutines.isEmpty()) {
177+
EmptyRoutineView(
178+
onRegisterRoutineClick = onRegisterRoutineClick,
179+
modifier = Modifier
180+
.fillMaxSize()
181+
.background(BitnagilTheme.colors.coolGray99)
182+
.padding(top = 62.dp),
183+
)
184+
} else {
185+
Row(
186+
modifier = Modifier
187+
.fillMaxWidth()
188+
.background(BitnagilTheme.colors.coolGray99)
189+
.padding(start = 16.dp, end = 4.dp),
190+
horizontalArrangement = Arrangement.SpaceBetween,
191+
verticalAlignment = Alignment.Top,
192+
) {
193+
Text(
194+
text = "루틴 리스트",
195+
color = BitnagilTheme.colors.coolGray60,
196+
style = BitnagilTheme.typography.body2SemiBold,
197+
modifier = Modifier.padding(top = 6.dp),
198+
)
199+
Text(
200+
text = "더보기",
201+
color = BitnagilTheme.colors.coolGray10,
202+
style = BitnagilTheme.typography.body2SemiBold,
203+
modifier = Modifier
204+
.clickableWithoutRipple { onShowMoreRoutinesClick() }
205+
.padding(vertical = 10.dp, horizontal = 12.dp),
206+
)
207+
}
208+
209+
LazyColumn(
210+
modifier = Modifier
211+
.fillMaxSize()
212+
.background(BitnagilTheme.colors.coolGray99)
213+
.nestedScroll(collapsibleHeaderState.nestedScrollConnection)
214+
.padding(horizontal = 16.dp)
215+
.padding(bottom = 12.dp),
216+
state = collapsibleHeaderState.lazyListState,
217+
verticalArrangement = Arrangement.spacedBy(12.dp),
218+
) {
219+
uiState.selectedDateRoutines.forEach { routine ->
206220
item(
207221
key = "${routine.routineId}_${uiState.selectedDate}",
208222
) {
209-
Box(
210-
modifier = Modifier.fillMaxWidth(),
211-
) {
212-
RoutineSection(
213-
routine = routine,
214-
onRoutineToggle = { isCompleted ->
215-
onRoutineCompletionToggle(
216-
routine.routineId,
217-
isCompleted,
218-
)
219-
},
220-
onSubRoutineToggle = { subRoutineId, isCompleted ->
221-
onSubRoutineCompletionToggle(
222-
routine.routineId,
223-
subRoutineId,
224-
isCompleted,
225-
)
226-
},
227-
onMoreClick = {
228-
onShowRoutineDetailsBottomSheet(routine)
229-
},
230-
modifier = Modifier
231-
.padding(top = 23.dp, bottom = 10.dp)
232-
.padding(horizontal = 16.dp),
233-
)
234-
223+
RoutineSection(
224+
routine = routine,
225+
onRoutineToggle = { isCompleted ->
226+
onRoutineCompletionToggle(
227+
routine.routineId,
228+
isCompleted,
229+
)
230+
},
231+
onSubRoutineToggle = { subRoutineId, isCompleted ->
232+
onSubRoutineCompletionToggle(
233+
routine.routineId,
234+
subRoutineId,
235+
isCompleted,
235236
)
237+
},
238+
)
236239
}
237240
}
238241
}
239-
item {
240-
Spacer(modifier = Modifier.height(110.dp))
241-
}
242242
}
243243
}
244244

245245
CollapsibleHomeHeader(
246246
userName = uiState.userNickname,
247247
emotionBallType = uiState.myEmotion,
248248
collapsibleHeaderState = collapsibleHeaderState,
249-
onEmotionRecordClick = onRegisterEmotionClick,
249+
onRegisterEmotion = onRegisterEmotionClick,
250250
)
251251
}
252252
}
@@ -261,8 +261,8 @@ private fun HomeScreenPreview() {
261261
onNextWeekClick = {},
262262
onRoutineCompletionToggle = { _, _ -> },
263263
onSubRoutineCompletionToggle = { _, _, _ -> },
264-
onShowRoutineDetailsBottomSheet = {},
265264
onRegisterRoutineClick = {},
266265
onRegisterEmotionClick = {},
266+
onShowMoreRoutinesClick = {}
267267
)
268268
}

presentation/src/main/java/com/threegap/bitnagil/presentation/home/component/template/CollapsibleHomeHeader.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ fun CollapsibleHomeHeader(
2828
userName: String,
2929
emotionBallType: EmotionBallType?,
3030
collapsibleHeaderState: CollapsibleHeaderState,
31-
onEmotionRecordClick: () -> Unit,
31+
onRegisterEmotion: () -> Unit,
3232
modifier: Modifier = Modifier,
3333
) {
3434
Column(
@@ -70,7 +70,8 @@ fun CollapsibleHomeHeader(
7070
)
7171

7272
EmotionRegisterButton(
73-
onClick = onEmotionRecordClick,
73+
onClick = onRegisterEmotion,
74+
enabled = emotionBallType == null,
7475
)
7576
}
7677

@@ -90,11 +91,11 @@ fun CollapsibleHomeHeader(
9091

9192
@Preview
9293
@Composable
93-
private fun HomeTopBarPreview() {
94+
private fun CollapsibleHomeHeaderPreview() {
9495
CollapsibleHomeHeader(
9596
userName = "대현",
9697
emotionBallType = null,
9798
collapsibleHeaderState = rememberCollapsibleHeaderState(),
98-
onEmotionRecordClick = {},
99+
onRegisterEmotion = {},
99100
)
100101
}

presentation/src/main/java/com/threegap/bitnagil/presentation/home/component/template/EmptyRoutineView.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ fun EmptyRoutineView(
2323
modifier: Modifier = Modifier,
2424
) {
2525
Column(
26-
verticalArrangement = Arrangement.Center,
26+
verticalArrangement = Arrangement.Top,
2727
horizontalAlignment = Alignment.CenterHorizontally,
2828
modifier = modifier,
2929
) {

0 commit comments

Comments
 (0)