Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ plugins {
dependencies {
implementation(projects.feature.home)
implementation(projects.feature.account)
implementation(projects.feature.projects)
implementation(projects.feature.chat)
implementation(projects.feature.newproject)
implementation(projects.feature.experience)
Expand Down
5 changes: 4 additions & 1 deletion app/src/main/java/com/useai/logit/ScreenProviderImpl.kt
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,14 @@ import com.useai.feature.experience.ExperienceCreateScreen
import com.useai.feature.experience.ExperienceDetailScreen
import com.useai.feature.newproject.NewProjectBasicInfoScreen
import com.useai.feature.newproject.NewProjectQuestionScreen
import com.useai.feature.projects.ProjectsScreen

class ScreenProviderImpl: ScreenProvider {
override fun homeScreen(): Screen = HomeScreen

override fun accountScreen(): Screen = AccountScreen()
override fun accountScreen(): Screen = AccountScreen

override fun projectsScreen(): Screen = ProjectsScreen

override fun newProjectBasicInfoScreen(): Screen = NewProjectBasicInfoScreen

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ import androidx.annotation.StringRes
import com.slack.circuit.runtime.screen.Screen
import com.useai.core.designsystem.R
import com.useai.core.designsystem.icon.LogitIcons
import com.useai.feature.chat.ChatScreen
import com.useai.feature.experience.ExperienceScreen
import com.useai.feature.home.HomeScreen
import com.useai.feature.newproject.NewProjectBasicInfoScreen
import com.useai.feature.projects.ProjectsScreen
import com.useai.feature.report.ReportScreen

data class TopLevelNavItem(
Expand All @@ -21,7 +21,7 @@ data class TopLevelNavItem(
fun fromScreen(screen: Screen): TopLevelNavItem {
return when (screen) {
is HomeScreen -> HOME
is ChatScreen -> COVER_LETTER
is ProjectsScreen -> PROJECTS
is NewProjectBasicInfoScreen -> NEW_PROJECT
is ExperienceScreen -> EXPERIENCE
is ReportScreen -> REPORT
Expand All @@ -38,7 +38,7 @@ val HOME = TopLevelNavItem(
titleTextId = R.string.home_title,
)

val COVER_LETTER = TopLevelNavItem(
val PROJECTS = TopLevelNavItem(
selectedIconId = LogitIcons.PaperSelected,
unselectedIconId = LogitIcons.PaperDefault,
iconTextId = R.string.cover_letter_title,
Expand Down
4 changes: 2 additions & 2 deletions app/src/main/java/com/useai/logit/ui/Root.kt
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,11 @@ import com.useai.core.designsystem.component.LogitNavigationBarItem
import com.useai.core.designsystem.component.snackbar.LocalLogitSnackbarHostState
import com.useai.core.designsystem.component.snackbar.LogitSnackbarHost
import com.useai.core.designsystem.theme.LogitTheme
import com.useai.feature.chat.ChatScreen
import com.useai.feature.experience.ExperienceScreen
import com.useai.feature.home.HomeScreen
import com.useai.feature.newproject.NewProjectBasicInfoScreen
import com.useai.feature.newproject.NewProjectQuestionScreen
import com.useai.feature.projects.ProjectsScreen
import com.useai.feature.report.ReportScreen
import com.useai.logit.RootScreen
import com.useai.logit.navigation.TopLevelNavItem
Expand All @@ -48,7 +48,7 @@ fun Root(
val screens = remember {
listOf(
HomeScreen,
ChatScreen(""),
ProjectsScreen,
NewProjectBasicInfoScreen,
ExperienceScreen,
ReportScreen,
Expand Down
1 change: 1 addition & 0 deletions core/designsystem/src/main/res/values/dimens.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
<resources>
<dimen name="spacing_launcher_heading_vertical">8dp</dimen>
<dimen name="screen_common_padding_horizontal">20dp</dimen>
<dimen name="screen_common_padding_bottom">20dp</dimen>
<dimen name="app_header_user_profile_area_size">44dp</dimen>
<dimen name="app_header_user_profile_image_size">35dp</dimen>
<dimen name="spacing_form_vertical">12dp</dimen>
Expand Down
5 changes: 4 additions & 1 deletion core/designsystem/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,13 @@
<!-- region UI -->
<string name="home_experience_type_title_format">%s님의 경험 유형</string>
<string name="home_experience_type_banner_desc_format">관련경험 %d개</string>
<string name="home_project_list_title">프로젝트 목록</string>
<string name="home_empty_project_phrase">자기소개서를 생성해보세요</string>
<string name="home_new_project">자기소개서 작성</string>
<string name="home_project_list_item_title_format">%s %s</string>

<string name="projects_title">프로젝트 목록</string>
<string name="projects_count_format">%d개</string>

<string name="update_letter">자기소개서 업데이트</string>
<string name="placeholder_message_input">어떤 내용을 만들어볼까요?</string>
<string name="question_number">Q%s</string>
Expand Down Expand Up @@ -106,5 +108,6 @@

<string name="content_description_app_logo">로짓 로고</string>
<string name="content_description_user_profile">사용자 프로필</string>
<string name="content_description_new_project">프로젝트 생성</string>
</resources>

Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import com.slack.circuit.runtime.screen.Screen
interface ScreenProvider {
fun homeScreen(): Screen
fun accountScreen(): Screen
fun projectsScreen(): Screen
fun newProjectBasicInfoScreen(): Screen
fun newProjectQuestionScreen(
companyName: String,
Expand Down
44 changes: 30 additions & 14 deletions core/ui/src/main/kotlin/com/useai/core/ui/AppHeader.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.useai.core.ui
import androidx.compose.foundation.Image
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
Expand All @@ -15,44 +16,47 @@ 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.painter.Painter
import androidx.compose.ui.res.dimensionResource
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 androidx.compose.ui.unit.dp
import com.useai.core.designsystem.R

@Composable
fun AppHeader(
modifier: Modifier = Modifier,
onClickProfile: () -> Unit,
title: @Composable () -> Unit,
iconPainter: Painter,
iconDescription: String?,
iconSize: Dp,
onIconClick: () -> Unit,
paddingValues: PaddingValues = PaddingValues(
horizontal = dimensionResource(R.dimen.screen_common_padding_horizontal),
)
) {
Row(
modifier = modifier
.fillMaxWidth()
.padding(horizontal = dimensionResource(R.dimen.screen_common_padding_horizontal)),
.padding(paddingValues),
verticalAlignment = Alignment.CenterVertically,
) {
Image(
painter = painterResource(R.drawable.ic_symbol_word),
contentDescription = stringResource(R.string.content_description_app_logo),
modifier = Modifier
.height(28.dp)
.width(85.dp),
)
title()
Spacer(Modifier.weight(1f))
Box(
modifier = Modifier.size(dimensionResource(R.dimen.app_header_user_profile_area_size)),
contentAlignment = Alignment.Center,
) {
Image(
painter = painterResource(R.drawable.ic_app_user),
contentDescription = stringResource(R.string.content_description_user_profile),
painter = iconPainter,
contentDescription = iconDescription,
modifier = Modifier
.size(dimensionResource(R.dimen.app_header_user_profile_image_size))
.size(iconSize)
.clip(CircleShape)
.clickable(
onClick = onClickProfile,
onClick = onIconClick,
),
)
}
Expand All @@ -63,6 +67,18 @@ fun AppHeader(
@Composable
private fun AppHeaderPreview() {
AppHeader(
onClickProfile = {}
title = {
Image(
painter = painterResource(R.drawable.ic_symbol_word),
contentDescription = stringResource(R.string.content_description_app_logo),
modifier = Modifier
.height(28.dp)
.width(85.dp),
)
},
iconPainter = painterResource(R.drawable.ic_app_user),
iconDescription = stringResource(R.string.content_description_user_profile),
iconSize = dimensionResource(R.dimen.app_header_user_profile_image_size),
onIconClick = {}
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package com.useai.core.ui.project

import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Spacer
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.foundation.shape.RoundedCornerShape
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
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 com.useai.core.designsystem.R
import com.useai.core.designsystem.component.button.LogitPrimaryButton
import com.useai.core.designsystem.theme.LogitTheme

@Composable
fun EmptyProjectList(
modifier: Modifier = Modifier,
onClickCreateProject: () -> Unit,
) {
Column(
modifier = modifier
.fillMaxWidth()
.padding(vertical = 42.dp),
horizontalAlignment = Alignment.CenterHorizontally,
) {
Image(
painter = painterResource(R.drawable.ic_empty_state),
contentDescription = null,
modifier = Modifier.size(80.dp),
)
Spacer(Modifier.height(16.dp))
Text(
text = stringResource(R.string.home_empty_project_phrase),
style = LogitTheme.typography.body6_2,
color = LogitTheme.colors.gray100,
)
Spacer(Modifier.height(17.dp))
LogitPrimaryButton(
text = stringResource(R.string.home_new_project),
onClick = {
onClickCreateProject()
},
textStyle = LogitTheme.typography.body6_2,
shape = RoundedCornerShape(8.dp),
contentPadding = PaddingValues(horizontal = 24.dp, vertical = 14.dp),
)
}
}

@Preview
@Composable
private fun EmptyProjectListPreview() {
LogitTheme {
EmptyProjectList(
modifier = Modifier.background(LogitTheme.colors.white),
onClickCreateProject = {},
)
}
}
Loading