diff --git a/feature/article/AGENTS.md b/feature/article/AGENTS.md index 0982cd9f79..b0d848d8b6 100644 --- a/feature/article/AGENTS.md +++ b/feature/article/AGENTS.md @@ -4,7 +4,7 @@ This file provides prescriptive coding guidelines for AI coding agents working i ## Module Overview -The `feature:article` module provides the **article and announcement system** for the KOIN app, including university notices, keyword-based notifications, search functionality, and the lost & found feature. It uses a hybrid architecture with legacy XML-based fragments and modern Compose components. +The `feature:article` module provides the **article and announcement system** for the KOIN app, including university notices, keyword-based notifications, search functionality. It uses legacy XML-based fragments. ### Architecture Position ``` @@ -14,7 +14,7 @@ The `feature:article` module provides the **article and announcement system** fo ↓ depends on ┌─────────────────────────────────────────────────────────────┐ │ feature:article │ -│ (Notices, Keywords, Search, Lost & Found) │ +│ (Notices, Keywords, Search) │ └─────────────────────────────────────────────────────────────┘ ↓ depends on ┌─────────────────────────────────────────────────────────────┐ @@ -28,24 +28,15 @@ The `feature:article` module provides the **article and announcement system** fo 2. **Article Detail**: Show full article content with attachments 3. **Keyword Management**: User keyword subscriptions for notifications 4. **Article Search**: Full-text search with history -5. **Lost & Found**: Lost/found item posting and browsing -6. **Hot Articles**: Popular article recommendations -7. **Deep Linking**: Handle notification and external links +5. **Hot Articles**: Popular article recommendations +6. **Deep Linking**: Handle notification and external links ## Package Structure ``` feature/article/src/main/java/in/koreatech/koin/feature/article/ ├── ArticleActivity.kt # Main activity with navigation -├── LostAndFoundReportActivity.kt # Report feature activity ├── Constant.kt # Module constants -├── component/ # Reusable Compose components -│ ├── Dropdown.kt # Dropdown selector -│ ├── HotArticle.kt # Hot article card -│ ├── ItemTypeChip.kt # Item type chip -│ ├── KeywordChipGroup.kt # Keyword chips -│ ├── LoadingDialog.kt # Loading indicator -│ └── LostItemTypeChip.kt # Lost item category chip ├── enums/ │ └── ArticleBoardType.kt # Board type enumeration ├── model/ @@ -67,16 +58,6 @@ feature/article/src/main/java/in/koreatech/koin/feature/article/ │ ├── list/ │ │ ├── ArticleListFragment.kt # Article list screen │ │ └── ArticleListViewModel.kt -│ ├── lostandfound/ -│ │ ├── component/ # Lost & found Compose components -│ │ ├── detail/ -│ │ │ ├── ArticleLostAndFoundDetailFragment.kt -│ │ │ └── ArticleLostAndFoundDetailViewModel.kt -│ │ ├── report/ -│ │ │ └── LostAndFoundReportScreen.kt -│ │ └── write/ -│ │ ├── ArticleLostAndFoundWriteLostFragment.kt -│ │ └── ArticleLostAndFoundWriteFoundFragment.kt │ └── search/ │ ├── ArticleSearchFragment.kt # Search screen │ └── ArticleSearchViewModel.kt @@ -84,7 +65,6 @@ feature/article/src/main/java/in/koreatech/koin/feature/article/ ├── ContextExtensions.kt # Context utilities ├── HtmlView.kt # HTML rendering ├── KoreanDateUtil.kt # Korean date formatting - ├── ModifierUtil.kt # Compose modifier utilities ├── ParsingExtensions.kt # String parsing └── TextExtensions.kt # Text utilities ``` @@ -232,7 +212,6 @@ enum class ArticleBoardType( val exposedInAll: Boolean = true ) { ALL(4, R.string.article_all, R.string.article_all, LinkType.NONE), - LOSTANDFOUND(14, R.string.article_lost_and_found, R.string.article_lost_and_found, LinkType.NONE), NORMAL(5, R.string.article_normal, R.string.article_normal_simple, LinkType.ARTICLE), SCHOLARSHIP(6, R.string.article_scholarship, R.string.article_scholarship_simple, LinkType.ARTICLE), SCHOOL(7, R.string.article_school, R.string.article_school_simple, LinkType.ARTICLE), @@ -261,7 +240,6 @@ enum class LinkType { | Type | ID | Link Type | Exposed in ALL | Description | |------|-----|-----------|----------------|-------------| | ALL | 4 | NONE | - | Aggregated view of all boards | -| LOSTANDFOUND | 14 | NONE | Yes | Lost & Found posts | | NORMAL | 5 | ARTICLE | Yes | General announcements | | SCHOLARSHIP | 6 | ARTICLE | Yes | Scholarship notices | | SCHOOL | 7 | ARTICLE | Yes | School-wide notices | @@ -363,50 +341,6 @@ fun Article.toArticleState(): ArticleState = ArticleState( ) ``` -### Compose Component Pattern (Lost & Found) - -**MUST** follow design system patterns for new components: - -```kotlin -@Composable -fun LostItemTypeChip( - type: LostItemType, - isSelected: Boolean, - onClick: () -> Unit, - modifier: Modifier = Modifier -) { - val colors = koinColors() - - FilterChip( - selected = isSelected, - onClick = onClick, - label = { - Text( - text = stringResource(type.labelRes), - style = koinTypography().labelMedium - ) - }, - colors = FilterChipDefaults.filterChipColors( - selectedContainerColor = colors.primary, - selectedLabelColor = colors.background - ), - modifier = modifier - ) -} - -@Preview -@Composable -private fun LostItemTypeChipPreview() { - RebrandKoinTheme { - LostItemTypeChip( - type = LostItemType.LOST, - isSelected = true, - onClick = {} - ) - } -} -``` - ### Korean Date Formatting **MUST** use consistent Korean date formatting: @@ -467,9 +401,6 @@ private fun navigateToDetailFragment() { ) ) } - "article_lost_and_found" -> { - setNavigationGraph(ArticleBoardType.LOSTANDFOUND.id) - } null -> { val bundle = intent.getBundleExtra(BUNDLE_ARTICLE_EXTRA_KEY) bundle?.getInt(START_BOARD)?.let { @@ -646,14 +577,6 @@ These rules are **non-negotiable**: 8. **Analytics**: **MUST** log user interactions for article views, searches, and keyword actions. -## Migration Notes - -This module is in a **hybrid state**: -- Legacy XML fragments for article list, detail, search, keyword screens -- Compose components for Lost & Found feature -- New features **SHOULD** use Compose -- Existing screens **MAY** be migrated gradually - ## Build Commands ```bash diff --git a/feature/article/src/main/java/in/koreatech/koin/feature/article/ArticleActivity.kt b/feature/article/src/main/java/in/koreatech/koin/feature/article/ArticleActivity.kt index 63a164e214..902f59907d 100644 --- a/feature/article/src/main/java/in/koreatech/koin/feature/article/ArticleActivity.kt +++ b/feature/article/src/main/java/in/koreatech/koin/feature/article/ArticleActivity.kt @@ -60,15 +60,6 @@ class ArticleActivity : ActivityBase() { R.id.articleDetailFragment -> setToolbar(ArticleToolbarState.ARTICLE_DETAIL) R.id.articleSearchFragment -> setToolbar(ArticleToolbarState.ARTICLE_SEARCH) R.id.articleKeywordFragment -> setToolbar(ArticleToolbarState.ARTICLE_KEYWORD) - R.id.articleLostAndFoundWriteLostFragment -> setToolbar( - ArticleToolbarState.ARTICLE_LOSTANDFOUND_LOST_ITEM - ) - R.id.articleLostAndFoundWriteFoundFragment -> setToolbar( - ArticleToolbarState.ARTICLE_LOSTANDFOUND_FOUND_ITEM - ) - R.id.articleLostAndFoundDetailFragment -> setToolbar( - ArticleToolbarState.ARTICLE_DETAIL - ) } } @@ -80,8 +71,8 @@ class ArticleActivity : ActivityBase() { super.onNewIntent(intent) } - private fun setNavigationGraph(startBoard: Int = ArticleBoardType.ALL.id) { - navController.setGraph(R.navigation.nav_graph_article, bundleOf(START_BOARD to startBoard)) + private fun setNavigationGraph() { + navController.setGraph(R.navigation.nav_graph_article, bundleOf(START_BOARD to ArticleBoardType.ALL.id)) } // 지정된 프래그먼트로 이동 (extra로 전달받은 경우에만) @@ -113,10 +104,7 @@ class ArticleActivity : ActivityBase() { ) } null -> { - val bundle = intent.getBundleExtra(BUNDLE_ARTICLE_EXTRA_KEY) - bundle?.getInt(START_BOARD)?.let { - setNavigationGraph(it) - } ?: setNavigationGraph() + setNavigationGraph() } } } @@ -167,6 +155,5 @@ class ArticleActivity : ActivityBase() { companion object { const val NAVIGATE_ACTION = "navigate_action" const val START_BOARD = "start_board" - const val BUNDLE_ARTICLE_EXTRA_KEY = "BUNDLE_EXTRA_KEY" } } diff --git a/feature/article/src/main/java/in/koreatech/koin/feature/article/component/Dropdown.kt b/feature/article/src/main/java/in/koreatech/koin/feature/article/component/Dropdown.kt deleted file mode 100644 index 8523e9f2e2..0000000000 --- a/feature/article/src/main/java/in/koreatech/koin/feature/article/component/Dropdown.kt +++ /dev/null @@ -1,123 +0,0 @@ -package `in`.koreatech.koin.feature.article.component - -import androidx.compose.animation.core.animateFloatAsState -import androidx.compose.foundation.background -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.width -import androidx.compose.material3.DropdownMenu -import androidx.compose.material3.Icon -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.clip -import androidx.compose.ui.draw.rotate -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.painterResource -import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.unit.dp -import `in`.koreatech.koin.core.designsystem.noRippleClickable -import `in`.koreatech.koin.core.designsystem.theme.KoinTheme -import `in`.koreatech.koin.feature.article.R - -/** - * Dropdown Component - * @param title Dropdown title - * @param items Dropdown items - * @param onItemSelected Callback when item is selected - */ -@Composable -fun Dropdown( - title: String, - isDropdownExpanded: Boolean, - items: List, - modifier: Modifier = Modifier, - onDropdownExpandChange: (Boolean) -> Unit = {}, - onItemSelected: (Int) -> Unit = {} -) = Column(modifier = modifier) { - val rotateDegree: Float by animateFloatAsState( - targetValue = if (isDropdownExpanded) 180f else 0f, - label = "degree" - ) - - Row( - modifier = - Modifier - .clip(KoinTheme.shapes.medium) - .background( - color = KoinTheme.colors.info200 - ) - .noRippleClickable { - onDropdownExpandChange(!isDropdownExpanded) - } - .padding(start = 12.dp, end = 4.dp, top = 4.dp, bottom = 4.dp), - verticalAlignment = Alignment.CenterVertically - ) { - Text( - text = title, - style = KoinTheme.typography.medium14.copy(fontWeight = FontWeight.SemiBold), - color = KoinTheme.colors.primary600, - maxLines = 1 - ) - Spacer(modifier = Modifier.width(4.dp)) - Icon( - modifier = Modifier.rotate(rotateDegree), - painter = painterResource(id = R.drawable.ic_dropdown_arrow), - contentDescription = "" - ) - } - - /** - * Vertical padding of DropdownMenu is hardcoded to 8.dp by google. - * So, we will leave vertical padding value to 0.dp - * @see [androidx.compose.material3.DropdownMenu] - */ - DropdownMenu( - modifier = - Modifier - .width(96.dp) - .padding(0.dp), - expanded = isDropdownExpanded, - onDismissRequest = { onDropdownExpandChange(false) }, - containerColor = Color.Transparent, - tonalElevation = 0.dp, - shadowElevation = 0.dp - ) { - Box( - modifier = - Modifier - .fillMaxSize() - .clip(KoinTheme.shapes.medium) - .background( - color = KoinTheme.colors.info200 - ) - ) { - Column { - items.forEachIndexed { index, it -> - Text( - text = it, - style = KoinTheme.typography.medium14.copy(textAlign = TextAlign.Center), - color = KoinTheme.colors.primary600, - modifier = - Modifier - .fillMaxWidth() - .noRippleClickable { - onItemSelected(index) - onDropdownExpandChange(false) - } - .padding(vertical = 8.dp, horizontal = 12.dp), - maxLines = 1 - ) - } - } - } - } -} diff --git a/feature/article/src/main/java/in/koreatech/koin/feature/article/component/HotArticle.kt b/feature/article/src/main/java/in/koreatech/koin/feature/article/component/HotArticle.kt deleted file mode 100644 index de8dedb9d5..0000000000 --- a/feature/article/src/main/java/in/koreatech/koin/feature/article/component/HotArticle.kt +++ /dev/null @@ -1,93 +0,0 @@ -package `in`.koreatech.koin.feature.article.component - -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.width -import androidx.compose.material3.HorizontalDivider -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.text.style.TextOverflow -import androidx.compose.ui.unit.dp -import `in`.koreatech.koin.core.designsystem.noRippleClickable -import `in`.koreatech.koin.core.designsystem.theme.KoinTheme -import `in`.koreatech.koin.feature.article.R -import `in`.koreatech.koin.feature.article.enums.ArticleBoardType -import `in`.koreatech.koin.feature.article.model.ArticleHeaderState - -@Composable -fun HotArticle( - hotArticleList: List, - modifier: Modifier = Modifier, - navigateToHotArticle: (HotArticleData) -> Unit -) { - Column(modifier = modifier) { - Text( - modifier = Modifier.padding(vertical = 14.dp, horizontal = 24.dp), - style = KoinTheme.typography.bold16, - text = stringResource(R.string.hot_article_title) - ) - - hotArticleList.forEach { hotArticle -> - HotArticleItem( - hotArticleData = - HotArticleData( - articleId = hotArticle.id, - articleTitle = hotArticle.title, - board = hotArticle.board - ), - navigateToHotArticle = navigateToHotArticle - ) - HorizontalDivider(color = KoinTheme.colors.neutral100) - } - } -} - -@Composable -fun HotArticleItem( - hotArticleData: HotArticleData, - modifier: Modifier = Modifier, - navigateToHotArticle: (HotArticleData) -> Unit -) { - Row( - modifier = - modifier - .fillMaxWidth() - .noRippleClickable { navigateToHotArticle(hotArticleData) } - .padding(vertical = 12.dp, horizontal = 24.dp), - verticalAlignment = Alignment.CenterVertically - ) { - Text( - text = stringResource(hotArticleData.board.koreanName), - style = - KoinTheme.typography.bold12.copy( - fontWeight = FontWeight.SemiBold, - color = KoinTheme.colors.primary600 - ) - ) - Spacer(modifier = Modifier.width(8.dp)) - Text( - text = hotArticleData.articleTitle, - maxLines = 1, - overflow = TextOverflow.Ellipsis, - style = - KoinTheme.typography.bold14.copy( - fontWeight = FontWeight.SemiBold, - color = Color.Black - ) - ) - } -} - -data class HotArticleData( - val articleId: Int, - val articleTitle: String, - val board: ArticleBoardType -) diff --git a/feature/article/src/main/java/in/koreatech/koin/feature/article/component/KeywordChipGroup.kt b/feature/article/src/main/java/in/koreatech/koin/feature/article/component/KeywordChipGroup.kt deleted file mode 100644 index c3fe1eb553..0000000000 --- a/feature/article/src/main/java/in/koreatech/koin/feature/article/component/KeywordChipGroup.kt +++ /dev/null @@ -1,207 +0,0 @@ -package `in`.koreatech.koin.feature.article.component - -import androidx.compose.foundation.background -import androidx.compose.foundation.clickable -import androidx.compose.foundation.horizontalScroll -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.ExperimentalLayoutApi -import androidx.compose.foundation.layout.FlowRow -import androidx.compose.foundation.layout.PaddingValues -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.rememberScrollState -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material3.LocalTextStyle -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.runtime.CompositionLocalProvider -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.clip -import androidx.compose.ui.draw.drawWithContent -import androidx.compose.ui.graphics.Brush -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.graphics.CompositingStrategy -import androidx.compose.ui.graphics.Shape -import androidx.compose.ui.graphics.graphicsLayer -import androidx.compose.ui.text.TextStyle -import androidx.compose.ui.unit.dp -import `in`.koreatech.koin.core.designsystem.component.chip.ChipOverflowStrategy.Flow -import `in`.koreatech.koin.core.designsystem.component.chip.TextChipColors -import `in`.koreatech.koin.core.designsystem.component.chip.TextChipDefaults -import `in`.koreatech.koin.core.designsystem.noRippleClickable -import `in`.koreatech.koin.core.designsystem.theme.KoinTheme - -@Composable -fun KeywordChipGroup( - chipTextList: List, - selectedChipIndexes: List, - modifier: Modifier = Modifier, - onSelect: (index: Int) -> Unit = {} -) { - LostAndFoundTextChipScrollGroup( - titles = chipTextList, - selectedChipIndexes = selectedChipIndexes, - onChipSelected = { onSelect(it) }, - showClickRipple = false, - shape = RoundedCornerShape(50), - horizontalArrangement = Arrangement.spacedBy(8.dp), - chipColors = keywordChipColors(), - modifier = modifier - ) -} - -@OptIn(ExperimentalLayoutApi::class) -@Composable -fun LostAndFoundTextChipFlowGroup( - modifier: Modifier = Modifier, - titles: List, - shape: Shape, - onChipSelected: (index: Int) -> Unit = {}, - selectedChipIndexes: List, - showClickRipple: Boolean, - contentPadding: PaddingValues = PaddingValues(vertical = 0.dp, horizontal = 0.dp), - horizontalArrangement: Arrangement.Horizontal, - verticalArrangement: Arrangement.Vertical, - chipColors: TextChipColors -) { - FlowRow( - modifier = modifier, - horizontalArrangement = horizontalArrangement, - verticalArrangement = verticalArrangement - ) { - titles.forEachIndexed { index, it -> - LostAndFoundTextChip( - title = it, - isSelected = selectedChipIndexes.contains(index), - shape = shape, - chipColors = chipColors, - contentPadding = contentPadding, - showClickRipple = showClickRipple, - onSelect = { onChipSelected(index) } - ) - } - } -} - -/** - * 텍스트 칩 그룹 - * @see `in`.koreatech.koin.core.designsystem.component.chip.TextChipGroup - * @param modifier Modifier - * @param chipOverflowStrategy Chip이 화면을 넘었을 때 전략 : [Flow], [Scroll] - * @param titles 칩 텍스트 리스트 - * @param shape 칩 모양 - * @param selectedChipIndexes 선택된 칩 인덱스 리스트 - * @param onChipSelected 칩 선택 리스너 - * @param showClickRipple 칩 클릭시 리플 효과 표시 여부 - * @param contentPadding 칩 내부 padding - * @param horizontalArrangement 칩 가로 정렬 - * @param chipColors 칩 색상 - */ -@Composable -internal fun LostAndFoundTextChipScrollGroup( - titles: List, - modifier: Modifier = Modifier, - shape: Shape = RoundedCornerShape(50), - onChipSelected: (index: Int) -> Unit = {}, - selectedChipIndexes: List = emptyList(), - showClickRipple: Boolean = false, - contentPadding: PaddingValues = PaddingValues(vertical = 6.dp, horizontal = 12.dp), - horizontalArrangement: Arrangement.Horizontal, - chipColors: TextChipColors = TextChipDefaults.chipColors() -) { - Row( - modifier = modifier - .horizontalScroll(rememberScrollState()) - .graphicsLayer(compositingStrategy = CompositingStrategy.Offscreen) - .drawWithContent { - drawContent() - drawRect( - brush = - Brush.horizontalGradient( - 0f to Color.White, - 0.1f to Color.Transparent, - 0.9f to Color.Transparent, - 1f to Color.White - ) - ) - }, - horizontalArrangement = horizontalArrangement - ) { - titles.forEachIndexed { index, it -> - LostAndFoundTextChip( - title = it, - isSelected = selectedChipIndexes.contains(index), - shape = shape, - chipColors = chipColors, - contentPadding = contentPadding, - showClickRipple = showClickRipple, - onSelect = { onChipSelected(index) } - ) - } - } -} - -/** - * 텍스트 칩 - * Design System의 TextChip에서 font padding을 제거한 버전 - * @see `in`.koreatech.koin.core.designsystem.component.chip.TextChip - * @param title 텍스트 - * @param isSelected 선택 여부 - * @param shape 칩 모양 - * @param showClickRipple 클릭시 리플 효과 표시 여부 - * @param onSelect 클릭시 실행할 함수 - * @param contentPadding 칩 내부 padding - * @param chipColors 칩 색상 - */ -@Composable -fun LostAndFoundTextChip( - title: String, - modifier: Modifier = Modifier, - textStyle: TextStyle = KoinTheme.typography.medium14, - isSelected: Boolean = false, - shape: Shape = RoundedCornerShape(50), - showClickRipple: Boolean = true, - contentPadding: PaddingValues = PaddingValues(horizontal = 12.dp), - chipColors: TextChipColors = TextChipDefaults.chipColors(), - onSelect: () -> Unit = {} -) { - CompositionLocalProvider( - LocalTextStyle provides textStyle - ) { - Box( - modifier = modifier - .clip(shape) - .then( - if (showClickRipple) { - Modifier.clickable { - onSelect() - } - } else { - Modifier.noRippleClickable { - onSelect() - } - } - ) - .background(if (isSelected) chipColors.selectedContainerColor else chipColors.unselectedContainerColor) - .padding(contentPadding), - contentAlignment = Alignment.Center - ) { - Text( - text = title, - style = LocalTextStyle.current, - color = if (isSelected) chipColors.selectedContentColor else chipColors.unselectedContentColor - ) - } - } -} - -@Composable -fun keywordChipColors() = - TextChipDefaults.chipColors( - selectedContainerColor = KoinTheme.colors.primary500, - unselectedContainerColor = KoinTheme.colors.neutral100, - selectedContentColor = KoinTheme.colors.neutral100, - unselectedContentColor = KoinTheme.colors.neutral500 - ) diff --git a/feature/article/src/main/java/in/koreatech/koin/feature/article/component/LoadingDialog.kt b/feature/article/src/main/java/in/koreatech/koin/feature/article/component/LoadingDialog.kt deleted file mode 100644 index 3f0908be22..0000000000 --- a/feature/article/src/main/java/in/koreatech/koin/feature/article/component/LoadingDialog.kt +++ /dev/null @@ -1,48 +0,0 @@ -package `in`.koreatech.koin.feature.article.component - -import androidx.compose.foundation.background -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.width -import androidx.compose.material3.CircularProgressIndicator -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.stringResource -import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.unit.dp -import androidx.compose.ui.window.Dialog -import androidx.compose.ui.window.DialogProperties -import `in`.koreatech.koin.core.designsystem.theme.KoinTheme -import `in`.koreatech.koin.feature.article.R - -@Composable -fun LoadingDialog() { - Dialog( - onDismissRequest = { }, - properties = DialogProperties(dismissOnBackPress = false, dismissOnClickOutside = false) - ) { - Row( - modifier = - Modifier - .background(KoinTheme.colors.primary500) - .padding(vertical = 24.dp, horizontal = 24.dp), - verticalAlignment = Alignment.CenterVertically - ) { - CircularProgressIndicator(color = KoinTheme.colors.neutral0) - Spacer(modifier = Modifier.width(32.dp)) - Text( - text = stringResource(R.string.dialog_loading), - color = KoinTheme.colors.neutral0 - ) - } - } -} - -@Preview -@Composable -private fun LoadingDialogPreview() { - LoadingDialog() -} diff --git a/feature/article/src/main/java/in/koreatech/koin/feature/article/model/ArticleToolbarState.kt b/feature/article/src/main/java/in/koreatech/koin/feature/article/model/ArticleToolbarState.kt index 446add0411..2d2906e8de 100644 --- a/feature/article/src/main/java/in/koreatech/koin/feature/article/model/ArticleToolbarState.kt +++ b/feature/article/src/main/java/in/koreatech/koin/feature/article/model/ArticleToolbarState.kt @@ -11,7 +11,5 @@ enum class ArticleToolbarState( ARTICLE_LIST(R.string.navigation_title_article, R.menu.menu_article_list), ARTICLE_DETAIL(R.string.navigation_title_article), ARTICLE_SEARCH(R.string.navigation_title_article_search), - ARTICLE_KEYWORD(R.string.navigation_title_article_keyword), - ARTICLE_LOSTANDFOUND_LOST_ITEM(R.string.navigation_title_article_write_lost_item), - ARTICLE_LOSTANDFOUND_FOUND_ITEM(R.string.navigation_title_article_write_found_item) + ARTICLE_KEYWORD(R.string.navigation_title_article_keyword) } diff --git a/feature/article/src/main/res/navigation/nav_graph_article.xml b/feature/article/src/main/res/navigation/nav_graph_article.xml index b38b74c12c..c8e04aacf7 100644 --- a/feature/article/src/main/res/navigation/nav_graph_article.xml +++ b/feature/article/src/main/res/navigation/nav_graph_article.xml @@ -56,30 +56,4 @@ android:id="@+id/action_articleSearchFragment_to_articleDetailFragment" app:destination="@id/articleDetailFragment" /> - - - - - - - - - - - \ No newline at end of file diff --git a/feature/article/src/main/res/values/strings.xml b/feature/article/src/main/res/values/strings.xml index 36021830b5..6adee44457 100644 --- a/feature/article/src/main/res/values/strings.xml +++ b/feature/article/src/main/res/values/strings.xml @@ -22,7 +22,6 @@ 취업게시판 익명게시판 전체공지 - 분실물 일반공지 일반 학사공지 @@ -39,10 +38,6 @@ 학생생활 학생 - 글쓰기 - 주인을 찾아요 - 잃어버렸어요 - 모두보기 새 키워드 추가 @@ -79,9 +74,6 @@ 공지사항 공지글 검색 키워드 관리 - 분실물 신고 - 습득물 신고 - 신고하기 이전 다음