diff --git a/app/src/main/java/org/android/bbangzip/presentation/component/card/FriendCard.kt b/app/src/main/java/org/android/bbangzip/presentation/component/card/FriendCard.kt index ffe1fd77..b9d752a1 100644 --- a/app/src/main/java/org/android/bbangzip/presentation/component/card/FriendCard.kt +++ b/app/src/main/java/org/android/bbangzip/presentation/component/card/FriendCard.kt @@ -12,14 +12,17 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.Icon import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.vectorResource import androidx.compose.ui.unit.dp @@ -67,10 +70,15 @@ fun FriendCard( verticalAlignment = Alignment.CenterVertically, ) { Image( - imageVector = ImageVector.vectorResource(id = R.drawable.ic_user_one_default_24), + painter = painterResource(id = data.imgSrc), contentDescription = null, contentScale = ContentScale.FillBounds, - modifier = Modifier.size(48.dp), + modifier = + Modifier.size(48.dp).clip(CircleShape).border( + width = 1.dp, + color = BbangZipTheme.colors.lineNormal_68645E_22, + shape = CircleShape, + ), ) Spacer(modifier = Modifier.width(16.dp)) diff --git a/app/src/main/java/org/android/bbangzip/presentation/model/card/FriendCardModel.kt b/app/src/main/java/org/android/bbangzip/presentation/model/card/FriendCardModel.kt index 3f7d0b47..61d405f8 100644 --- a/app/src/main/java/org/android/bbangzip/presentation/model/card/FriendCardModel.kt +++ b/app/src/main/java/org/android/bbangzip/presentation/model/card/FriendCardModel.kt @@ -1,6 +1,7 @@ package org.android.bbangzip.presentation.model.card import android.os.Parcelable +import androidx.annotation.DrawableRes import kotlinx.parcelize.Parcelize import org.android.bbangzip.presentation.component.card.BbangZipCardState @@ -10,4 +11,5 @@ data class FriendCardModel( val friendName: String, val imageUrl: String, val state: BbangZipCardState, + @DrawableRes val imgSrc: Int = 0, ) : Parcelable diff --git a/app/src/main/java/org/android/bbangzip/presentation/ui/friend/FriendContract.kt b/app/src/main/java/org/android/bbangzip/presentation/ui/friend/FriendContract.kt index e8e8432d..2d919caf 100644 --- a/app/src/main/java/org/android/bbangzip/presentation/ui/friend/FriendContract.kt +++ b/app/src/main/java/org/android/bbangzip/presentation/ui/friend/FriendContract.kt @@ -2,6 +2,7 @@ package org.android.bbangzip.presentation.ui.friend import android.os.Parcelable import kotlinx.parcelize.Parcelize +import org.android.bbangzip.R import org.android.bbangzip.presentation.component.card.BbangZipCardState import org.android.bbangzip.presentation.model.card.FriendCardModel import org.android.bbangzip.presentation.type.FriendMenuType @@ -17,42 +18,49 @@ class FriendContract { friendName = "이승범", imageUrl = "https://example.com/alice.jpg", state = BbangZipCardState.DEFAULT, + imgSrc = R.drawable.img_friend_profile_1, ), FriendCardModel( friendId = 2, friendName = "김재민", imageUrl = "https://example.com/bob.jpg", state = BbangZipCardState.DEFAULT, + imgSrc = R.drawable.img_friend_profile_2, ), FriendCardModel( friendId = 3, friendName = "하지은", imageUrl = "https://example.com/charlie.jpg", state = BbangZipCardState.DEFAULT, + imgSrc = R.drawable.img_friend_profile_3, ), FriendCardModel( friendId = 4, friendName = "신우연", imageUrl = "https://example.com/alice.jpg", state = BbangZipCardState.DEFAULT, + imgSrc = R.drawable.img_friend_profile_4, ), FriendCardModel( friendId = 5, friendName = "김재민", imageUrl = "https://example.com/bob.jpg", state = BbangZipCardState.DEFAULT, + imgSrc = R.drawable.img_friend_profile_1, ), FriendCardModel( friendId = 6, friendName = "하지은", imageUrl = "https://example.com/charlie.jpg", state = BbangZipCardState.DEFAULT, + imgSrc = R.drawable.img_friend_profile_2, ), FriendCardModel( friendId = 7, friendName = "이승범", imageUrl = "https://example.com/alice.jpg", state = BbangZipCardState.DEFAULT, + imgSrc = R.drawable.img_friend_profile_3, ), ), val menuFilterType: FriendMenuType = FriendMenuType.ALL, diff --git a/app/src/main/java/org/android/bbangzip/presentation/ui/friend/FriendScreen.kt b/app/src/main/java/org/android/bbangzip/presentation/ui/friend/FriendScreen.kt index ebeee21a..116f28ae 100644 --- a/app/src/main/java/org/android/bbangzip/presentation/ui/friend/FriendScreen.kt +++ b/app/src/main/java/org/android/bbangzip/presentation/ui/friend/FriendScreen.kt @@ -124,7 +124,7 @@ fun FriendScreen( modifier = Modifier .fillMaxWidth() - .padding(24.dp), + .padding(bottom = 24.dp, start = 24.dp, end = 24.dp), ) { Text( text = stringResource(R.string.friend_boss_count, friendState.friendList.size), diff --git a/app/src/main/java/org/android/bbangzip/presentation/ui/my/mybadgecategory/MyBadgeCategoryScreen.kt b/app/src/main/java/org/android/bbangzip/presentation/ui/my/mybadgecategory/MyBadgeCategoryScreen.kt index 11ec9725..86f5ac9d 100644 --- a/app/src/main/java/org/android/bbangzip/presentation/ui/my/mybadgecategory/MyBadgeCategoryScreen.kt +++ b/app/src/main/java/org/android/bbangzip/presentation/ui/my/mybadgecategory/MyBadgeCategoryScreen.kt @@ -1,6 +1,7 @@ package org.android.bbangzip.presentation.ui.my.mybadgecategory import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement @@ -27,6 +28,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.platform.LocalConfiguration +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp @@ -73,7 +75,7 @@ fun MyBadgeCategoryScreen( } item { - Column( + Box( modifier = Modifier .fillMaxWidth() @@ -82,14 +84,28 @@ fun MyBadgeCategoryScreen( shape = RoundedCornerShape(bottomEnd = 32.dp, bottomStart = 32.dp), ), ) { - Text( - text = stringResource(R.string.badge_category_title, "밍밍"), - style = BbangZipTheme.typography.heading2Bold, - color = BbangZipTheme.colors.labelNormal_282119, + Image( + painter = painterResource(R.drawable.img_mypage_header), + contentDescription = null, modifier = Modifier - .padding(start = 24.dp, top = 28.dp, bottom = 48.dp), + .fillMaxSize() + .aspectRatio(360f / 121f), ) + Column( + modifier = + Modifier + .fillMaxWidth(), + ) { + Text( + text = stringResource(R.string.badge_category_title, "밍밍"), + style = BbangZipTheme.typography.heading2Bold, + color = BbangZipTheme.colors.labelNormal_282119, + modifier = + Modifier + .padding(start = 24.dp, top = 28.dp, bottom = 48.dp), + ) + } } Spacer(Modifier.height(48.dp)) diff --git a/app/src/main/java/org/android/bbangzip/presentation/ui/onboarding/onboardingend/OnboardingEndScreen.kt b/app/src/main/java/org/android/bbangzip/presentation/ui/onboarding/onboardingend/OnboardingEndScreen.kt index e26c00e9..a7ac1aaa 100644 --- a/app/src/main/java/org/android/bbangzip/presentation/ui/onboarding/onboardingend/OnboardingEndScreen.kt +++ b/app/src/main/java/org/android/bbangzip/presentation/ui/onboarding/onboardingend/OnboardingEndScreen.kt @@ -4,7 +4,7 @@ import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.aspectRatio import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding @@ -14,6 +14,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import org.android.bbangzip.R import org.android.bbangzip.presentation.component.button.BbangZipButton @@ -30,7 +31,7 @@ fun OnboardingEndScreen( Column( modifier = Modifier - .fillMaxSize() + .fillMaxWidth() .background(color = BbangZipTheme.colors.backgroundNormal_FFFFFF), ) { BbangZipBaseTopBar( @@ -44,23 +45,27 @@ fun OnboardingEndScreen( Modifier .fillMaxWidth() .padding(start = 16.dp, end = 16.dp) - .padding(top = (LocalConfiguration.current.screenHeightDp * 0.184).dp), + .padding(top = (LocalConfiguration.current.screenHeightDp * 0.081).dp), style = BbangZipTheme.typography.title2Bold, color = BbangZipTheme.colors.labelNormal_282119, ) - - Spacer(modifier = Modifier.weight(1f)) + Spacer(modifier = Modifier.height(32.dp)) Image( - painter = painterResource(id = R.drawable.img_login2), - modifier = Modifier.fillMaxWidth(), + painter = painterResource(id = R.drawable.img_onboarding_end), + modifier = + Modifier + .fillMaxWidth() + .aspectRatio(8f / 9f), contentDescription = null, ) - - Spacer(modifier = Modifier.height(16.dp)) + Spacer(modifier = Modifier.weight(1f)) BbangZipButton( - modifier = Modifier.fillMaxWidth().padding(start = 16.dp, end = 16.dp, bottom = 16.dp), + modifier = + Modifier + .fillMaxWidth() + .padding(start = 16.dp, end = 16.dp, bottom = 16.dp), bbangZipButtonType = BbangZipButtonType.Solid, bbangZipButtonSize = BbangZipButtonSize.Large, onClick = { onClickNextBtn() }, @@ -69,3 +74,9 @@ fun OnboardingEndScreen( ) } } + +@Preview +@Composable +private fun OnboardingEndScreenPreview() { + OnboardingEndScreen() +} diff --git a/app/src/main/java/org/android/bbangzip/presentation/ui/onboarding/onboardingstart/OnboardingStartScreen.kt b/app/src/main/java/org/android/bbangzip/presentation/ui/onboarding/onboardingstart/OnboardingStartScreen.kt index ba699e35..0f994e1f 100644 --- a/app/src/main/java/org/android/bbangzip/presentation/ui/onboarding/onboardingstart/OnboardingStartScreen.kt +++ b/app/src/main/java/org/android/bbangzip/presentation/ui/onboarding/onboardingstart/OnboardingStartScreen.kt @@ -3,6 +3,7 @@ package org.android.bbangzip.presentation.ui.onboarding.onboardingstart import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.aspectRatio import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height @@ -37,20 +38,23 @@ fun OnboardingStartScreen( modifier = Modifier .fillMaxWidth() - .padding(top = (LocalConfiguration.current.screenHeightDp * 0.184).dp), + .padding(top = (LocalConfiguration.current.screenHeightDp * 0.15).dp), style = BbangZipTheme.typography.title2Bold, color = BbangZipTheme.colors.labelNormal_282119, ) - Spacer(modifier = Modifier.weight(1f)) + Spacer(modifier = Modifier.height(32.dp)) Image( painter = painterResource(id = R.drawable.img_onboarding_start), - modifier = Modifier.fillMaxWidth(), contentDescription = null, + modifier = + Modifier + .fillMaxWidth() + .aspectRatio(8f / 9f), ) - Spacer(modifier = Modifier.height(16.dp)) + Spacer(modifier = Modifier.weight(1f)) BbangZipButton( modifier = Modifier.fillMaxWidth(), @@ -67,5 +71,6 @@ fun OnboardingStartScreen( @Composable private fun OnboardingStartScreenPreview() { BBANGZIPTheme { + OnboardingStartScreen() } } diff --git a/app/src/main/java/org/android/bbangzip/presentation/ui/subject/SubjectScreen.kt b/app/src/main/java/org/android/bbangzip/presentation/ui/subject/SubjectScreen.kt index cd0b93df..cb77ee14 100644 --- a/app/src/main/java/org/android/bbangzip/presentation/ui/subject/SubjectScreen.kt +++ b/app/src/main/java/org/android/bbangzip/presentation/ui/subject/SubjectScreen.kt @@ -1,5 +1,6 @@ package org.android.bbangzip.presentation.ui.subject +import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box @@ -7,6 +8,7 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.aspectRatio import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height @@ -21,6 +23,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.platform.LocalConfiguration +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.vectorResource import androidx.compose.ui.tooling.preview.Preview @@ -75,6 +78,14 @@ fun SubjectScreen( .height(backgroundHeight.dp) .background(color = BbangZipTheme.colors.backgroundAccent_FFDAA0, shape = RoundedCornerShape(bottomStart = 32.dp, bottomEnd = 32.dp)), ) { + Image( + painter = painterResource(R.drawable.img_subject_header), + contentDescription = null, + modifier = + Modifier + .fillMaxSize() + .aspectRatio(360f / 220f), + ) Row( modifier = modifier @@ -363,7 +374,7 @@ private fun DeleteCardView( } } } else { - for (i in 0 until subjects.size / 2 + 1) { + for (i in 0 until subjects.size / 2) { Row( modifier = Modifier diff --git a/app/src/main/java/org/android/bbangzip/presentation/ui/subject/subjectdetail/SubjectDetatilScreen.kt b/app/src/main/java/org/android/bbangzip/presentation/ui/subject/subjectdetail/SubjectDetatilScreen.kt index 76fdf5a7..7ac17fb8 100644 --- a/app/src/main/java/org/android/bbangzip/presentation/ui/subject/subjectdetail/SubjectDetatilScreen.kt +++ b/app/src/main/java/org/android/bbangzip/presentation/ui/subject/subjectdetail/SubjectDetatilScreen.kt @@ -1,5 +1,6 @@ package org.android.bbangzip.presentation.ui.subject.subjectdetail +import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.border import androidx.compose.foundation.layout.Arrangement @@ -8,6 +9,7 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.aspectRatio import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height @@ -32,8 +34,10 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.platform.LocalConfiguration +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.vectorResource import androidx.compose.ui.text.AnnotatedString @@ -119,9 +123,20 @@ fun SubjectDetailScreen( .height(backgroundHeight.dp) .background( color = BbangZipTheme.colors.backgroundAccent_FFDAA0, - shape = RoundedCornerShape(bottomStart = 32.dp, bottomEnd = 32.dp), + shape = RoundedCornerShape(bottomStart = 40.dp, bottomEnd = 40.dp), ), ) { + Image( + painter = painterResource(R.drawable.img_subject_detail_header), + contentDescription = null, + modifier = + Modifier + .padding(top = 60.dp) + .fillMaxSize() + .aspectRatio(360f / 172f) + .clip(shape = RoundedCornerShape(bottomStart = 40.dp, bottomEnd = 40.dp)) + .align(Alignment.BottomCenter), + ) TwoLineTextWithWordWrap(motivationMessage) Box( @@ -560,8 +575,7 @@ fun TwoLineTextWithWordWrap( modifier = Modifier .width(200.dp) - .padding(top = 92.dp, start = 20.dp) - .height(56.dp), + .padding(top = 92.dp, start = 20.dp), style = BbangZipTheme.typography.heading2Bold, onTextLayout = { textLayoutResult -> if (displayText == null) { diff --git a/app/src/main/java/org/android/bbangzip/presentation/ui/todo/TodoContract.kt b/app/src/main/java/org/android/bbangzip/presentation/ui/todo/TodoContract.kt index f69f4141..6a852abc 100644 --- a/app/src/main/java/org/android/bbangzip/presentation/ui/todo/TodoContract.kt +++ b/app/src/main/java/org/android/bbangzip/presentation/ui/todo/TodoContract.kt @@ -124,7 +124,7 @@ class TodoContract { cardState = BbangZipCardState.COMPLETE, ), ), - val pendingCount: Int = 10, + val pendingCount: Int = 1, val remainingStudyCount: Int = 5, val completeCount: Int = 5, val todoFilterBottomSheetState: Boolean = false, diff --git a/app/src/main/java/org/android/bbangzip/presentation/ui/todo/TodoScreen.kt b/app/src/main/java/org/android/bbangzip/presentation/ui/todo/TodoScreen.kt index 07aed4ae..2e47ee99 100644 --- a/app/src/main/java/org/android/bbangzip/presentation/ui/todo/TodoScreen.kt +++ b/app/src/main/java/org/android/bbangzip/presentation/ui/todo/TodoScreen.kt @@ -1,12 +1,16 @@ package org.android.bbangzip.presentation.ui.todo +import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ColumnScope import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.aspectRatio import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height @@ -15,6 +19,7 @@ import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.wrapContentSize import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.ExperimentalMaterial3Api @@ -26,8 +31,10 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.platform.LocalConfiguration +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.vectorResource +import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import org.android.bbangzip.R @@ -41,7 +48,7 @@ import org.android.bbangzip.presentation.type.BbangZipButtonSize import org.android.bbangzip.presentation.type.BbangZipButtonType import org.android.bbangzip.presentation.type.ToDoFilterType import org.android.bbangzip.presentation.type.ToDoScreenType -import org.android.bbangzip.presentation.ui.todo.component.ToDoFilterPickerBottomSheet +import org.android.bbangzip.presentation.util.modifier.applyFilterOnClick import org.android.bbangzip.ui.theme.BbangZipTheme @Composable @@ -85,7 +92,14 @@ fun TodoScreen( if (todoState.screenType == ToDoScreenType.EMPTY) { item { Column(modifier = modifier.padding(horizontal = 16.dp)) { - EmptyView() + Image( + painter = painterResource(id = R.drawable.img_empty_view), + contentDescription = null, + modifier = + Modifier + .fillMaxWidth() + .aspectRatio(16f / 15f), + ) Spacer(modifier = Modifier.height(16.dp)) @@ -249,7 +263,7 @@ fun TodoScreen( onClickCancelButton = onRevertCompleteBottomSheetDismissButtonClicked, ) - ToDoFilterPickerBottomSheet( + BbangZipToDoFilterPickerBottomSheet( isBottomSheetVisible = todoState.todoFilterBottomSheetState, selectedItem = todoState.selectedFilterItem, onSelectedItemChanged = onFilterBottomSheetItemClicked, @@ -271,81 +285,102 @@ fun DateMessageCard( .fillMaxWidth(), ) { Column(modifier = Modifier.fillMaxWidth()) { - Column( + Box( Modifier .background(color = BbangZipTheme.colors.backgroundAccent_FFDAA0, shape = RoundedCornerShape(bottomEnd = 32.dp, bottomStart = 32.dp)) .fillMaxWidth() - .height(LocalConfiguration.current.screenHeightDp.dp * (172f / 764f)) - .padding(start = 24.dp), + .height(LocalConfiguration.current.screenHeightDp.dp * (172f / 800f)), ) { - Spacer(modifier = Modifier.height(44.dp)) - - Row( - verticalAlignment = Alignment.CenterVertically, - modifier = Modifier.padding(start = 8.dp), - ) { - Text( - text = todayDate[0].toInt().toString(), - style = BbangZipTheme.typography.title3Bold, - color = BbangZipTheme.colors.labelNormal_282119, + if (pendingCount == 0) { + Image( + painter = painterResource(R.drawable.img_pending_study_zero), + contentDescription = null, + modifier = + Modifier + .fillMaxWidth() + .aspectRatio(360f / 172f) + .clip(RoundedCornerShape(bottomEnd = 32.dp, bottomStart = 32.dp)), ) - - Text( - text = stringResource(R.string.todo_month_text), - style = BbangZipTheme.typography.headline1Bold, - color = BbangZipTheme.colors.labelAlternative_282119_61, + } else { + Image( + painter = painterResource(R.drawable.img_no_peding_study), + contentDescription = null, + modifier = + Modifier + .fillMaxWidth() + .aspectRatio(360f / 172f), ) + } + Column( + modifier = Modifier.padding(start = 24.dp), + ) { + Spacer(modifier = Modifier.height(44.dp)) - Spacer(modifier = Modifier.width(8.dp)) + Row( + verticalAlignment = Alignment.CenterVertically, + ) { + if (pendingCount != 0) Spacer(modifier = Modifier.width(8.dp)) + Text( + text = todayDate[0].toInt().toString(), + style = BbangZipTheme.typography.title3Bold, + color = BbangZipTheme.colors.labelNormal_282119, + ) - Text( - text = todayDate[1].toInt().toString(), - style = BbangZipTheme.typography.title3Bold, - color = BbangZipTheme.colors.labelNormal_282119, - ) + Text( + text = stringResource(R.string.todo_month_text), + style = BbangZipTheme.typography.headline1Bold, + color = BbangZipTheme.colors.labelAlternative_282119_61, + ) - Text( - text = stringResource(R.string.todo_day_text), - style = BbangZipTheme.typography.headline1Bold, - color = BbangZipTheme.colors.labelAlternative_282119_61, - ) + Spacer(modifier = Modifier.width(8.dp)) - Spacer(modifier = Modifier.width(8.dp)) + Text( + text = todayDate[1].toInt().toString(), + style = BbangZipTheme.typography.title3Bold, + color = BbangZipTheme.colors.labelNormal_282119, + ) - Text( - text = todayDate[2], - style = BbangZipTheme.typography.body1Bold, - color = BbangZipTheme.colors.labelNormal_282119, - ) - } + Text( + text = stringResource(R.string.todo_day_text), + style = BbangZipTheme.typography.headline1Bold, + color = BbangZipTheme.colors.labelAlternative_282119_61, + ) - Spacer(modifier = modifier.height(8.dp)) + Spacer(modifier = Modifier.width(8.dp)) - if (pendingCount == 0) { - Text( - text = stringResource(R.string.todo_pending_count_text), - style = BbangZipTheme.typography.headline1Bold, - color = BbangZipTheme.colors.labelAlternative_282119_61, - ) + Text( + text = todayDate[2], + style = BbangZipTheme.typography.body1Bold, + color = BbangZipTheme.colors.labelNormal_282119, + ) + } - Spacer(modifier = Modifier.height(62.dp)) - } else { - BbangZipButton( - bbangZipButtonType = BbangZipButtonType.Outlined, - bbangZipButtonSize = BbangZipButtonSize.Medium, - onClick = { onAddPendingStudyButtonClicked() }, - label = String.format(stringResource(R.string.btn_todo_overdue_label), pendingCount), - trailingIcon = R.drawable.ic_chevronright_thick_small_24, - modifier = Modifier.wrapContentSize(), - ) + Spacer(modifier = modifier.height(8.dp)) + + if (pendingCount == 0) { + Text( + text = stringResource(R.string.todo_pending_count_text), + style = BbangZipTheme.typography.headline1Bold, + color = BbangZipTheme.colors.labelAlternative_282119_61, + ) - Spacer(modifier = Modifier.height(48.dp)) + Spacer(modifier = Modifier.height(62.dp)) + } else { + BbangZipButton( + bbangZipButtonType = BbangZipButtonType.Outlined, + bbangZipButtonSize = BbangZipButtonSize.Medium, + onClick = { onAddPendingStudyButtonClicked() }, + label = String.format(stringResource(R.string.btn_todo_overdue_label), pendingCount), + trailingIcon = R.drawable.ic_chevronright_thick_small_24, + modifier = Modifier.wrapContentSize(), + ) + + Spacer(modifier = Modifier.height(48.dp)) + } } } - Spacer(modifier = Modifier.height(24.dp)) } - TopTailBalloon( text = stringResource(R.string.todo_top_tail_balloon_text), leadingIcon = { @@ -455,20 +490,50 @@ fun DeleteAndFilterIcons( } } +@OptIn(ExperimentalMaterial3Api::class) @Composable -fun EmptyView( +fun BbangZipToDoFilterPickerBottomSheet( + isBottomSheetVisible: Boolean, modifier: Modifier = Modifier, + title: @Composable (ColumnScope.() -> Unit) = {}, + selectedItem: ToDoFilterType = ToDoFilterType.RECENT, + onSelectedItemChanged: (ToDoFilterType) -> Unit = {}, + onDismissRequest: () -> Unit = {}, ) { - Box( - modifier = - modifier - .fillMaxWidth() - .height(328.dp) - .background(color = BbangZipTheme.colors.backgroundAlternative_F5F5F5, shape = RoundedCornerShape(size = 32.dp)), - contentAlignment = Alignment.Center, - ) { - Text(text = "Empty View") - } + BbangZipBasicModalBottomSheet( + modifier = modifier, + isBottomSheetVisible = isBottomSheetVisible, + onDismissRequest = onDismissRequest, + title = { title() }, + content = { + LazyColumn( + modifier = Modifier.padding(top = 8.dp, bottom = 24.dp), + verticalArrangement = Arrangement.spacedBy(8.dp), + horizontalAlignment = Alignment.CenterHorizontally, + ) { + itemsIndexed( + ToDoFilterType.entries, + key = { _, item -> item }, + ) { _, item -> + Text( + text = item.filter, + modifier = + Modifier + .fillMaxWidth() + .applyFilterOnClick { onSelectedItemChanged(item) } + .background( + color = if (item != selectedItem) BbangZipTheme.colors.staticWhite_FFFFFF else BbangZipTheme.colors.fillStrong_68645E_16, + shape = RoundedCornerShape(16.dp), + ) + .padding(vertical = 8.dp), + textAlign = TextAlign.Center, + style = BbangZipTheme.typography.body1Bold, + color = BbangZipTheme.colors.labelNormal_282119, + ) + } + } + }, + ) } @OptIn(ExperimentalMaterial3Api::class) @@ -698,7 +763,7 @@ fun TodoScreenMockPreview() { ) TodoScreen( - todoState = mockTodoStates[0], + todoState = mockTodoStates[2], todayDate = listOf("2025", "01", "18"), bottomPadding = PaddingValues(), ) diff --git a/app/src/main/res/drawable/img_empty_view.xml b/app/src/main/res/drawable/img_empty_view.xml new file mode 100644 index 00000000..f71b1bed --- /dev/null +++ b/app/src/main/res/drawable/img_empty_view.xml @@ -0,0 +1,161 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/img_friend_profile_1.xml b/app/src/main/res/drawable/img_friend_profile_1.xml new file mode 100644 index 00000000..e89065df --- /dev/null +++ b/app/src/main/res/drawable/img_friend_profile_1.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/img_friend_profile_2.xml b/app/src/main/res/drawable/img_friend_profile_2.xml new file mode 100644 index 00000000..531cc308 --- /dev/null +++ b/app/src/main/res/drawable/img_friend_profile_2.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/img_friend_profile_3.xml b/app/src/main/res/drawable/img_friend_profile_3.xml new file mode 100644 index 00000000..22051688 --- /dev/null +++ b/app/src/main/res/drawable/img_friend_profile_3.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/img_friend_profile_4.xml b/app/src/main/res/drawable/img_friend_profile_4.xml new file mode 100644 index 00000000..ad76930b --- /dev/null +++ b/app/src/main/res/drawable/img_friend_profile_4.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/img_mypage_header.xml b/app/src/main/res/drawable/img_mypage_header.xml new file mode 100644 index 00000000..9297de8c --- /dev/null +++ b/app/src/main/res/drawable/img_mypage_header.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/img_no_peding_study.xml b/app/src/main/res/drawable/img_no_peding_study.xml new file mode 100644 index 00000000..9b1e344a --- /dev/null +++ b/app/src/main/res/drawable/img_no_peding_study.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/img_onboarding_end.xml b/app/src/main/res/drawable/img_onboarding_end.xml new file mode 100644 index 00000000..0e42a9ae --- /dev/null +++ b/app/src/main/res/drawable/img_onboarding_end.xml @@ -0,0 +1,400 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/img_onboarding_start.png b/app/src/main/res/drawable/img_onboarding_start.png deleted file mode 100644 index 3084cfbd..00000000 Binary files a/app/src/main/res/drawable/img_onboarding_start.png and /dev/null differ diff --git a/app/src/main/res/drawable/img_onboarding_start.xml b/app/src/main/res/drawable/img_onboarding_start.xml new file mode 100644 index 00000000..192ee020 --- /dev/null +++ b/app/src/main/res/drawable/img_onboarding_start.xml @@ -0,0 +1,382 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/img_pending_study_zero.xml b/app/src/main/res/drawable/img_pending_study_zero.xml new file mode 100644 index 00000000..3f26a46c --- /dev/null +++ b/app/src/main/res/drawable/img_pending_study_zero.xml @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/img_subject_detail_header.xml b/app/src/main/res/drawable/img_subject_detail_header.xml new file mode 100644 index 00000000..be207e01 --- /dev/null +++ b/app/src/main/res/drawable/img_subject_detail_header.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/img_subject_header.xml b/app/src/main/res/drawable/img_subject_header.xml new file mode 100644 index 00000000..63175fb3 --- /dev/null +++ b/app/src/main/res/drawable/img_subject_header.xml @@ -0,0 +1,607 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +