From 008cd5bb22e8827e5fc2e7562bfe8ee90a79bca4 Mon Sep 17 00:00:00 2001 From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com> Date: Tue, 30 Sep 2025 17:04:33 +0900 Subject: [PATCH 01/14] =?UTF-8?q?[chore]:=20=EB=B0=B0=ED=8F=AC=20=EB=B2=84?= =?UTF-8?q?=EC=A0=84=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 825a05da..9e682ca2 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -28,7 +28,7 @@ android { applicationId = "com.texthip.thip" minSdk = 29 targetSdk = 35 - versionCode = 9 + versionCode = 10 versionName = "1.3.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" From 513df39cd9b1eaf74f4c14a9aa4b664cd6addc09 Mon Sep 17 00:00:00 2001 From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com> Date: Thu, 9 Oct 2025 15:06:35 +0900 Subject: [PATCH 02/14] =?UTF-8?q?[release]:=20ga=20=EC=97=B0=EA=B2=B0=20?= =?UTF-8?q?=EB=AC=B8=EC=A0=9C=20=ED=95=B4=EA=B2=B0=20(#144)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index af348c36..5ba490a5 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -4,6 +4,8 @@ + Date: Thu, 9 Oct 2025 15:06:59 +0900 Subject: [PATCH 03/14] =?UTF-8?q?[refactor]:=20=ED=94=84=EB=A1=9C=ED=95=84?= =?UTF-8?q?=20=ED=8C=94=EB=A1=9C=EC=9B=8C=20=EC=88=98=20=EC=98=A4=EB=A5=98?= =?UTF-8?q?=20=ED=95=B4=EA=B2=B0=20(#144)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../texthip/thip/ui/feed/component/FeedSubscribelistBar.kt | 4 +++- .../java/com/texthip/thip/ui/feed/screen/FeedOthersScreen.kt | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/texthip/thip/ui/feed/component/FeedSubscribelistBar.kt b/app/src/main/java/com/texthip/thip/ui/feed/component/FeedSubscribelistBar.kt index eeb3a7f5..4607be3a 100644 --- a/app/src/main/java/com/texthip/thip/ui/feed/component/FeedSubscribelistBar.kt +++ b/app/src/main/java/com/texthip/thip/ui/feed/component/FeedSubscribelistBar.kt @@ -36,6 +36,7 @@ import com.texthip.thip.ui.theme.ThipTheme.typography @Composable fun FeedSubscribeBarlist( modifier: Modifier = Modifier, + followerNum: Int = 0, followerProfileImageUrls: List, onClick: () -> Unit ) { @@ -59,7 +60,8 @@ fun FeedSubscribeBarlist( color = colors.White ) ) { - append(stringResource(R.string.thip_num, followerProfileImageUrls.size)) } + append(stringResource(R.string.thip_num, followerNum)) + } withStyle( style = SpanStyle( color = colors.Grey diff --git a/app/src/main/java/com/texthip/thip/ui/feed/screen/FeedOthersScreen.kt b/app/src/main/java/com/texthip/thip/ui/feed/screen/FeedOthersScreen.kt index 3de4b5e0..0ae8ae32 100644 --- a/app/src/main/java/com/texthip/thip/ui/feed/screen/FeedOthersScreen.kt +++ b/app/src/main/java/com/texthip/thip/ui/feed/screen/FeedOthersScreen.kt @@ -133,6 +133,7 @@ fun FeedOthersContent( Spacer(modifier = Modifier.height(16.dp)) FeedSubscribeBarlist( modifier = Modifier.padding(horizontal = 20.dp), + followerNum = userInfo.followerCount, followerProfileImageUrls = userInfo.latestFollowerProfileImageUrls, onClick = { onNavigateToSubscriptionList(userInfo.creatorId) } ) From 31b87def82794c3f8ce724e48fb3d7e53cdc3ba4 Mon Sep 17 00:00:00 2001 From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com> Date: Thu, 9 Oct 2025 16:39:15 +0900 Subject: [PATCH 04/14] =?UTF-8?q?[refactor]:=20=ED=9A=8C=EC=9B=90=EA=B0=80?= =?UTF-8?q?=EC=9E=85=20=EC=B9=AD=ED=98=B8=20=EC=84=A0=ED=83=9D=20=EC=8A=A4?= =?UTF-8?q?=ED=81=AC=EB=A1=A4=20=EB=AC=B8=EC=A0=9C=20=ED=95=B4=EA=B2=B0=20?= =?UTF-8?q?(#144)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../texthip/thip/ui/signin/screen/SignupGenreScreen.kt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/app/src/main/java/com/texthip/thip/ui/signin/screen/SignupGenreScreen.kt b/app/src/main/java/com/texthip/thip/ui/signin/screen/SignupGenreScreen.kt index 52cb3f18..19f74f84 100644 --- a/app/src/main/java/com/texthip/thip/ui/signin/screen/SignupGenreScreen.kt +++ b/app/src/main/java/com/texthip/thip/ui/signin/screen/SignupGenreScreen.kt @@ -53,6 +53,7 @@ fun SignupGenreScreen( onNextClick = viewModel::signup ) } + @Composable fun SignupGenreContent( uiState: SignupUiState, @@ -81,6 +82,7 @@ fun SignupGenreContent( modifier = Modifier .padding(horizontal = 20.dp) .fillMaxWidth() + .weight(1f) ) { Text( text = stringResource(R.string.select_genre), @@ -107,7 +109,14 @@ fun SignupGenreContent( userScrollEnabled = false, ) { itemsIndexed(uiState.roleCards) { index, roleItem -> + val modifier = if (index == uiState.roleCards.lastIndex) { + Modifier.padding(bottom = 40.dp) + } else { + Modifier + } + RoleCard( + modifier = modifier, genre = roleItem.genre, role = roleItem.role, imageUrl = roleItem.imageUrl, From e312f69be84ecbd1560f922238d9953eff85b0ad Mon Sep 17 00:00:00 2001 From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com> Date: Thu, 9 Oct 2025 17:02:07 +0900 Subject: [PATCH 05/14] =?UTF-8?q?[refactor]:=20=ED=99=94=EB=A9=B4=20?= =?UTF-8?q?=EC=A0=84=ED=99=98=20=ED=9A=A8=EA=B3=BC=20=EC=97=86=EC=95=A0?= =?UTF-8?q?=EA=B8=B0=20(#144)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/com/texthip/thip/MainActivity.kt | 8 +++++++- .../java/com/texthip/thip/ui/navigator/MainNavHost.kt | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/texthip/thip/MainActivity.kt b/app/src/main/java/com/texthip/thip/MainActivity.kt index e55d7e09..c543ebfe 100644 --- a/app/src/main/java/com/texthip/thip/MainActivity.kt +++ b/app/src/main/java/com/texthip/thip/MainActivity.kt @@ -7,6 +7,8 @@ import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge import androidx.activity.result.contract.ActivityResultContracts +import androidx.compose.animation.EnterTransition +import androidx.compose.animation.ExitTransition import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.LaunchedEffect @@ -177,7 +179,11 @@ fun RootNavHost( NavHost( navController = navController, - startDestination = CommonRoutes.Splash + startDestination = CommonRoutes.Splash, + enterTransition = { EnterTransition.None }, + exitTransition = { ExitTransition.None }, + popEnterTransition = { EnterTransition.None }, + popExitTransition = { ExitTransition.None } ) { // --- 인증 관련 화면들 --- authNavigation( diff --git a/app/src/main/java/com/texthip/thip/ui/navigator/MainNavHost.kt b/app/src/main/java/com/texthip/thip/ui/navigator/MainNavHost.kt index b06889ac..9b0acdbb 100644 --- a/app/src/main/java/com/texthip/thip/ui/navigator/MainNavHost.kt +++ b/app/src/main/java/com/texthip/thip/ui/navigator/MainNavHost.kt @@ -1,5 +1,7 @@ package com.texthip.thip.ui.navigator +import androidx.compose.animation.EnterTransition +import androidx.compose.animation.ExitTransition import androidx.compose.runtime.Composable import androidx.navigation.NavHostController import androidx.navigation.compose.NavHost @@ -19,7 +21,11 @@ fun MainNavHost( ) { NavHost( navController = navController, - startDestination = MainTabRoutes.Feed + startDestination = MainTabRoutes.Feed, + enterTransition = { EnterTransition.None }, + exitTransition = { ExitTransition.None }, + popEnterTransition = { EnterTransition.None }, + popExitTransition = { ExitTransition.None } ) { feedNavigation( navController = navController, From d69a23e07be3cabc5a19236317fc9816ac186605 Mon Sep 17 00:00:00 2001 From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com> Date: Thu, 9 Oct 2025 17:02:29 +0900 Subject: [PATCH 06/14] =?UTF-8?q?[refactor]:=20=EB=AA=A8=EC=9E=84,=20?= =?UTF-8?q?=EA=B2=80=EC=83=89=20=EC=83=81=EB=8B=A8=EB=B0=94=20=EB=86=92?= =?UTF-8?q?=EC=9D=B4=20=EB=8B=A4=EB=A6=84=20=ED=95=B4=EA=B2=B0=20(#144)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/texthip/thip/ui/group/screen/GroupScreen.kt | 4 ++-- .../com/texthip/thip/ui/search/screen/SearchBookScreen.kt | 8 ++++---- app/src/main/res/values/strings.xml | 1 - 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/texthip/thip/ui/group/screen/GroupScreen.kt b/app/src/main/java/com/texthip/thip/ui/group/screen/GroupScreen.kt index ee41ae90..ee4022f1 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/screen/GroupScreen.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/screen/GroupScreen.kt @@ -32,9 +32,9 @@ import com.texthip.thip.R import com.texthip.thip.data.model.rooms.response.JoinedRoomResponse import com.texthip.thip.data.model.rooms.response.RoomMainList import com.texthip.thip.data.model.rooms.response.RoomMainResponse +import com.texthip.thip.ui.common.alarmpage.viewmodel.AlarmViewModel import com.texthip.thip.ui.common.buttons.FloatingButton import com.texthip.thip.ui.common.modal.ToastWithDate -import com.texthip.thip.ui.common.alarmpage.viewmodel.AlarmViewModel import com.texthip.thip.ui.common.topappbar.LogoTopAppBar import com.texthip.thip.ui.feed.component.EmptyMySubscriptionBar import com.texthip.thip.ui.group.myroom.component.GroupMySectionHeader @@ -131,7 +131,7 @@ fun GroupContent( // 검색창 GroupSearchTextField( - modifier = Modifier.padding(top = 72.dp, bottom = 32.dp), + modifier = Modifier.padding(top = 75.dp, bottom = 32.dp), onClick = onNavigateToGroupSearch ) diff --git a/app/src/main/java/com/texthip/thip/ui/search/screen/SearchBookScreen.kt b/app/src/main/java/com/texthip/thip/ui/search/screen/SearchBookScreen.kt index 36e83c4a..8a5a2876 100644 --- a/app/src/main/java/com/texthip/thip/ui/search/screen/SearchBookScreen.kt +++ b/app/src/main/java/com/texthip/thip/ui/search/screen/SearchBookScreen.kt @@ -23,9 +23,6 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleEventObserver import androidx.lifecycle.compose.LocalLifecycleOwner -import java.text.SimpleDateFormat -import java.util.Date -import java.util.Locale import com.texthip.thip.R import com.texthip.thip.ui.common.forms.SearchBookTextField import com.texthip.thip.ui.common.topappbar.LeftNameTopAppBar @@ -36,6 +33,9 @@ import com.texthip.thip.ui.search.component.SearchRecentBook import com.texthip.thip.ui.search.mock.BookData import com.texthip.thip.ui.search.viewmodel.SearchBookViewModel import com.texthip.thip.ui.theme.ThipTheme +import java.text.SimpleDateFormat +import java.util.Date +import java.util.Locale @Composable fun SearchBookScreen( @@ -149,7 +149,7 @@ private fun SearchBookScreenContent( modifier = Modifier.fillMaxSize() ) { LeftNameTopAppBar( - title = stringResource(R.string.book_search_topappbar) + title = stringResource(R.string.nav_search) ) Column( modifier = Modifier diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 27ba25e0..f36f668e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -387,7 +387,6 @@ 가장 많이 검색된 책 - 검색 책 제목, 작가명을 검색해보세요. 현재 등록된 책이 없어요. 원하는 책을 신청해주세요! From 428dce8cbcb655081946e612d8e633afdc284132 Mon Sep 17 00:00:00 2001 From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com> Date: Thu, 9 Oct 2025 17:11:49 +0900 Subject: [PATCH 07/14] =?UTF-8?q?[refactor]:=20=EB=8C=93=EA=B8=80=20?= =?UTF-8?q?=EB=93=9C=EB=A1=AD=EB=8B=A4=EC=9A=B4=20=EC=97=B4=EB=A0=B8?= =?UTF-8?q?=EC=9D=84=20=EB=95=8C=20=EB=92=A4=EB=A1=9C=EA=B0=80=EA=B8=B0=20?= =?UTF-8?q?=EB=88=84=EB=A5=B4=EB=A9=B4=20=EB=93=9C=EB=A1=AD=EB=8B=A4?= =?UTF-8?q?=EC=9A=B4=20=EB=8B=AB=ED=9E=88=EA=B2=8C=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?(#144)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/group/note/screen/GroupNoteScreen.kt | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/texthip/thip/ui/group/note/screen/GroupNoteScreen.kt b/app/src/main/java/com/texthip/thip/ui/group/note/screen/GroupNoteScreen.kt index add51661..57272c38 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/note/screen/GroupNoteScreen.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/note/screen/GroupNoteScreen.kt @@ -1,5 +1,6 @@ package com.texthip.thip.ui.group.note.screen +import androidx.activity.compose.BackHandler import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.core.Animatable import androidx.compose.animation.core.LinearEasing @@ -43,7 +44,6 @@ import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.texthip.thip.R -import com.texthip.thip.ui.feed.viewmodel.FeedViewModel import com.texthip.thip.data.model.rooms.response.PostList import com.texthip.thip.data.model.rooms.response.RoomsRecordsPinResponse import com.texthip.thip.ui.common.bottomsheet.MenuBottomSheet @@ -54,6 +54,7 @@ import com.texthip.thip.ui.common.header.HeaderMenuBarTab import com.texthip.thip.ui.common.modal.DialogPopup import com.texthip.thip.ui.common.modal.ToastWithDate import com.texthip.thip.ui.common.topappbar.DefaultTopAppBar +import com.texthip.thip.ui.feed.viewmodel.FeedViewModel import com.texthip.thip.ui.group.note.component.CommentBottomSheet import com.texthip.thip.ui.group.note.component.FilterHeaderSection import com.texthip.thip.ui.group.note.component.TextCommentCard @@ -226,6 +227,22 @@ fun GroupNoteContent( val commentsViewModel: CommentsViewModel = hiltViewModel() val commentsUiState by commentsViewModel.uiState.collectAsStateWithLifecycle() + BackHandler(enabled = isOverlayVisible) { + if (isCommentBottomSheetVisible) { + isCommentBottomSheetVisible = false + selectedPostForComment = null + onEvent(GroupNoteEvent.RefreshPosts) + } else if (selectedPostForMenu != null) { + selectedPostForMenu = null + } else if (showDeleteDialog) { + showDeleteDialog = false + postToDelete = null + } else if (isPinDialogVisible) { + isPinDialogVisible = false + postToPin = null + } + } + LaunchedEffect(showToast) { if (showToast) { delay(3000) From f6cececc776fa1d0199fc84172a221f273cba865 Mon Sep 17 00:00:00 2001 From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com> Date: Thu, 9 Oct 2025 17:13:05 +0900 Subject: [PATCH 08/14] =?UTF-8?q?[refactor]:=20=EB=82=B4=20=ED=94=84?= =?UTF-8?q?=EB=A1=9C=ED=95=84=20=ED=8C=94=EB=A1=9C=EC=9B=8C=20=EC=88=98=20?= =?UTF-8?q?=EC=98=A4=EB=A5=98=20=ED=95=B4=EA=B2=B0=20(#144)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/texthip/thip/ui/feed/screen/FeedMyScreen.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/texthip/thip/ui/feed/screen/FeedMyScreen.kt b/app/src/main/java/com/texthip/thip/ui/feed/screen/FeedMyScreen.kt index eda45f2f..ce0a2a1e 100644 --- a/app/src/main/java/com/texthip/thip/ui/feed/screen/FeedMyScreen.kt +++ b/app/src/main/java/com/texthip/thip/ui/feed/screen/FeedMyScreen.kt @@ -121,8 +121,8 @@ fun FeedMyContent( Spacer(modifier = Modifier.height(16.dp)) FeedSubscribeBarlist( modifier = Modifier.padding(horizontal = 20.dp), - followerProfileImageUrls = userInfo.latestFollowerProfileImageUrls - ?: emptyList(), + followerNum = userInfo.followerCount, + followerProfileImageUrls = userInfo.latestFollowerProfileImageUrls, onClick = { onNavigateToSubscriptionList(userInfo.creatorId) } ) Spacer(modifier = Modifier.height(40.dp)) From 7f2c9e7e369b2ab859fb95f382a559e398718f26 Mon Sep 17 00:00:00 2001 From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com> Date: Thu, 9 Oct 2025 17:17:26 +0900 Subject: [PATCH 09/14] =?UTF-8?q?[refactor]:=20=EB=AA=A8=EC=9E=84=20?= =?UTF-8?q?=ED=88=AC=ED=91=9C=20=EC=83=9D=EC=84=B1=20=EC=8B=9C=20=EC=A0=9C?= =?UTF-8?q?=EB=AA=A9=20=EA=B0=80=EC=9D=B4=EB=93=9C=20=EB=A9=98=ED=8A=B8=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20(#144)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f36f668e..e23ee58a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -237,7 +237,7 @@ 전체페이지를 초과할 수 없어요. 지금 읽은 그 부분, 어땠나요? ...한 생각이 들었어요.🤔 - 투표 내용을 20자 이내로 입력하세요. + 투표 제목을 20자 이내로 입력하세요. 항목을 20자 이내로 입력 항목 추가 독서 진행도 80% 이상부터 총평을 볼 수 있어요. From 409dbab8159150b3ea5d1c792ebb51f0a3e03871 Mon Sep 17 00:00:00 2001 From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com> Date: Thu, 9 Oct 2025 17:21:03 +0900 Subject: [PATCH 10/14] =?UTF-8?q?[refactor]:=20=EC=82=AC=EC=9A=A9=EC=9E=90?= =?UTF-8?q?=20=EA=B2=80=EC=83=89=20=EC=95=84=EC=9D=B4=EC=BD=98=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20(#144)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/drawable/ic_plusfriend.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/res/drawable/ic_plusfriend.xml b/app/src/main/res/drawable/ic_plusfriend.xml index 6464c2ce..0d2d3279 100644 --- a/app/src/main/res/drawable/ic_plusfriend.xml +++ b/app/src/main/res/drawable/ic_plusfriend.xml @@ -1,30 +1,30 @@ From c2d00bb16080b2f6b9acf137c01d9b69a003b348 Mon Sep 17 00:00:00 2001 From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com> Date: Fri, 24 Oct 2025 17:23:03 +0900 Subject: [PATCH 11/14] =?UTF-8?q?[refactor]:=20=EB=82=B4=20=EB=AA=A8?= =?UTF-8?q?=EC=9E=84=EB=B0=A9=EC=97=90=20=EC=99=84=EB=A3=8C=EB=B0=A9=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20(#144)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../thip/ui/group/done/mock/MyRoomCardData.kt | 2 +- .../myroom/component/GroupMyRoomFilterRow.kt | 6 ++++ .../thip/ui/group/myroom/mock/RoomType.kt | 2 +- .../ui/group/myroom/screen/GroupMyScreen.kt | 30 ++++++++++++------- .../group/myroom/viewmodel/GroupMyUiState.kt | 2 +- 5 files changed, 28 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/com/texthip/thip/ui/group/done/mock/MyRoomCardData.kt b/app/src/main/java/com/texthip/thip/ui/group/done/mock/MyRoomCardData.kt index c42f61be..311cf1c5 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/done/mock/MyRoomCardData.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/done/mock/MyRoomCardData.kt @@ -22,7 +22,7 @@ data class MyRoomsPaginationResult( fun MyRoomCardData.isRecruitingByType(): Boolean { return when (type) { RoomType.RECRUITING.value -> true - RoomType.PLAYING_AND_RECRUITING.value -> false + RoomType.ALL.value -> false RoomType.PLAYING.value -> false RoomType.EXPIRED.value -> false else -> false diff --git a/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupMyRoomFilterRow.kt b/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupMyRoomFilterRow.kt index 33166c67..a114b43f 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupMyRoomFilterRow.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupMyRoomFilterRow.kt @@ -34,6 +34,12 @@ fun GroupMyRoomFilterRow( isSelected = selectedStates[1], onClick = { onToggle(1) } ) + OptionChipButton( + text = stringResource(R.string.finish), + isFilled = true, + isSelected = selectedStates[2], + onClick = { onToggle(2) } + ) } } diff --git a/app/src/main/java/com/texthip/thip/ui/group/myroom/mock/RoomType.kt b/app/src/main/java/com/texthip/thip/ui/group/myroom/mock/RoomType.kt index fe71e4f1..06188785 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/myroom/mock/RoomType.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/myroom/mock/RoomType.kt @@ -1,7 +1,7 @@ package com.texthip.thip.ui.group.myroom.mock enum class RoomType(val value: String) { - PLAYING_AND_RECRUITING("playingAndRecruiting"), + ALL("playingAndRecruiting"), RECRUITING("recruiting"), PLAYING("playing"), EXPIRED("expired") diff --git a/app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupMyScreen.kt b/app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupMyScreen.kt index 26022136..feba229f 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupMyScreen.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupMyScreen.kt @@ -92,9 +92,10 @@ fun GroupMyContent( // Filter 상태를 val selectedStates = remember(uiState.currentRoomType) { when (uiState.currentRoomType) { - RoomType.PLAYING -> booleanArrayOf(true, false) - RoomType.RECRUITING -> booleanArrayOf(false, true) - else -> booleanArrayOf(false, false) // playingAndRecruiting + RoomType.PLAYING -> booleanArrayOf(true, false, false) // 진행중 + RoomType.RECRUITING -> booleanArrayOf(false, true, false) // 모집중 + RoomType.EXPIRED -> booleanArrayOf(false, false, true) // 완료 + else -> booleanArrayOf(false, false, false) // 전체(아무것도 선택 안함) } } @@ -123,27 +124,34 @@ fun GroupMyContent( GroupMyRoomFilterRow( selectedStates = selectedStates, onToggle = { idx -> - val newRoomType = when { + val newRoomType = when(idx) { // 진행중 버튼을 눌렀을 때 - idx == 0 -> { + 0 -> { if (selectedStates[0]) { // 이미 선택된 상태면 전체로 변경 - RoomType.PLAYING_AND_RECRUITING + RoomType.ALL } else { // 선택되지 않은 상태면 진행중만 RoomType.PLAYING } } // 모집중 버튼을 눌렀을 때 - idx == 1 -> { + 1 -> { if (selectedStates[1]) { - RoomType.PLAYING_AND_RECRUITING + RoomType.ALL } else { RoomType.RECRUITING } } - - else -> RoomType.PLAYING_AND_RECRUITING + // 완료 버튼을 눌렀을 때 + 2 -> { + if (selectedStates[2]) { + RoomType.ALL + } else { + RoomType.EXPIRED + } + } + else -> RoomType.ALL } onChangeRoomType(newRoomType) } @@ -265,7 +273,7 @@ fun GroupMyScreenPreview() { isPublic = false ) ), - currentRoomType = RoomType.PLAYING_AND_RECRUITING, + currentRoomType = RoomType.ALL, isLoading = false, hasMore = true ) diff --git a/app/src/main/java/com/texthip/thip/ui/group/myroom/viewmodel/GroupMyUiState.kt b/app/src/main/java/com/texthip/thip/ui/group/myroom/viewmodel/GroupMyUiState.kt index d48e308f..3228da72 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/myroom/viewmodel/GroupMyUiState.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/myroom/viewmodel/GroupMyUiState.kt @@ -5,7 +5,7 @@ import com.texthip.thip.ui.group.myroom.mock.RoomType data class GroupMyUiState( val myRooms: List = emptyList(), - val currentRoomType: RoomType = RoomType.PLAYING_AND_RECRUITING, + val currentRoomType: RoomType = RoomType.ALL, val isLoading: Boolean = false, val isLoadingMore: Boolean = false, val hasMore: Boolean = true, From 9aa6edadbccd28652e1d312fde596573bfc0af3e Mon Sep 17 00:00:00 2001 From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com> Date: Fri, 24 Oct 2025 17:45:42 +0900 Subject: [PATCH 12/14] =?UTF-8?q?[refactor]:=20=EB=82=B4=20=EB=AA=A8?= =?UTF-8?q?=EC=9E=84=EB=B0=A9=EC=97=90=EC=84=9C=20=EC=99=84=EB=A3=8C?= =?UTF-8?q?=EB=90=9C=20=EB=AA=A8=EC=9E=84=EB=B0=A9=20=EB=82=A0=EC=A7=9C=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C,=20=ED=81=B4=EB=A6=AD=ED=95=98=EB=A9=B4=20?= =?UTF-8?q?=EC=99=84=EB=A3=8C=EB=90=9C=20=EB=AA=A8=EC=9E=84=EB=B0=A9?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EC=9D=B4=EB=8F=99=ED=95=98=EB=8F=84?= =?UTF-8?q?=EB=A1=9D=20=EC=88=98=EC=A0=95=20(#144)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../thip/ui/common/cards/CardItemRoom.kt | 25 +++++++++++-------- .../ui/group/myroom/screen/GroupMyScreen.kt | 1 + .../navigator/navigations/GroupNavigation.kt | 4 ++- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoom.kt b/app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoom.kt index 081eeba3..4acf934d 100644 --- a/app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoom.kt +++ b/app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoom.kt @@ -45,6 +45,7 @@ fun CardItemRoom( imageUrl: String? = null, hasBorder: Boolean = false, isSecret: Boolean? = null, + isExpired: Boolean = false, onClick: () -> Unit = {} ) { Card( @@ -161,19 +162,21 @@ fun CardItemRoom( } } } - endDate?.let { - Spacer(modifier = Modifier.height(5.dp)) + if (!isExpired) { + endDate?.let { + Spacer(modifier = Modifier.height(5.dp)) - Text( - text = endDate - + if (isRecruiting) stringResource( - R.string.card_item_end - ) else stringResource(R.string.card_item_finish), + Text( + text = endDate + + if (isRecruiting) stringResource( + R.string.card_item_end + ) else stringResource(R.string.card_item_finish), - color = if (isRecruiting) colors.Red else colors.Grey01, - style = typography.menu_sb600_s12_h20, - maxLines = 1 - ) + color = if (isRecruiting) colors.Red else colors.Grey01, + style = typography.menu_sb600_s12_h20, + maxLines = 1 + ) + } } } } diff --git a/app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupMyScreen.kt b/app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupMyScreen.kt index feba229f..01298d87 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupMyScreen.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/myroom/screen/GroupMyScreen.kt @@ -175,6 +175,7 @@ fun GroupMyContent( endDate = room.endDate, imageUrl = room.bookImageUrl, isSecret = !room.isPublic, + isExpired = (room.type == RoomType.EXPIRED.value), onClick = { onCardClick(room) } ) } diff --git a/app/src/main/java/com/texthip/thip/ui/navigator/navigations/GroupNavigation.kt b/app/src/main/java/com/texthip/thip/ui/navigator/navigations/GroupNavigation.kt index 2f73ad51..1d7b2abf 100644 --- a/app/src/main/java/com/texthip/thip/ui/navigator/navigations/GroupNavigation.kt +++ b/app/src/main/java/com/texthip/thip/ui/navigator/navigations/GroupNavigation.kt @@ -165,10 +165,12 @@ fun NavGraphBuilder.groupNavigation( viewModel = groupMyViewModel, onCardClick = { room -> val isRecruiting = room.type == RoomType.RECRUITING.value + val isExpired = (room.type == RoomType.EXPIRED.value) + if (isRecruiting) { navController.navigateToGroupRecruit(room.roomId) } else { - navController.navigateToGroupRoom(room.roomId, isExpired = false) + navController.navigateToGroupRoom(room.roomId, isExpired = isExpired) } }, onNavigateBack = { From 2864d07a45a58e315b371c2000beeeb992f3bb62 Mon Sep 17 00:00:00 2001 From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com> Date: Fri, 24 Oct 2025 17:51:08 +0900 Subject: [PATCH 13/14] =?UTF-8?q?[refactor]:=20=EC=99=84=EB=A3=8C=EB=90=9C?= =?UTF-8?q?=20=EB=AA=A8=EC=9E=84=EB=B0=A9=20=EC=97=86=EC=95=A0=EA=B8=B0=20?= =?UTF-8?q?(#144)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../thip/ui/common/topappbar/LogoTopAppBar.kt | 16 +- .../thip/ui/group/done/mock/MyRoomCardData.kt | 39 ---- .../ui/group/done/screen/GroupDoneScreen.kt | 199 ------------------ .../group/done/viewmodel/GroupDoneUiState.kt | 15 -- .../done/viewmodel/GroupDoneViewModel.kt | 109 ---------- .../thip/ui/group/screen/GroupScreen.kt | 5 - .../extensions/GroupNavigationExtensions.kt | 5 - .../navigator/navigations/GroupNavigation.kt | 17 -- .../thip/ui/navigator/routes/GroupRoutes.kt | 3 - 9 files changed, 9 insertions(+), 399 deletions(-) delete mode 100644 app/src/main/java/com/texthip/thip/ui/group/done/mock/MyRoomCardData.kt delete mode 100644 app/src/main/java/com/texthip/thip/ui/group/done/screen/GroupDoneScreen.kt delete mode 100644 app/src/main/java/com/texthip/thip/ui/group/done/viewmodel/GroupDoneUiState.kt delete mode 100644 app/src/main/java/com/texthip/thip/ui/group/done/viewmodel/GroupDoneViewModel.kt diff --git a/app/src/main/java/com/texthip/thip/ui/common/topappbar/LogoTopAppBar.kt b/app/src/main/java/com/texthip/thip/ui/common/topappbar/LogoTopAppBar.kt index 14fcd678..821d534e 100644 --- a/app/src/main/java/com/texthip/thip/ui/common/topappbar/LogoTopAppBar.kt +++ b/app/src/main/java/com/texthip/thip/ui/common/topappbar/LogoTopAppBar.kt @@ -24,7 +24,7 @@ import com.texthip.thip.ui.theme.ThipTheme.colors @Composable fun LogoTopAppBar( modifier: Modifier = Modifier, - leftIcon: Painter, + leftIcon: Painter? = null, hasNotification: Boolean, onLeftClick: () -> Unit = {}, onRightClick: () -> Unit = {} @@ -56,12 +56,14 @@ fun LogoTopAppBar( horizontalArrangement = Arrangement.spacedBy(20.dp), verticalAlignment = Alignment.CenterVertically ) { - Icon( - painter = leftIcon, - contentDescription = "Left Icon", - tint = Color.Unspecified, - modifier = Modifier.clickable { onLeftClick() } - ) + leftIcon?.let { + Icon( + painter = it, + contentDescription = "Left Icon", + tint = Color.Unspecified, + modifier = Modifier.clickable { onLeftClick() } + ) + } Icon( painter = rightIcon, contentDescription = "Right Icon", diff --git a/app/src/main/java/com/texthip/thip/ui/group/done/mock/MyRoomCardData.kt b/app/src/main/java/com/texthip/thip/ui/group/done/mock/MyRoomCardData.kt deleted file mode 100644 index 311cf1c5..00000000 --- a/app/src/main/java/com/texthip/thip/ui/group/done/mock/MyRoomCardData.kt +++ /dev/null @@ -1,39 +0,0 @@ -package com.texthip.thip.ui.group.done.mock - -import com.texthip.thip.ui.group.myroom.mock.RoomType - -data class MyRoomCardData( - val roomId: Int, - val bookImageUrl: String?, - val roomName: String, - val recruitCount: Int, - val memberCount: Int, - val endDate: String, - val type: String -) - -data class MyRoomsPaginationResult( - val data: List, - val nextCursor: String?, - val isLast: Boolean -) - -// 타입 기반 모집 상태 확인 함수 -fun MyRoomCardData.isRecruitingByType(): Boolean { - return when (type) { - RoomType.RECRUITING.value -> true - RoomType.ALL.value -> false - RoomType.PLAYING.value -> false - RoomType.EXPIRED.value -> false - else -> false - } -} - -fun MyRoomCardData.getEndDateInDays(): Int { - return when { - endDate.contains("일 뒤") -> { - endDate.replace("일 뒤", "").trim().toIntOrNull() ?: 0 - } - else -> 0 - } -} \ No newline at end of file diff --git a/app/src/main/java/com/texthip/thip/ui/group/done/screen/GroupDoneScreen.kt b/app/src/main/java/com/texthip/thip/ui/group/done/screen/GroupDoneScreen.kt deleted file mode 100644 index 6fb081c4..00000000 --- a/app/src/main/java/com/texthip/thip/ui/group/done/screen/GroupDoneScreen.kt +++ /dev/null @@ -1,199 +0,0 @@ -package com.texthip.thip.ui.group.done.screen - -import androidx.compose.foundation.background -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.PaddingValues -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.lazy.LazyColumn -import androidx.compose.foundation.lazy.items -import androidx.compose.foundation.lazy.rememberLazyListState -import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.Text -import androidx.compose.material3.pulltorefresh.PullToRefreshBox -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.collectAsState -import androidx.compose.runtime.derivedStateOf -import androidx.compose.runtime.getValue -import androidx.compose.runtime.remember -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.hilt.navigation.compose.hiltViewModel -import com.texthip.thip.R -import com.texthip.thip.data.model.rooms.response.MyRoomResponse -import com.texthip.thip.ui.common.cards.CardItemRoom -import com.texthip.thip.ui.common.topappbar.DefaultTopAppBar -import com.texthip.thip.ui.group.done.viewmodel.GroupDoneUiState -import com.texthip.thip.ui.group.done.viewmodel.GroupDoneViewModel -import com.texthip.thip.ui.theme.ThipTheme -import com.texthip.thip.ui.theme.ThipTheme.colors -import com.texthip.thip.ui.theme.ThipTheme.typography -import com.texthip.thip.utils.rooms.RoomUtils - -@OptIn(ExperimentalMaterial3Api::class) -@Composable -fun GroupDoneScreen( - onRoomClick: (Int) -> Unit = {}, - onNavigateBack: () -> Unit = {}, - viewModel: GroupDoneViewModel = hiltViewModel() -) { - val uiState by viewModel.uiState.collectAsState() - - GroupDoneContent( - uiState = uiState, - onRoomClick = onRoomClick, - onNavigateBack = onNavigateBack, - onRefresh = { viewModel.refreshData() }, - onLoadMore = { viewModel.loadMoreExpiredRooms() } - ) -} - -@OptIn(ExperimentalMaterial3Api::class) -@Composable -fun GroupDoneContent( - uiState: GroupDoneUiState, - onRoomClick: (Int) -> Unit = {}, - onNavigateBack: () -> Unit = {}, - onRefresh: () -> Unit = {}, - onLoadMore: () -> Unit = {} -) { - val listState = rememberLazyListState() - - // 무한 스크롤을 위한 로직 - val shouldLoadMore by remember(uiState.canLoadMore, uiState.isLoadingMore) { - derivedStateOf { - val lastVisibleIndex = listState.layoutInfo.visibleItemsInfo.lastOrNull()?.index ?: 0 - val totalItems = listState.layoutInfo.totalItemsCount - uiState.canLoadMore && !uiState.isLoadingMore && totalItems > 0 && lastVisibleIndex >= totalItems - 3 - } - } - - LaunchedEffect(shouldLoadMore) { - if (shouldLoadMore) { - onLoadMore() - } - } - - Column( - Modifier.fillMaxSize() - ) { - DefaultTopAppBar( - title = stringResource(R.string.group_done_title), - onLeftClick = onNavigateBack, - ) - - PullToRefreshBox( - isRefreshing = uiState.isLoading, - onRefresh = onRefresh, - modifier = Modifier.fillMaxSize() - ) { - Column( - Modifier - .background(colors.Black) - .fillMaxSize() - .padding(horizontal = 20.dp) - ) { - LazyColumn( - state = listState, - verticalArrangement = Arrangement.spacedBy(20.dp), - contentPadding = PaddingValues(bottom = 20.dp), - modifier = Modifier - .fillMaxSize() - .padding(top = 16.dp) - ) { - item { - Text( - text = stringResource(R.string.group_done_user_comment, uiState.userName), - color = colors.White, - style = typography.menu_r400_s14_h24 - ) - } - - items(uiState.expiredRooms) { room -> - CardItemRoom( - title = room.roomName, - imageUrl = room.bookImageUrl, - participants = room.memberCount, - maxParticipants = room.recruitCount, // 모집 인원 수 사용 - isRecruiting = RoomUtils.isRecruitingByType(room.type), - isSecret = !room.isPublic, - onClick = { onRoomClick(room.roomId) } - ) - } - } - } - } - } -} - - -@Preview -@Composable -fun GroupDoneScreenPreview() { - ThipTheme { - GroupDoneContent( - uiState = GroupDoneUiState( - userName = "김독서", - expiredRooms = listOf( - MyRoomResponse( - roomId = 1, - roomName = "🌙 미드나이트 라이브러리 함께읽기", - bookImageUrl = "https://picsum.photos/300/400?1", - memberCount = 18, - recruitCount = 20, - endDate = "2025-01-31", - type = "EXPIRED", - isPublic = true - ), - MyRoomResponse( - roomId = 2, - roomName = "📚 현대문학 깊이읽기 모임", - bookImageUrl = "https://picsum.photos/300/400?2", - memberCount = 12, - recruitCount = 15, - endDate = "2024-12-28", - type = "EXPIRED", - isPublic = false - ), - MyRoomResponse( - roomId = 3, - roomName = "🔬 과학책으로 세상보기", - bookImageUrl = "https://picsum.photos/300/400?3", - memberCount = 25, - recruitCount = 30, - endDate = "2024-12-15", - type = "EXPIRED", - isPublic = true - ), - MyRoomResponse( - roomId = 4, - roomName = "✨ 철학 고전 탐구하기", - bookImageUrl = "https://picsum.photos/300/400?4", - memberCount = 10, - recruitCount = 12, - endDate = "2024-11-20", - type = "EXPIRED", - isPublic = true - ), - MyRoomResponse( - roomId = 5, - roomName = "🎨 예술과 문학의 만남", - bookImageUrl = "https://picsum.photos/300/400?5", - memberCount = 16, - recruitCount = 20, - endDate = "2024-10-31", - type = "EXPIRED", - isPublic = false - ) - ), - isLoading = false, - hasMore = true - ) - ) - } -} - diff --git a/app/src/main/java/com/texthip/thip/ui/group/done/viewmodel/GroupDoneUiState.kt b/app/src/main/java/com/texthip/thip/ui/group/done/viewmodel/GroupDoneUiState.kt deleted file mode 100644 index df299ec1..00000000 --- a/app/src/main/java/com/texthip/thip/ui/group/done/viewmodel/GroupDoneUiState.kt +++ /dev/null @@ -1,15 +0,0 @@ -package com.texthip.thip.ui.group.done.viewmodel - -import com.texthip.thip.data.model.rooms.response.MyRoomResponse - -data class GroupDoneUiState( - val expiredRooms: List = emptyList(), - val isLoading: Boolean = false, - val isLoadingMore: Boolean = false, - val hasMore: Boolean = true, - val userName: String = "", - val error: String? = null -) { - val hasContent: Boolean get() = expiredRooms.isNotEmpty() - val canLoadMore: Boolean get() = !isLoading && !isLoadingMore && hasMore -} \ No newline at end of file diff --git a/app/src/main/java/com/texthip/thip/ui/group/done/viewmodel/GroupDoneViewModel.kt b/app/src/main/java/com/texthip/thip/ui/group/done/viewmodel/GroupDoneViewModel.kt deleted file mode 100644 index f6cc44ac..00000000 --- a/app/src/main/java/com/texthip/thip/ui/group/done/viewmodel/GroupDoneViewModel.kt +++ /dev/null @@ -1,109 +0,0 @@ -package com.texthip.thip.ui.group.done.viewmodel - -import androidx.lifecycle.ViewModel -import androidx.lifecycle.viewModelScope -import com.texthip.thip.data.repository.RoomsRepository -import com.texthip.thip.ui.group.myroom.mock.RoomType -import dagger.hilt.android.lifecycle.HiltViewModel -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.StateFlow -import kotlinx.coroutines.flow.asStateFlow -import kotlinx.coroutines.launch -import javax.inject.Inject - -@HiltViewModel -class GroupDoneViewModel @Inject constructor( - private val repository: RoomsRepository -) : ViewModel() { - - private val _uiState = MutableStateFlow(GroupDoneUiState()) - val uiState: StateFlow = _uiState.asStateFlow() - - private var nextCursor: String? = null - private var isLastPage = false - private var isLoadingMore = false - private var isInitialLoading = false - - private fun updateState(update: (GroupDoneUiState) -> GroupDoneUiState) { - _uiState.value = update(_uiState.value) - } - - init { - loadInitialData() - } - - private fun loadInitialData() { - loadUserName() - loadExpiredRooms(reset = true) - } - - private fun loadUserName() { - viewModelScope.launch { - repository.getUserName() - .onSuccess { name -> - updateState { it.copy(userName = name) } - } - } - } - - fun loadExpiredRooms(reset: Boolean = false) { - // 중복 호출 방지 - if (reset) { - if (isInitialLoading) return - isInitialLoading = true - } else { - if (isLoadingMore || isLastPage) return - isLoadingMore = true - } - - viewModelScope.launch { - try { - if (reset) { - updateState { it.copy(isLoading = true, expiredRooms = emptyList(), hasMore = true) } - nextCursor = null - isLastPage = false - } - - repository.getMyRoomsByType(RoomType.EXPIRED.value, nextCursor) - .onSuccess { myRoomListResponse -> - myRoomListResponse?.let { response -> - val currentList = if (reset) emptyList() else uiState.value.expiredRooms - updateState { - it.copy( - expiredRooms = currentList + response.roomList, - error = null, - isLoadingMore = false, - hasMore = !response.isLast - ) - } - nextCursor = response.nextCursor - isLastPage = response.isLast - } ?: run { - // null 응답 시 더 이상 로드할 수 없음을 명시 - updateState { it.copy(hasMore = false, isLoadingMore = false) } - isLastPage = true - } - } - .onFailure { exception -> - updateState { it.copy(error = exception.message) } - } - } finally { - if (reset) { - updateState { it.copy(isLoading = false) } - isInitialLoading = false - } else { - updateState { it.copy(isLoadingMore = false) } - isLoadingMore = false - } - } - } - } - - fun loadMoreExpiredRooms() { - loadExpiredRooms(reset = false) - } - - fun refreshData() { - loadExpiredRooms(reset = true) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/texthip/thip/ui/group/screen/GroupScreen.kt b/app/src/main/java/com/texthip/thip/ui/group/screen/GroupScreen.kt index ce9e7f76..fc0661f5 100644 --- a/app/src/main/java/com/texthip/thip/ui/group/screen/GroupScreen.kt +++ b/app/src/main/java/com/texthip/thip/ui/group/screen/GroupScreen.kt @@ -51,7 +51,6 @@ import kotlinx.coroutines.delay @Composable fun GroupScreen( onNavigateToMakeRoom: () -> Unit = {}, - onNavigateToGroupDone: () -> Unit = {}, // 완료된 화면으로 이동 onNavigateToAlarm: () -> Unit = {}, // 알림 화면으로 이동 onNavigateToGroupSearch: () -> Unit = {}, // 검색 화면으로 이동 onNavigateToGroupMy: () -> Unit = {}, // 내 모임방 화면으로 이동 @@ -73,7 +72,6 @@ fun GroupScreen( uiState = uiState, hasUnreadNotifications = alarmUiState.hasUnreadNotifications, onNavigateToMakeRoom = onNavigateToMakeRoom, - onNavigateToGroupDone = onNavigateToGroupDone, onNavigateToAlarm = onNavigateToAlarm, onNavigateToGroupSearch = onNavigateToGroupSearch, onNavigateToGroupMy = onNavigateToGroupMy, @@ -96,7 +94,6 @@ fun GroupContent( uiState: GroupUiState, hasUnreadNotifications: Boolean = false, onNavigateToMakeRoom: () -> Unit = {}, - onNavigateToGroupDone: () -> Unit = {}, onNavigateToAlarm: () -> Unit = {}, onNavigateToGroupSearch: () -> Unit = {}, onNavigateToGroupMy: () -> Unit = {}, @@ -189,9 +186,7 @@ fun GroupContent( // 상단바 LogoTopAppBar( - leftIcon = painterResource(R.drawable.ic_done), hasNotification = hasUnreadNotifications, - onLeftClick = onNavigateToGroupDone, onRightClick = onNavigateToAlarm ) diff --git a/app/src/main/java/com/texthip/thip/ui/navigator/extensions/GroupNavigationExtensions.kt b/app/src/main/java/com/texthip/thip/ui/navigator/extensions/GroupNavigationExtensions.kt index 85a5ccec..ac301186 100644 --- a/app/src/main/java/com/texthip/thip/ui/navigator/extensions/GroupNavigationExtensions.kt +++ b/app/src/main/java/com/texthip/thip/ui/navigator/extensions/GroupNavigationExtensions.kt @@ -33,11 +33,6 @@ fun NavHostController.navigateToGroupMakeRoomWithBook( ) } -// 완료된 모임방 목록으로 이동 -fun NavHostController.navigateToGroupDone() { - navigate(GroupRoutes.Done) -} - // 모임방 검색 화면으로 이동 fun NavHostController.navigateToGroupSearch(viewAll: Boolean = false) { navigate(GroupRoutes.Search(viewAll = viewAll)) diff --git a/app/src/main/java/com/texthip/thip/ui/navigator/navigations/GroupNavigation.kt b/app/src/main/java/com/texthip/thip/ui/navigator/navigations/GroupNavigation.kt index 1d7b2abf..03a8ca83 100644 --- a/app/src/main/java/com/texthip/thip/ui/navigator/navigations/GroupNavigation.kt +++ b/app/src/main/java/com/texthip/thip/ui/navigator/navigations/GroupNavigation.kt @@ -10,7 +10,6 @@ import androidx.navigation.NavHostController import androidx.navigation.compose.composable import androidx.navigation.toRoute import com.texthip.thip.ui.feed.viewmodel.FeedViewModel -import com.texthip.thip.ui.group.done.screen.GroupDoneScreen import com.texthip.thip.ui.group.makeroom.screen.GroupMakeRoomScreen import com.texthip.thip.ui.group.makeroom.viewmodel.GroupMakeRoomViewModel import com.texthip.thip.ui.group.myroom.mock.RoomType @@ -33,7 +32,6 @@ import com.texthip.thip.ui.group.viewmodel.GroupViewModel import com.texthip.thip.ui.navigator.extensions.navigateToAlarm import com.texthip.thip.ui.navigator.extensions.navigateToBookDetail import com.texthip.thip.ui.navigator.extensions.navigateToFeedWrite -import com.texthip.thip.ui.navigator.extensions.navigateToGroupDone import com.texthip.thip.ui.navigator.extensions.navigateToGroupMakeRoom import com.texthip.thip.ui.navigator.extensions.navigateToGroupMy import com.texthip.thip.ui.navigator.extensions.navigateToGroupNote @@ -76,9 +74,6 @@ fun NavGraphBuilder.groupNavigation( onNavigateToMakeRoom = { navController.navigateToGroupMakeRoom() }, - onNavigateToGroupDone = { - navController.navigateToGroupDone() - }, onNavigateToAlarm = { navController.navigateToAlarm() }, @@ -145,18 +140,6 @@ fun NavGraphBuilder.groupNavigation( ) } - // Group Done 화면 - composable { - GroupDoneScreen( - onRoomClick = { roomId -> - navController.navigateToGroupRoom(roomId, isExpired = true) - }, - onNavigateBack = { - navigateBack() - } - ) - } - // Group My 화면 composable { val groupMyViewModel: GroupMyViewModel = hiltViewModel() diff --git a/app/src/main/java/com/texthip/thip/ui/navigator/routes/GroupRoutes.kt b/app/src/main/java/com/texthip/thip/ui/navigator/routes/GroupRoutes.kt index ddc9eb09..d67312eb 100644 --- a/app/src/main/java/com/texthip/thip/ui/navigator/routes/GroupRoutes.kt +++ b/app/src/main/java/com/texthip/thip/ui/navigator/routes/GroupRoutes.kt @@ -15,9 +15,6 @@ sealed class GroupRoutes : Routes() { val author: String ) : GroupRoutes() - @Serializable - data object Done : GroupRoutes() - @Serializable data class Search(val viewAll: Boolean = false) : GroupRoutes() From 3574a70d1a5464546f5305c06213dea2a14db5fd Mon Sep 17 00:00:00 2001 From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com> Date: Sun, 26 Oct 2025 15:09:53 +0900 Subject: [PATCH 14/14] =?UTF-8?q?[fix]:=20=EB=B2=84=EC=A0=84=20=EA=B4=80?= =?UTF-8?q?=EB=A6=AC=20=EC=88=98=EC=A0=95=20(#144)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index ee3060f2..8ffa2ccb 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -28,7 +28,7 @@ android { applicationId = "com.texthip.thip" minSdk = 29 targetSdk = 35 - versionCode = 9 + versionCode = 11 versionName = "1.3.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"