Skip to content

Commit d8a223c

Browse files
[Mod/#1561] SP1 홈화면 UI 개편 작업 (#1562)
* [MOD/#1561] 홈 화면 Toast 메시지 항상 길게 표시 - `HomeRoute`에만 정의된 `AnimatedHomeButton` 컴포넌트 삭제 - `HomeFloatingButton` 컴포넌트 삭제 - 홈 화면 토스트 메시지 항상 길게 표시 - 홈 화면 토스트 메시지 bottom padding 수정 * [MOD/#1561] 홈 화면 솝트 더 재밌게 즐기기 숨김 * [CHORE/#1561] 사용하지 않는 변수 삭제 * [CHORE/#1561] schedule 모듈 UserStatus 사용을 위한 의존성 추가 * [MOD/#1561] 일정 조회 화면에서 활동 기수인 경우만 "출석하러 가기" 버튼 표시 로직 추가 - 활동 기수 여부를 판단하기 위해 `ScheduleViewModel`, `ScheduleScreen`에 UserStaus 추가 * [MOD/#1566] Box 삭제 * [CHORE/#1566] 미사용 코드 삭제
1 parent 708c53f commit d8a223c

5 files changed

Lines changed: 58 additions & 207 deletions

File tree

feature/home/src/main/java/org/sopt/official/feature/home/HomeRoute.kt

Lines changed: 17 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,6 @@
2424
*/
2525
package org.sopt.official.feature.home
2626

27-
import androidx.compose.animation.AnimatedVisibility
28-
import androidx.compose.animation.core.Spring
29-
import androidx.compose.animation.core.spring
30-
import androidx.compose.animation.core.tween
31-
import androidx.compose.animation.slideInVertically
32-
import androidx.compose.animation.slideOutVertically
3327
import androidx.compose.foundation.layout.Box
3428
import androidx.compose.foundation.layout.Column
3529
import androidx.compose.foundation.layout.PaddingValues
@@ -44,7 +38,6 @@ import androidx.compose.material3.Text
4438
import androidx.compose.runtime.Composable
4539
import androidx.compose.runtime.DisposableEffect
4640
import androidx.compose.runtime.LaunchedEffect
47-
import androidx.compose.runtime.derivedStateOf
4841
import androidx.compose.runtime.getValue
4942
import androidx.compose.runtime.remember
5043
import androidx.compose.runtime.rememberCoroutineScope
@@ -67,8 +60,6 @@ import org.sopt.official.designsystem.SoptTheme.colors
6760
import org.sopt.official.designsystem.SoptTheme.typography
6861
import org.sopt.official.designsystem.component.dialog.NetworkErrorDialog
6962
import org.sopt.official.designsystem.component.indicator.LoadingIndicator
70-
import org.sopt.official.feature.home.component.HomeEnjoySoptServicesBlock
71-
import org.sopt.official.feature.home.component.HomeFloatingButton
7263
import org.sopt.official.feature.home.component.HomeLatestNewsSection
7364
import org.sopt.official.feature.home.component.HomeOfficialChannelButton
7465
import org.sopt.official.feature.home.component.HomePopularNewsSection
@@ -229,9 +220,6 @@ private fun HomeScreenForMember(
229220
) {
230221
Box {
231222
val scrollState = rememberScrollState()
232-
val isScrolledBeyondThreshold by remember {
233-
derivedStateOf { scrollState.value > 130 || scrollState.isScrollInProgress }
234-
}
235223
val shadowModifier = Modifier.dropShadow(
236224
shape = CircleShape,
237225
color = GrayAlpha700,
@@ -309,7 +297,9 @@ private fun HomeScreenForMember(
309297
.padding(horizontal = 20.dp)
310298
)
311299

312-
if (homeAppServices.isNotEmpty()) {
300+
// 솝트 더 재밌게 즐기기 영역 숨김 - 솝마디, 콕찌르기는 GNB에서만 표시
301+
// TODO: SP2 솝레터 구현이 완료되면 SOPT 더 재밌게 즐기기에 솝레터 추가하여 오픈 예정
302+
/* if (homeAppServices.isNotEmpty()) {
313303
Spacer(modifier = Modifier.height(height = 40.dp))
314304
315305
HomeEnjoySoptServicesBlock(
@@ -318,10 +308,10 @@ private fun HomeScreenForMember(
318308
modifier = Modifier
319309
.padding(horizontal = 20.dp)
320310
)
321-
}
311+
} */
322312

323313
if (popularPosts.isNotEmpty()) {
324-
Spacer(modifier = Modifier.height(height = 56.dp))
314+
Spacer(modifier = Modifier.height(height = 36.dp))
325315

326316
HomePopularNewsSection(
327317
postList = popularPosts,
@@ -370,44 +360,20 @@ private fun HomeScreenForMember(
370360
}
371361

372362
if (toastData.active) {
373-
AnimatedHomeButton(
374-
visible = !isScrolledBeyondThreshold,
375-
modifier = Modifier
363+
HomeToastButton(
364+
imageUrl = toastData.imageUrl,
365+
longTitle = toastData.title,
366+
missionDescription = toastData.toastDescription,
367+
buttonText = toastData.buttonText,
368+
onClick = {
369+
homeAppServicesNavigation.navigateToDeepLink(toastData.linkUrl)
370+
trackClickEvent(tracker, "at36_toast_button")
371+
},
372+
modifier = shadowModifier
376373
.align(Alignment.BottomCenter)
377374
.padding(horizontal = 20.dp)
378-
.padding(bottom = 82.dp)
379-
) {
380-
HomeToastButton(
381-
imageUrl = toastData.imageUrl,
382-
longTitle = toastData.title,
383-
missionDescription = toastData.toastDescription,
384-
buttonText = toastData.buttonText,
385-
onClick = {
386-
homeAppServicesNavigation.navigateToDeepLink(toastData.linkUrl)
387-
trackClickEvent(tracker, "at36_toast_button")
388-
},
389-
modifier = shadowModifier
390-
)
391-
}
392-
393-
AnimatedHomeButton(
394-
visible = isScrolledBeyondThreshold,
395-
modifier = Modifier
396-
.align(Alignment.BottomEnd)
397-
.padding(horizontal = 20.dp)
398-
.padding(bottom = 82.dp)
399-
) {
400-
HomeFloatingButton(
401-
imageUrl = toastData.imageUrl,
402-
shortTitle = toastData.buttonDescription,
403-
buttonText = toastData.buttonText,
404-
onClick = {
405-
homeAppServicesNavigation.navigateToDeepLink(toastData.linkUrl)
406-
trackClickEvent(tracker, "at36_floating_button")
407-
},
408-
modifier = shadowModifier
409-
)
410-
}
375+
.padding(bottom = 20.dp)
376+
)
411377
}
412378
}
413379
}
@@ -443,35 +409,5 @@ private fun HomeScreenForVisitor(
443409
onProjectClick = homeShortcutNavigation::navigateToSoptProject,
444410
onInstagramClick = homeShortcutNavigation::navigateToSoptInstagram,
445411
)
446-
Spacer(modifier = Modifier.height(height = 40.dp))
447-
HomeEnjoySoptServicesBlock(
448-
appServices = homeAppServices,
449-
onAppServiceClick = { url, _ -> homeAppServicesNavigation.navigateToDeepLink(url) },
450-
)
451-
}
452-
}
453-
454-
@Composable
455-
private fun AnimatedHomeButton(
456-
visible: Boolean,
457-
modifier: Modifier = Modifier,
458-
content: @Composable () -> Unit
459-
) {
460-
AnimatedVisibility(
461-
visible = visible,
462-
enter = slideInVertically(
463-
initialOffsetY = { it },
464-
animationSpec = spring(
465-
dampingRatio = Spring.DampingRatioMediumBouncy,
466-
stiffness = Spring.StiffnessMedium
467-
)
468-
),
469-
exit = slideOutVertically(
470-
targetOffsetY = { it * 3 },
471-
animationSpec = tween(durationMillis = 100)
472-
),
473-
modifier = modifier
474-
) {
475-
content()
476412
}
477413
}

feature/home/src/main/java/org/sopt/official/feature/home/component/HomeFloatingButton.kt

Lines changed: 0 additions & 103 deletions
This file was deleted.

feature/schedule/build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ dependencies {
3636
// core
3737
implementation(projects.core.common)
3838
implementation(projects.core.designsystem)
39+
implementation(projects.core.model)
40+
implementation(projects.core.localstorage)
3941

4042
// domain
4143
implementation(projects.domain.schedule)

feature/schedule/src/main/java/org/sopt/official/feature/schedule/ScheduleActivity.kt

Lines changed: 27 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ import org.sopt.official.common.navigator.NavigatorEntryPoint
7171
import org.sopt.official.designsystem.SoptTheme
7272
import org.sopt.official.feature.schedule.component.ScheduleItem
7373
import org.sopt.official.feature.schedule.component.VerticalDividerWithCircle
74+
import org.sopt.official.model.UserStatus
7475

7576
private val applicationNavigator by lazy {
7677
EntryPointAccessors.fromApplication(
@@ -106,13 +107,14 @@ class ScheduleActivity : AppCompatActivity() {
106107

107108
@OptIn(ExperimentalMaterial3Api::class)
108109
@Composable
109-
fun ScheduleScreen(
110+
private fun ScheduleScreen(
110111
navigateUp: () -> Unit = {},
111112
navigateAttendance: () -> Unit = {},
112113
viewModel: ScheduleViewModel = hiltViewModel(),
113114
) {
114115
val lazyListState = rememberLazyListState()
115116
val state by viewModel.schedule.collectAsStateWithLifecycle()
117+
val userStatus by viewModel.userStatus.collectAsStateWithLifecycle()
116118

117119
LaunchedEffect(state) {
118120
if (state.scheduleList.isNotEmpty()) {
@@ -150,9 +152,9 @@ fun ScheduleScreen(
150152
) { innerPadding ->
151153
Box(
152154
modifier = Modifier
153-
.padding(innerPadding)
155+
.padding(paddingValues = innerPadding)
154156
.fillMaxSize()
155-
.background(SoptTheme.colors.background)
157+
.background(color = SoptTheme.colors.background)
156158
.padding(bottom = 34.dp)
157159
) {
158160
LazyColumn(
@@ -167,7 +169,7 @@ fun ScheduleScreen(
167169
date = item.date,
168170
title = item.title,
169171
type = item.type,
170-
isRecentSchedule = item.isRecentSchedule,
172+
isRecentSchedule = item.isRecentSchedule
171173
)
172174
}
173175

@@ -188,30 +190,32 @@ fun ScheduleScreen(
188190
.height(200.dp)
189191
.background(
190192
brush = Brush.verticalGradient(
191-
listOf(
193+
colors = listOf(
192194
Color(0x000F1010),
193-
Color(0xFF0F1010),
194-
),
195+
Color(0xFF0F1010)
196+
)
195197
)
196198
)
197199
)
198200

199-
Box(
200-
modifier = Modifier
201-
.align(Alignment.BottomCenter)
202-
.fillMaxWidth()
203-
.padding(horizontal = 20.dp)
204-
.clip(RoundedCornerShape(12.dp))
205-
.background(SoptTheme.colors.primary)
206-
.clickable(onClick = navigateAttendance),
207-
contentAlignment = Alignment.Center
208-
) {
209-
Text(
210-
text = "출석하러 가기",
211-
style = SoptTheme.typography.label18SB,
212-
color = SoptTheme.colors.onPrimary,
213-
modifier = Modifier.padding(horizontal = 26.dp, vertical = 16.dp)
214-
)
201+
if(userStatus == UserStatus.ACTIVE) {
202+
Box(
203+
modifier = Modifier
204+
.align(Alignment.BottomCenter)
205+
.fillMaxWidth()
206+
.padding(horizontal = 20.dp)
207+
.clip(shape = RoundedCornerShape(12.dp))
208+
.background(color = SoptTheme.colors.primary)
209+
.clickable(onClick = navigateAttendance),
210+
contentAlignment = Alignment.Center
211+
) {
212+
Text(
213+
text = "출석하러 가기",
214+
style = SoptTheme.typography.label18SB,
215+
color = SoptTheme.colors.onPrimary,
216+
modifier = Modifier.padding(horizontal = 26.dp, vertical = 16.dp)
217+
)
218+
}
215219
}
216220
}
217221
}

0 commit comments

Comments
 (0)