Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
90d176c
[FEAT/#21] DowntimePhaseChip 구현
sohee6989 Jan 9, 2026
2687f5f
[FEAT/#21] MonthPlanBox 구현
sohee6989 Jan 9, 2026
230f96c
[MOD/#21] MonthPlanBox 컴포넌트 그림자 추가
sohee6989 Jan 9, 2026
c31c41c
[REFACTOR/#21] 컴포넌트 세분화
sohee6989 Jan 10, 2026
6abd0cb
[MOD/#21] shadow 코너 라운드값 수정
sohee6989 Jan 10, 2026
bf92a62
[CHORE/#21] 컴포넌트 내 프리뷰 추가
sohee6989 Jan 10, 2026
fd87b62
[CHORE/#21] 컴포넌트 파일 하나로 합치기
sohee6989 Jan 10, 2026
7ccaf2d
[feat/#21] shadow1 색상 컬러 시스템에 추가
sohee6989 Jan 10, 2026
2a87c1f
[CHORE/#21] shadow 색상 하드코딩 해놓은 거 변경
sohee6989 Jan 10, 2026
fb11b98
[CHORE/#32] shadow 색상 정의 방법 수정
sohee6989 Jan 15, 2026
fa7380f
[ADD/#32] 아이콘 추가
sohee6989 Jan 15, 2026
32d2dd0
[FEAT/#32] 일정 상태 data class 구현
sohee6989 Jan 15, 2026
845d806
[FEAT/#32] 일정 회복 단계 DowntimePhase enum 추가
sohee6989 Jan 15, 2026
a1a41d2
[FEAT/#21] PlanBox 구현
sohee6989 Jan 15, 2026
4463420
[FEAT/#21] PlanModel 정의
sohee6989 Jan 15, 2026
fb85534
[FEAT/#21] UpcomingPlanModel 정의
sohee6989 Jan 15, 2026
cf729be
[FEAT/#21] UpcomingPlan 타임라인 바 관련 속성 정의
sohee6989 Jan 15, 2026
6a19974
[DEL/#21] 안쓰는 파일 삭제
sohee6989 Jan 15, 2026
0217f2f
[FEAT/#21] 홈 화면 오늘 일정, 다가오는 일정 컴포넌트 구현
sohee6989 Jan 15, 2026
1ba3ee9
[MERGE/#21] merge from develop branch
sohee6989 Jan 15, 2026
4588e29
[CHORE/#21] shadow 파라미터명 수정
sohee6989 Jan 15, 2026
9aca02c
[CHORE/#21] shadow 파라미터명 수정
sohee6989 Jan 15, 2026
accf90a
[ADD/#21] 아이콘 추가
sohee6989 Jan 15, 2026
5292bab
[ADD/#21] 체리 이미지 PNG로 추가
sohee6989 Jan 15, 2026
2c1be3d
[CHORE/#21] CherrishGaugeType에 percent 변수 추가
sohee6989 Jan 15, 2026
9c71ba2
[FEAT/#21] 챌린지 섹션 구현
sohee6989 Jan 15, 2026
d3c296c
[CHORE/#21] ktlint 체크
sohee6989 Jan 15, 2026
0e31553
Merge branch 'develop' of https://github.com/TEAM-Cherrish/Cherrish-A…
sohee6989 Jan 15, 2026
a7126f9
[CHORE/#21] 이미지 파일 이름 수정
sohee6989 Jan 15, 2026
15eddec
[ADD/#21] 홈 화면 내 다가오는 일정이 없을 때 필요한 이미지 추가
sohee6989 Jan 15, 2026
66f243f
[CHORE/#21] UpcomingNoPlan에 이미지 추가
sohee6989 Jan 15, 2026
145b33d
[ADD/#66] 그라데이션 컬러 추가
sohee6989 Jan 15, 2026
f5cea56
[CHORE/#66] 그라데이션 분기 처리 변경
sohee6989 Jan 15, 2026
0d6bbb9
[CHORE/#66] CherrishGaugeType 내 imagRes 파라미터 추가
sohee6989 Jan 15, 2026
b0154d4
[FEAT/#66] 홈 화면 조립
sohee6989 Jan 15, 2026
fbd3a50
[CHORE/#66] ktlint 체크
sohee6989 Jan 15, 2026
742bcdb
[CHORE/#66] 색상 수정
sohee6989 Jan 15, 2026
c1aceb5
[CHORE/#66] 목데이터 변경
sohee6989 Jan 15, 2026
e935651
[CHORE/#66] 애니메이션 변경 & LazyColumn으로 변경
sohee6989 Jan 15, 2026
087b68c
[CHORE/#66] ktlint 체크
sohee6989 Jan 15, 2026
dcb0790
[ADD/#66] 앱 로고 추가
sohee6989 Jan 15, 2026
a23dbbf
[CHORE/#66] 나현 코리 반영
sohee6989 Jan 15, 2026
ade572c
[CHORE/#66] ktlint 체크
sohee6989 Jan 15, 2026
6126fff
[ADD/#66] 체리 추가
sohee6989 Jan 15, 2026
79989bb
[CHORE/#66] 타입에 이미지 파일 설정
sohee6989 Jan 15, 2026
029f185
[CHORE/#66] 홈 화면 내 섹션 컴포넌트로 분리
sohee6989 Jan 15, 2026
bff9adc
[CHORE/#66] ktlint 체크
sohee6989 Jan 15, 2026
633f598
[DEL/#66] 기존 이미지 삭제
sohee6989 Jan 16, 2026
723e2be
[ADD/#66] 새로운 레벨별 체리 사진 추가
sohee6989 Jan 16, 2026
6223004
[ADD/#66] 앱 로고 사진 추가
sohee6989 Jan 16, 2026
2ed13e0
[CHORE/#66] ChallengeTyp에 image 파일 변경
sohee6989 Jan 16, 2026
9c14a36
[FEAT/#66] 바뀐 챌린지 섹션 구현
sohee6989 Jan 16, 2026
c8c5d25
[FEAT/#66] 바뀐 챌린지 화면 구현
sohee6989 Jan 16, 2026
66e2ea4
[CHORE/#66] 오늘의 계획 파트 프리뷰 추가
sohee6989 Jan 16, 2026
8cd7507
[CHORE/#66] 다가오는 계획 파트 프리뷰 추가 & 패딩값 수정
sohee6989 Jan 16, 2026
7612b28
[CHORE/#66] ktlint 체크
sohee6989 Jan 16, 2026
7eaf10f
[CHORE/#66] ktlint 체크
sohee6989 Jan 16, 2026
94a355c
[CHORE/#66] 애니메이션 시간 & fadeIn 추가
sohee6989 Jan 16, 2026
4215e1a
[CHORE/#66] 패딩값 수정
sohee6989 Jan 16, 2026
2e5a9ef
[CHORE/#66] ktlint 체크
sohee6989 Jan 16, 2026
07fe55e
[CHORE/#66] 파일명 변경
sohee6989 Jan 18, 2026
c0b0d17
Merge from develop
sohee6989 Jan 18, 2026
b51671e
[CHORE/#66] ktlint 체크
sohee6989 Jan 18, 2026
c13ca9f
[CHORE/#66] 다가오는 일정 상단 패딩 수정
sohee6989 Jan 18, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import androidx.compose.ui.input.pointer.pointerInput
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import com.cherrish.android.core.designsystem.theme.CherrishTheme

@Composable
inline fun Modifier.noRippleClickable(
Expand All @@ -45,7 +46,7 @@ fun Modifier.addFocusCleaner(focusManager: FocusManager): Modifier {
@Composable
fun Modifier.dropShadow(
shape: Shape,
color: Color = Color.Black.copy(0.25f),
color: Color = CherrishTheme.colors.shadow,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

최고 최고 ㅎㅎㅎ 놓치고 잇엇다 !!

blur: Dp = 1.dp,
offsetY: Dp = 1.dp,
offsetX: Dp = 1.dp,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
package com.cherrish.android.core.designsystem.component.type

import androidx.annotation.DrawableRes
import com.cherrish.android.R

enum class CherrishGaugeType(
val step: Int
val step: Int,
val percent: Int,
@DrawableRes val image: Int
) {
LEVEL1(1),
LEVEL2(2),
LEVEL3(3),
LEVEL4(4)
LEVEL1(step = 1, percent = 25, image = R.drawable.img_lv1),
LEVEL2(step = 2, percent = 50, image = R.drawable.img_lv2),
LEVEL3(step = 3, percent = 75, image = R.drawable.img_lv3),
LEVEL4(step = 4, percent = 100, image = R.drawable.img_lv4)
}
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,9 @@ val green3 = Color(0xFF9AD342)

val shadow = Color(0xFF9098A7).copy(alpha = 0.12f)

val graStart = Color(0xFFFFF7f7)
val graEnd = Color(0xFFFFFDFD)

val bottomSheetScrimColor = Color(0x1A464C52)

@Immutable
Expand Down Expand Up @@ -69,6 +72,9 @@ data class CherrishColors(

val shadow: Color,

val graStart: Color,
val graEnd: Color,

val bottomSheetScrimColor: Color
)

Expand Down Expand Up @@ -101,6 +107,9 @@ val defaultCherrishColors = CherrishColors(

shadow = shadow,

graStart = graStart,
graEnd = graEnd,

bottomSheetScrimColor = bottomSheetScrimColor
)

Expand Down Expand Up @@ -222,6 +231,16 @@ private fun CherrishGrayColorsPreview() {
style = CherrishTheme.typography.body1M14,
color = CherrishTheme.colors.shadow
)
Text(
text = "GraStart",
style = CherrishTheme.typography.body1M14,
color = CherrishTheme.colors.graStart
)
Text(
text = "GraEnd",
style = CherrishTheme.typography.body1M14,
color = CherrishTheme.colors.graEnd
)
Text(
text = "BottomSheetScrimColor",
style = CherrishTheme.typography.body1M14,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,25 +1,138 @@
package com.cherrish.android.presentation.home

import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Text
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Brush
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import com.cherrish.android.core.common.state.UiState
import com.cherrish.android.core.designsystem.theme.CherrishTheme
import com.cherrish.android.core.designsystem.theme.graEnd
import com.cherrish.android.core.designsystem.theme.graStart
import com.cherrish.android.presentation.home.component.ChallengeSection
import com.cherrish.android.presentation.home.component.PlanBoxSection
import com.cherrish.android.presentation.home.component.UpcomingPlanSection
import java.time.LocalDate
import kotlinx.collections.immutable.persistentListOf

@Composable
fun HomeRoute(
paddingValues: PaddingValues
paddingValues: PaddingValues,
viewModel: HomeViewModel = hiltViewModel()
) {
HomeScreen(paddingValues = paddingValues)
val uiState by viewModel.uiState.collectAsStateWithLifecycle()

when (val state = uiState) {
is UiState.Loading -> {
}

is UiState.Failure -> {
}

is UiState.Success -> {
HomeScreen(
uiState = state.data,
paddingValues = paddingValues,
onUpcomingPlanClick = viewModel::onUpcomingPlanClick,
onChallengeStartClick = viewModel::onAddChallengeClick,
onAddPlanClick = viewModel::onAddPlanClick
)
}

else -> {}
}
}

@Composable
private fun HomeScreen(
uiState: HomeUiState,
paddingValues: PaddingValues,
onUpcomingPlanClick: (LocalDate) -> Unit,
onChallengeStartClick: () -> Unit,
onAddPlanClick: () -> Unit,
modifier: Modifier = Modifier
) {
Text(
text = "Home",
modifier = modifier.padding(paddingValues)
)
Box(
modifier = modifier
.fillMaxSize()
.background(color = CherrishTheme.colors.graEnd)
) {
Box(
modifier = Modifier
.fillMaxWidth()
.height(270.dp)
.background(
brush = Brush.verticalGradient(
colors = persistentListOf(
graStart,
graEnd
)
)
)
)

LazyColumn(
modifier = Modifier
.fillMaxSize()
.padding(paddingValues),
contentPadding = PaddingValues(
start = 17.dp,
Comment thread
sohee6989 marked this conversation as resolved.
end = 17.dp,
top = 30.dp,
bottom = 20.dp
),
verticalArrangement = Arrangement.spacedBy(12.dp)
) {
item {
ChallengeSection(
imageRes = uiState.gauges[uiState.selectedIndex].image,
currentStep = uiState.currentStep,
gauges = uiState.gauges,
onChallengeStartClick = onChallengeStartClick,
challengeName = uiState.challengeName
)
}
Comment thread
coderabbitai[bot] marked this conversation as resolved.

item {
PlanBoxSection(
todayDate = uiState.todayDate,
plans = uiState.plans
)
}

item {
UpcomingPlanSection(
onAddPlanClick = onAddPlanClick,
plans = uiState.upcomingPlans,
onUpcomingPlanClick = onUpcomingPlanClick
)
}
}
}
}

@Preview(showBackground = true)
@Composable
private fun Preview() {
CherrishTheme {
HomeScreen(
uiState = HomeUiState.fake,
paddingValues = PaddingValues(0.dp),
onUpcomingPlanClick = {},
onAddPlanClick = {},
onChallengeStartClick = {}
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package com.cherrish.android.presentation.home

import androidx.compose.runtime.Immutable
import com.cherrish.android.core.designsystem.component.type.CherrishGaugeType
import com.cherrish.android.presentation.home.model.PlanUiModel
import com.cherrish.android.presentation.home.model.UpcomingPlanUiModel
import com.cherrish.android.presentation.home.type.DowntimePhase
import java.time.LocalDate
import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.persistentListOf
import kotlinx.collections.immutable.toImmutableList

@Immutable
data class HomeUiState(
val currentStep: Int,
val gauges: ImmutableList<CherrishGaugeType>,
val challengeName: String,
val todayDate: String,
val plans: ImmutableList<PlanUiModel>,
val upcomingPlans: ImmutableList<UpcomingPlanUiModel>,
val selectedIndex: Int
) {
companion object {
val fake = HomeUiState(
currentStep = 1,
gauges = CherrishGaugeType.entries.toImmutableList(),
challengeName = "웰니스 • 마음챙김",
todayDate = "2026년 1월 1일 (목)",
plans = List(10) {
PlanUiModel(
procedureName = "슈링크",
daysSince = 2,
downtimePhase = DowntimePhase.SENSITIVE
)
}.toImmutableList(),
upcomingPlans = persistentListOf(
UpcomingPlanUiModel(
upcomingPlanDate = LocalDate.now().plusDays(3),
procedureName = "써마지",
procedureCount = 2,
dDay = 3
),
UpcomingPlanUiModel(
upcomingPlanDate = LocalDate.now().plusDays(3),
procedureName = "써마지",
procedureCount = 2,
dDay = 3
)
),
Comment on lines +23 to +49

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

cd "$(git rev-parse --show-toplevel)" && \
wc -l app/src/main/java/com/cherrish/android/presentation/home/HomeUiState.kt

Repository: TEAM-Cherrish/Cherrish-Android

Length of output: 148


🏁 Script executed:

cat -n app/src/main/java/com/cherrish/android/presentation/home/HomeUiState.kt

Repository: TEAM-Cherrish/Cherrish-Android

Length of output: 2366


🏁 Script executed:

# Search for other usages of todayDate and upcomingPlanDate in the codebase
rg -A 3 -B 3 "todayDate|upcomingPlanDate" app/src/main/java/com/cherrish/android/presentation/home/ --type kt

Repository: TEAM-Cherrish/Cherrish-Android

Length of output: 100


🏁 Script executed:

# Check if there are date comparisons or calculations in HomeScreen or related composables
rg -l "HomeUiState" app/src/main --type kt | head -10

Repository: TEAM-Cherrish/Cherrish-Android

Length of output: 100


🏁 Script executed:

rg "HomeUiState.fake" app/src/main --type kotlin

Repository: TEAM-Cherrish/Cherrish-Android

Length of output: 300


🏁 Script executed:

rg -A 5 -B 5 "todayDate" app/src/main/java/com/cherrish/android/presentation/home/ --type kotlin

Repository: TEAM-Cherrish/Cherrish-Android

Length of output: 7259


🏁 Script executed:

# Search for date-based calculations or comparisons in home-related files
rg "LocalDate|dDay|daysSince" app/src/main/java/com/cherrish/android/presentation/home/ --type kotlin -A 2

Repository: TEAM-Cherrish/Cherrish-Android

Length of output: 14005


fake 데이터의 기준일 불일치를 수정하세요.

todayDate는 "2026년 1월 1일 (목)"로 고정되어 있으나, upcomingPlanDateLocalDate.now()를 기준으로 하므로 매일 달라집니다. 이로 인해 preview의 일관성이 깨지고 신뢰할 수 없는 테스트 데이터가 됩니다. 예를 들어, dDay = 3은 고정값이지만 upcomingPlanDate는 실행 시점에 따라 변하므로 불일치가 발생합니다.

fakeBaseDate = LocalDate.of(2026, 1, 1)을 생성한 후 upcomingPlanDate에서 사용하여 모든 날짜를 이 기준일 기반으로 통일하세요.

🔧 수정 제안
 companion object {
+        private val fakeBaseDate = LocalDate.of(2026, 1, 1)
         val fake = HomeUiState(
             currentStep = 1,
             gauges = CherrishGaugeType.entries.toImmutableList(),
             challengeName = "웰니스 • 마음챙김",
             todayDate = "2026년 1월 1일 (목)",
             plans = List(10) {
                 PlanUiModel(
                     procedureName = "슈링크",
                     daysSince = 2,
                     downtimePhase = DowntimePhase.SENSITIVE
                 )
             }.toImmutableList(),
             upcomingPlans = persistentListOf(
                 UpcomingPlanUiModel(
-                    upcomingPlanDate = LocalDate.now().plusDays(3),
+                    upcomingPlanDate = fakeBaseDate.plusDays(3),
                     procedureName = "써마지",
                     procedureCount = 2,
                     dDay = 3
                 ),
                 UpcomingPlanUiModel(
-                    upcomingPlanDate = LocalDate.now().plusDays(3),
+                    upcomingPlanDate = fakeBaseDate.plusDays(3),
                     procedureName = "써마지",
                     procedureCount = 2,
                     dDay = 3
                 )
             ),
             selectedIndex = 0
         )
🤖 Prompt for AI Agents
In `@app/src/main/java/com/cherrish/android/presentation/home/HomeUiState.kt`
around lines 23 - 49, HomeUiState.fake uses a hardcoded todayDate but builds
upcomingPlans with LocalDate.now(), causing inconsistent preview data; create a
LocalDate fakeBaseDate = LocalDate.of(2026, 1, 1) inside the companion object
and replace LocalDate.now().plusDays(...) uses for
UpcomingPlanUiModel.upcomingPlanDate with fakeBaseDate.plusDays(...) so all
dates (todayDate and upcomingPlanDate) and dDay calculations are consistently
based on the same reference date in the HomeUiState.fake initializer.

selectedIndex = 0
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.cherrish.android.presentation.home

import androidx.lifecycle.ViewModel
import com.cherrish.android.core.common.state.UiState
import dagger.hilt.android.lifecycle.HiltViewModel
import java.time.LocalDate
import javax.inject.Inject
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow

@HiltViewModel
class HomeViewModel @Inject constructor() : ViewModel() {

private val _uiState = MutableStateFlow<UiState<HomeUiState>>(
UiState.Success(HomeUiState.fake)
)
val uiState: StateFlow<UiState<HomeUiState>> = _uiState.asStateFlow()

fun onUpcomingPlanClick(date: LocalDate) {
}

fun onAddChallengeClick() {
}

fun onAddPlanClick() {
}
}
Loading