Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
36f0952
Refactor: 루틴 엠티뷰 컴포넌트 리디자인 반영
wjdrjs00 Aug 10, 2025
3608ee4
Add: 기본 감정 그래픽 추가
wjdrjs00 Aug 10, 2025
083d519
Feat: 감정 등록 버튼 컴포넌트 구현
wjdrjs00 Aug 10, 2025
b4aea45
Feat: 홈 화면 헤더 리디자인 반영
wjdrjs00 Aug 10, 2025
799a424
Refactor: BitnagilFloatingButton 컴포넌트 리디자인 반영
wjdrjs00 Aug 10, 2025
934623b
Refactor: WeeklyDatePicker 컴포넌트 리디자인 반영
wjdrjs00 Aug 10, 2025
b573427
Refactor: 루틴, 서브루틴 컴포넌트 리디자인 반영
wjdrjs00 Aug 10, 2025
dc849a1
Add: 추가되는 아이콘 에셋 추가
wjdrjs00 Aug 11, 2025
a5d9793
Feat: RoutineDetailsCard 컴포넌트 구현
wjdrjs00 Aug 11, 2025
bc969c5
Feat: WeeklyDatePicker 컴포넌트 구현
wjdrjs00 Aug 11, 2025
aca5a4f
Feat: 루틴 리스트 화면 ui 구현
wjdrjs00 Aug 11, 2025
3f6c5b2
Feat: 삭제 확인 바텀시트 컴포넌트 구현
wjdrjs00 Aug 11, 2025
986c9e7
Feat: RoutineList화면 MVI 모델 정의
wjdrjs00 Aug 11, 2025
0463470
Feat: 루틴리스트 화면 Ui 구현
wjdrjs00 Aug 11, 2025
489b5d2
Feat: 라우트 정의
wjdrjs00 Aug 11, 2025
d1b2002
Chore: 툴팁 컴포넌트 제거
wjdrjs00 Aug 12, 2025
1d3563a
Refactor: 루틴 정렬 기능 제거
wjdrjs00 Aug 12, 2025
0c65dde
Refactor: RoutineSection 컴포넌트 리디자인 반영
wjdrjs00 Aug 12, 2025
190b37c
Refactor: 홈화면 리디자인 반영
wjdrjs00 Aug 12, 2025
e9bdb65
Refactor: 마이페이지 화면 리디자인 반영
wjdrjs00 Aug 12, 2025
ec3c8ba
Refactor: 설정 화면 리디자인 반영
wjdrjs00 Aug 12, 2025
987e909
Feat: 오늘의 감정 API v2 적용 및 UI 반영
wjdrjs00 Aug 12, 2025
0083464
Refactor: 로그아웃, 회원탈퇴 다이얼로그 기능 분리
wjdrjs00 Aug 13, 2025
b61c73b
Refactor: 로그아웃 중복 클릭 방지 로직 구현
wjdrjs00 Aug 13, 2025
7c7cbc5
Refactor: 로딩 호출 위치 수정
wjdrjs00 Aug 13, 2025
d4e567b
Refactor: 루틴 수정, 삭제 로직 제거
wjdrjs00 Aug 13, 2025
a13305a
Feat: 디자인 컬러 추가
wjdrjs00 Aug 13, 2025
b94a04c
Feat: EmptyRoutineListView 컴포넌트 구현
wjdrjs00 Aug 13, 2025
932081f
Chore: 네이밍 수정
wjdrjs00 Aug 13, 2025
d197df0
Merge pull request #101 from YAPP-Github/ui/#100-mypage-redesing
wjdrjs00 Aug 13, 2025
d6bcec7
Feat: 탈퇴 사유 enum class 정의
wjdrjs00 Aug 13, 2025
f534ef4
Feat: 회원탈퇴 MVI 모델 정의
wjdrjs00 Aug 13, 2025
202b3bc
Feat: 탈퇴 확인 다이얼로그 컴포넌트 구현
wjdrjs00 Aug 13, 2025
3b1c1bd
Refactor: BitnagilSelectButton 공통 컴포넌트 수정
wjdrjs00 Aug 13, 2025
124fa23
Feat: 회원탈퇴 화면 구현
wjdrjs00 Aug 13, 2025
9a1bfab
Feat: 탈퇴화면 navigation 연결
wjdrjs00 Aug 13, 2025
89c095f
Feat: 루틴탈퇴 화면 스크롤 영역 설정
wjdrjs00 Aug 14, 2025
02f7973
Chore: api url 수정
wjdrjs00 Aug 14, 2025
8edf0ee
Chore: 폰트 디자인 시스템 수정
wjdrjs00 Aug 14, 2025
5b57cc8
Refactor: 루틴 조회 api 버전업
wjdrjs00 Aug 14, 2025
e61f183
Refactor: 루틴 완료 api 버전 업
wjdrjs00 Aug 14, 2025
9ee1b7a
Chore: 불필요한 코드파일 삭제
wjdrjs00 Aug 14, 2025
e19aca6
Feat: 당일 모든 달성 시 완료 표시 기능 구현
wjdrjs00 Aug 14, 2025
97e319d
Chore: 코드래빗 리뷰사항 반영
wjdrjs00 Aug 15, 2025
86f33b9
Refactor: Routine LazyColumn 로직 변경
wjdrjs00 Aug 15, 2025
5c17495
Refactor: WeeklyDatePicker에서 derivedStateOf 제거
wjdrjs00 Aug 15, 2025
3581c05
Refactor: 감정구슬 이미지 로딩 개선
wjdrjs00 Aug 15, 2025
5d01e7a
Chore: ktlintFormat
wjdrjs00 Aug 15, 2025
2a655e9
Fix: 루틴 완료 로직 수정
wjdrjs00 Aug 15, 2025
17600db
Fix: 불필요한 Map 재생성 방지
wjdrjs00 Aug 15, 2025
ee1fd47
Merge pull request #105 from YAPP-Github/ui/#103-withdrawal
wjdrjs00 Aug 15, 2025
ca58fc2
Merge pull request #106 from YAPP-Github/feature/#90-home-redesign
wjdrjs00 Aug 15, 2025
56496ff
Add: 추가되는 아이콘 에셋 추가
wjdrjs00 Aug 11, 2025
269d201
Feat: RoutineDetailsCard 컴포넌트 구현
wjdrjs00 Aug 11, 2025
d4b38a7
Feat: WeeklyDatePicker 컴포넌트 구현
wjdrjs00 Aug 11, 2025
580a52c
Feat: 루틴 리스트 화면 ui 구현
wjdrjs00 Aug 11, 2025
25b936f
Feat: 삭제 확인 바텀시트 컴포넌트 구현
wjdrjs00 Aug 11, 2025
3d40afd
Feat: RoutineList화면 MVI 모델 정의
wjdrjs00 Aug 11, 2025
a62f22a
Feat: 루틴리스트 화면 Ui 구현
wjdrjs00 Aug 11, 2025
0ec9dff
Feat: 라우트 정의
wjdrjs00 Aug 11, 2025
48b4f4c
Feat: 디자인 컬러 추가
wjdrjs00 Aug 13, 2025
3cfc4db
Feat: EmptyRoutineListView 컴포넌트 구현
wjdrjs00 Aug 13, 2025
166d458
Merge branch 'feature/#97-routine-list' of https://github.com/YAPP-Gi…
wjdrjs00 Aug 15, 2025
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
1 change: 1 addition & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
tools:targetApi="31">
<activity
android:name=".MainActivity"
android:windowSoftInputMode="adjustResize"
android:exported="true"
android:theme="@style/Theme.Bitnagil">
<intent-filter>
Expand Down
35 changes: 32 additions & 3 deletions app/src/main/java/com/threegap/bitnagil/MainNavHost.kt
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,12 @@ import com.threegap.bitnagil.presentation.login.LoginScreenContainer
import com.threegap.bitnagil.presentation.onboarding.OnBoardingScreenContainer
import com.threegap.bitnagil.presentation.onboarding.OnBoardingViewModel
import com.threegap.bitnagil.presentation.onboarding.model.navarg.OnBoardingScreenArg
import com.threegap.bitnagil.presentation.routinelist.RoutineListScreenContainer
import com.threegap.bitnagil.presentation.setting.SettingScreenContainer
import com.threegap.bitnagil.presentation.splash.SplashScreenContainer
import com.threegap.bitnagil.presentation.terms.TermsAgreementScreenContainer
import com.threegap.bitnagil.presentation.webview.BitnagilWebViewScreen
import com.threegap.bitnagil.presentation.withdrawal.WithdrawalScreenContainer
import com.threegap.bitnagil.presentation.writeroutine.WriteRoutineScreenContainer
import com.threegap.bitnagil.presentation.writeroutine.WriteRoutineViewModel
import com.threegap.bitnagil.presentation.writeroutine.model.navarg.WriteRoutineScreenArg
Expand Down Expand Up @@ -114,9 +116,6 @@ fun MainNavHost(
navigateToRegisterRoutine = { routineId ->
navigator.navController.navigate(Route.WriteRoutine(routineId = routineId))
},
navigateToEditRoutine = { routineId ->
navigator.navController.navigate(Route.WriteRoutine(routineId = routineId, isRegister = false))
},
navigateToEmotion = {
navigator.navController.navigate(Route.Emotion)
},
Expand Down Expand Up @@ -166,6 +165,9 @@ fun MainNavHost(
}
}
},
navigateToWithdrawal = {
navigator.navController.navigate(Route.Withdrawal)
},
)
}

Expand Down Expand Up @@ -223,5 +225,32 @@ fun MainNavHost(
},
)
}

composable<Route.Withdrawal> {
WithdrawalScreenContainer(
navigateToBack = {
if (navigator.navController.previousBackStackEntry != null) {
navigator.navController.popBackStack()
}
},
navigateToLogin = {
navigator.navController.navigate(Route.Login) {
popUpTo(0) {
inclusive = true
}
}
},
)
}

composable<Route.RoutineList> {
RoutineListScreenContainer(
navigateToBack = {
if (navigator.navController.previousBackStackEntry != null) {
navigator.navController.popBackStack()
}
},
)
}
}
}
8 changes: 4 additions & 4 deletions app/src/main/java/com/threegap/bitnagil/MainScreen.kt
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package com.threegap.bitnagil

import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.WindowInsetsSides
import androidx.compose.foundation.layout.exclude
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.only
import androidx.compose.foundation.layout.ime
import androidx.compose.foundation.layout.navigationBars
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.systemBars
import androidx.compose.material3.Scaffold
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
Expand All @@ -18,7 +18,7 @@ fun MainScreen(
) {
Scaffold(
modifier = modifier.fillMaxSize(),
contentWindowInsets = WindowInsets.systemBars.only(WindowInsetsSides.Bottom),
contentWindowInsets = WindowInsets.navigationBars.exclude(WindowInsets.ime),
containerColor = BitnagilTheme.colors.white,
) { innerPadding ->
MainNavHost(
Expand Down
6 changes: 6 additions & 0 deletions app/src/main/java/com/threegap/bitnagil/Route.kt
Original file line number Diff line number Diff line change
Expand Up @@ -38,4 +38,10 @@ sealed interface Route {

@Serializable
data object Emotion : Route

@Serializable
data object Withdrawal : Route

@Serializable
data object RoutineList : Route
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
Expand All @@ -30,27 +31,34 @@ fun HomeBottomNavigationBar(
) {
val navBackStackEntry by navController.currentBackStackEntryAsState()

Row(
modifier = Modifier
.fillMaxWidth()
.background(color = BitnagilTheme.colors.white)
.height(62.dp)
.padding(horizontal = 16.dp, vertical = 7.dp),
horizontalArrangement = Arrangement.spacedBy(10.dp),
verticalAlignment = Alignment.CenterVertically,
) {
HomeRoute.entries.map { homeRoute ->
HomeBottomNavigationItem(
modifier = Modifier.weight(1f),
icon = homeRoute.icon,
title = homeRoute.title,
onClick = {
navController.navigate(homeRoute.route) {
popUpTo(0) { inclusive = true }
}
},
selected = navBackStackEntry?.destination?.route == homeRoute.route,
)
Column {
HorizontalDivider(
modifier = Modifier.fillMaxWidth(),
thickness = 1.dp,
color = BitnagilTheme.colors.coolGray98,
)
Row(
modifier = Modifier
.fillMaxWidth()
.background(color = BitnagilTheme.colors.white)
.height(62.dp)
.padding(horizontal = 16.dp, vertical = 7.dp),
horizontalArrangement = Arrangement.spacedBy(10.dp),
verticalAlignment = Alignment.CenterVertically,
) {
HomeRoute.entries.map { homeRoute ->
HomeBottomNavigationItem(
modifier = Modifier.weight(1f),
icon = homeRoute.icon,
title = homeRoute.title,
onClick = {
navController.navigate(homeRoute.route) {
popUpTo(0) { inclusive = true }
}
},
selected = navBackStackEntry?.destination?.route == homeRoute.route,
)
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@ fun HomeNavHost(
navigateToNotice: () -> Unit,
navigateToQnA: () -> Unit,
navigateToRegisterRoutine: (String?) -> Unit,
navigateToEditRoutine: (String) -> Unit,
navigateToEmotion: () -> Unit,
) {
val navigator = rememberHomeNavigator()
Expand All @@ -66,7 +65,6 @@ fun HomeNavHost(
navigateToRegisterRoutine = {
navigateToRegisterRoutine(null)
},
navigateToEditRoutine = navigateToEditRoutine,
navigateToEmotion = navigateToEmotion,
)
}
Expand Down Expand Up @@ -102,11 +100,6 @@ fun HomeNavHost(

BitnagilFloatingActionMenu(
actions = listOf(
FloatingActionItem(
icon = R.drawable.ic_report,
text = "제보하기",
onClick = { GlobalBitnagilToast.showWarning("제보하기 기능은 추후 제공될 예정입니다.") },
),
FloatingActionItem(
icon = R.drawable.ic_routine_add,
text = "루틴 등록",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ data class BitnagilColors(
val purple10: Color = Purple10,
val green10: Color = Green10,
val pink10: Color = Pink10,
val yellow10: Color = Yellow10,
val progressBarGradientStartColor: Color = ProgressBarGradientStartColor,
val progressBarGradientEndColor: Color = ProgressBarGradientEndColor,
val homeGradientStartColor: Color = HomeGradientStartColor,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ val SkyBlue10 = Color(0xFFDBF1FF)
val Purple10 = Color(0xFFE6E2FF)
val Green10 = Color(0xFFE6F5C6)
val Pink10 = Color(0xFFFEE3E9)
val Yellow10 = Color(0xFFFFF5C7)
val ProgressBarGradientStartColor = Color(0xFFA9CFFF)
val ProgressBarGradientEndColor = Color(0xFFFFCDB3)
val HomeGradientStartColor = Color(0xFFFFEADF)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import androidx.compose.animation.scaleIn
import androidx.compose.animation.scaleOut
import androidx.compose.animation.slideInVertically
import androidx.compose.animation.slideOutVertically
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
Expand All @@ -22,13 +21,12 @@ import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.Immutable
import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.scale
import androidx.compose.ui.graphics.ColorFilter
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.res.vectorResource
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.threegap.bitnagil.designsystem.BitnagilTheme
Expand All @@ -40,22 +38,22 @@ fun BitnagilFloatingButton(
@DrawableRes id: Int,
onClick: () -> Unit,
modifier: Modifier = Modifier,
isActive: Boolean = false,
colors: BitnagilFloatingButtonColor = BitnagilFloatingButtonColor.default(),
) {
Box(
contentAlignment = Alignment.Center,
modifier = modifier
.background(
color = BitnagilTheme.colors.navy500,
color = if (isActive) colors.activeIconBackgroundColor else colors.defaultIconBackgroundColor,
shape = CircleShape,
)
.size(52.dp)
.clickableWithoutRipple { onClick() },
) {
Image(
imageVector = ImageVector.vectorResource(id),
contentDescription = null,
colorFilter = ColorFilter.tint(BitnagilTheme.colors.white),
modifier = Modifier.size(24.dp),
BitnagilIcon(
id = id,
tint = if (isActive) colors.activeIconColor else colors.defaultIconColor,
)
}
}
Expand All @@ -66,8 +64,9 @@ fun BitnagilFloatingActionMenu(
isExpanded: Boolean,
onToggle: (Boolean) -> Unit,
modifier: Modifier = Modifier,
@DrawableRes defaultIcon: Int = R.drawable.ic_plus,
@DrawableRes defaultIcon: Int = R.drawable.ic_add,
@DrawableRes activeIcon: Int = R.drawable.ic_close,
colors: BitnagilFloatingButtonColor = BitnagilFloatingButtonColor.default(),
) {
Box(modifier = modifier) {
AnimatedVisibility(
Expand Down Expand Up @@ -102,7 +101,7 @@ fun BitnagilFloatingActionMenu(
),
) {
Column(
modifier = Modifier.padding(vertical = 16.dp, horizontal = 22.dp),
modifier = Modifier.padding(16.dp),
verticalArrangement = Arrangement.spacedBy(24.dp),
) {
actions.forEach { action ->
Expand All @@ -125,6 +124,8 @@ fun BitnagilFloatingActionMenu(
BitnagilFloatingButton(
id = if (isExpanded) activeIcon else defaultIcon,
onClick = { onToggle(!isExpanded) },
isActive = isExpanded,
colors = colors,
)
}
}
Expand All @@ -136,6 +137,24 @@ data class FloatingActionItem(
val onClick: () -> Unit,
)

@Immutable
data class BitnagilFloatingButtonColor(
val defaultIconColor: Color,
val defaultIconBackgroundColor: Color,
val activeIconColor: Color,
val activeIconBackgroundColor: Color,
) {
companion object {
@Composable
fun default() = BitnagilFloatingButtonColor(
defaultIconColor = BitnagilTheme.colors.white,
defaultIconBackgroundColor = BitnagilTheme.colors.orange500,
activeIconColor = BitnagilTheme.colors.coolGray30,
activeIconBackgroundColor = BitnagilTheme.colors.white,
)
}
}

@Composable
private fun FloatingActionMenuItem(
@DrawableRes icon: Int,
Expand All @@ -159,12 +178,13 @@ private fun FloatingActionMenuItem(
BitnagilIcon(
id = icon,
tint = null,
modifier = Modifier.size(24.dp),
)

Text(
text = text,
style = BitnagilTheme.typography.subtitle1Medium,
color = BitnagilTheme.colors.navy500,
style = BitnagilTheme.typography.body2Medium,
color = BitnagilTheme.colors.coolGray30,
)
}
}
Expand All @@ -174,17 +194,12 @@ private fun FloatingActionMenuItem(
private fun BitnagilFloatingButtonPreview() {
Column {
BitnagilFloatingButton(
id = R.drawable.ic_plus,
id = R.drawable.ic_add,
onClick = {},
)

BitnagilFloatingActionMenu(
actions = listOf(
FloatingActionItem(
icon = R.drawable.ic_report,
text = "제보하기",
onClick = {},
),
FloatingActionItem(
icon = R.drawable.ic_routine_add,
text = "루틴 등록",
Expand Down
Loading