[UI] 로그인/ 스플래시/ 홈-내 구독 리스트 구현#41
Conversation
|
Caution Review failedThe pull request is closed. Walkthrough이 변경사항은 스플래시, 로그인, 닉네임 설정, 가입 완료, 내 구독 리스트 등 신규 UI 화면을 Jetpack Compose로 추가하고, 기존 패키지명 및 파일명을 일관되게 소문자로 정리하며, 공통 컴포넌트(버튼, 텍스트필드, 헤더 등)에 기능 확장 및 UI 개선을 적용합니다. 문자열 리소스와 테마 색상도 신규 화면에 맞게 추가되었습니다. Changes
Sequence Diagram(s)sequenceDiagram
participant User
participant App
participant UI
User->>App: 앱 실행
App->>UI: SplashScreen 표시
UI->>User: 로고 및 멘트 노출
User->>App: 로그인 선택
App->>UI: LoginScreen 표시
UI->>User: 카카오/구글 로그인 버튼 노출
User->>App: 닉네임 입력
App->>UI: SigninNicknameScreen 표시
UI->>User: 닉네임 입력 및 유효성 체크
User->>App: 가입 완료
App->>UI: SignupDoneScreen 표시
UI->>User: 가입 완료 메시지 및 시작 버튼 노출
sequenceDiagram
participant User
participant App
participant UI
User->>App: 내 구독 리스트 메뉴 진입
App->>UI: MySubscriptionScreen 표시
UI->>User: 구독자 리스트 및 구독/취소 버튼 노출
User->>UI: 구독/취소 버튼 클릭
UI->>App: 구독 상태 변경 및 토스트 메시지 표시
Assessment against linked issues
Assessment against linked issues: Out-of-scope changes
Possibly related PRs
Suggested labels
Suggested reviewers
Poem
📜 Recent review detailsConfiguration used: CodeRabbit UI 📒 Files selected for processing (5)
✨ Finishing Touches
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (25)
.idea/gradle.xml (1)
9-9: 환경 변수JAVA_HOME의존성 점검 필요
gradleJvm을#JAVA_HOME으로 지정하면 모든 팀원이 동일하게JAVA_HOME을 설정해 둔 전제하에만 정상 빌드됩니다.
IDE-내 JDK 버전을 명시(예:temporal_jdk_17)하거나.idea폴더를 VCS 제외 대상으로 두는 방안도 검토해 주세요.
설정 불일치로 인한 빌드 실패 가능성을 한 번 더 확인 부탁드립니다.app/src/main/java/com/texthip/thip/ui/mypage/mock/ReactionItem.kt (1)
3-7:type문자열은 Enum or sealed class로 명시적 타입화 고려
type: String필드는 오타나 invalid value 위험이 있습니다. enum class 혹은@StringDef/sealed class 활용 시 정적 분석·오토컴플리션 이점을 얻을 수 있습니다.app/src/main/java/com/texthip/thip/ui/mypage/component/RoleCard.kt (1)
118-135: 프리뷰 하드코딩 문자열은strings.xml추출 권장
"문학","문학가","예술","예술가"와 같이 UI 문구가 소스에 직접 노출되어 있습니다.
rbqks529 님은 기존 PR에서 문자열 리소스 분리를 선호한다고 학습되어 있습니다. 프리뷰라도 리소스 사용 시 다국어 테스트와 검색 편의성이 좋아집니다.app/src/main/java/com/texthip/thip/ui/mypage/mock/RoleItem.kt (1)
5-10:roleColor필드 네이밍
roleColor는Color타입이므로genreColor,roleColor모두Color접미사 제거 또는Color접두사 사용 등 일관된 네이밍 컨벤션을 고려해보세요.app/src/main/java/com/texthip/thip/ui/booksearch/screen/BookSearchScreen.kt (1)
17-17: 하드코딩된"Book Search Screen"문자열 리소스화 필요UI 문자열은
res/values/strings.xml로 이동하여 다국어 대응 및 테스트 용이성을 확보하세요.app/src/main/java/com/texthip/thip/ui/mypage/mock/BookItem.kt (1)
3-10: nullableimageUrl표기 개선 제안프로퍼티가 null 허용인 이유(썸네일 없는 도서 등)를 KDoc 주석에 명시하면 가독성이 향상됩니다.
app/src/main/java/com/texthip/thip/ui/mypage/viewmodel/SavedBookViewModel.kt (1)
17-83: 모크 데이터 다양성 개선 제안현재 모든 BookItem이 동일한 "이기적 유전자" 데이터를 사용하고 있어 테스트 시 구분이 어려울 수 있습니다. 다양한 책 정보를 사용하여 UI 테스트의 효과를 높이는 것을 고려해보세요.
- BookItem( - id = 2, - title = "이기적 유전자", - author = "리처드 도킨스", - publisher = "을유문화사", - imageUrl = null, - isSaved = true - ), + BookItem( + id = 2, + title = "사피엔스", + author = "유발 하라리", + publisher = "김영사", + imageUrl = null, + isSaved = true + ),app/src/main/java/com/texthip/thip/ui/mypage/screen/MypageNotificationEditScreen.kt (1)
68-72: 빈 onClick 핸들러 구현 필요InputTopAppBar의 onLeftClick과 onRightClick 핸들러가 비어있습니다. 네비게이션 로직이나 저장 로직을 구현해야 합니다.
실제 네비게이션 로직과 설정 저장 로직을 구현하는 데 도움이 필요하시면 알려주세요.
app/src/main/java/com/texthip/thip/ui/mypage/screen/MypageScreen.kt (1)
83-83: 메뉴 아이템 기능 구현이 필요합니다저장, 반응, 알림 설정, 가이드, 고객 서비스, 계정 삭제 메뉴의 onClick 핸들러들이 비어있습니다. 각 메뉴에 대응하는 네비게이션 로직을 구현해야 합니다.
각 메뉴 아이템의 네비게이션 로직 구현에 도움이 필요하시면 알려주세요.
Also applies to: 93-93, 117-117, 127-127, 137-137, 147-147
app/src/main/java/com/texthip/thip/ui/feed/screen/FeedScreen.kt (2)
28-33: LogoTopAppBar 구현이 필요합니다LogoTopAppBar의 onLeftClick과 onRightClick 핸들러가 비어있습니다. 친구 추가 기능과 알림 기능을 구현해야 합니다.
좌측 아이콘(친구 추가)과 우측 아이콘(알림)의 기능 구현에 도움이 필요하시면 알려주세요.
34-40: 컨텐츠 영역 구현이 필요합니다내부 Column이 완전히 비어있습니다. 피드 목록이나 다른 컨텐츠를 추가해야 합니다.
피드 목록 컴포넌트나 다른 컨텐츠 구현에 도움이 필요하시면 알려주세요.
app/src/main/java/com/texthip/thip/ui/mypage/screen/MypageSaveScreen.kt (1)
49-49: 뒤로가기 기능 구현이 필요합니다DefaultTopAppBar의 onLeftClick 핸들러가 비어있습니다. 네비게이션 뒤로가기 기능을 구현해야 합니다.
네비게이션 뒤로가기 로직 구현에 도움이 필요하시면 알려주세요.
app/src/main/java/com/texthip/thip/ui/signin/screen/SplashScreen.kt (1)
36-40: 아이콘 tint 처리 확인
tint = Unspecified를 사용하는 것이 의도된 것인지 확인해주세요. 만약 원본 아이콘 색상을 그대로 사용하려는 것이라면 적절하지만, 테마에 따라 색상이 변경되어야 한다면 명시적인 색상 값을 사용하는 것이 좋습니다.app/src/main/java/com/texthip/thip/ui/signin/screen/SigninNicknameScreen.kt (4)
1-1: 명명 규칙 개선 고려PR 목표에서 언급된 바와 같이, 닉네임 설정 화면은 실제로는 회원가입 프로세스의 일부입니다. 일관성을 위해
SignupNicknameScreen으로 이름을 변경하는 것을 고려해보세요.
29-36: 빈 콜백 함수들 처리
onLeftClick과onRightClick콜백이 비어있습니다. 향후 네비게이션 로직이 추가될 때까지 명시적으로 TODO 주석을 추가하거나 기본 동작을 구현하는 것을 고려해보세요.InputTopAppBar( title = stringResource(R.string.settings_1), isRightButtonEnabled = false, rightButtonName = stringResource(R.string.next), isLeftIconVisible = false, - onLeftClick = {}, - onRightClick = {} + onLeftClick = { /* TODO: 뒤로가기 로직 추가 */ }, + onRightClick = { /* TODO: 다음 단계 로직 추가 */ } )
51-58: TODO 주석 처리 계획FormTextFieldDefault 컴포넌트의 경고 메시지 처리 로직이 필요하다고 언급되어 있습니다. 이 기능이 중요한 사용자 경험 요소이므로 우선순위를 높여 처리하는 것이 좋겠습니다.
경고 메시지 처리 로직 구현을 도와드릴 수 있습니다. 별도 이슈를 생성하시겠습니까?
57-57: 코드 포맷팅 개선
containerColor매개변수 뒤에 공백이 누락되었습니다.- containerColor= colors.DarkGrey02 + containerColor = colors.DarkGrey02app/src/main/java/com/texthip/thip/ui/signin/screen/SigninDoneScreen.kt (4)
1-1: 명명 규칙 일관성 고려이 파일도 회원가입 프로세스의 완료 화면이므로
SignupDoneScreen으로 이름을 변경하는 것을 고려해보세요.
75-101: 프로필 이미지 처리 로직 개선프로필 이미지가 있는 경우와 없는 경우의 UI 처리가 중복되는 부분이 있습니다. 공통 로직을 추출하여 코드를 단순화할 수 있습니다.
- if (profileImageResId != null) { - Box( - modifier = Modifier - .size(54.dp) - .clip(CircleShape) - .border(width = 1.dp, color = colors.White, shape = CircleShape) - .background(colors.Black), - contentAlignment = Alignment.BottomCenter - ) { - Image( - painter = painterResource(id = profileImageResId), - contentDescription = null, - contentScale = ContentScale.Fit, - modifier = Modifier - .size(45.dp) - .offset(y = 2.dp) - ) - } - } else { - Box( - modifier = Modifier - .size(54.dp) - .clip(CircleShape) - .border(width = 0.5.dp, color = colors.Grey01, shape = CircleShape) - .background(Grey) - ) - } + ProfileImageBox(profileImageResId = profileImageResId)별도의 컴포넌트로 추출하여 재사용성을 높이는 것을 고려해보세요.
110-116: TODO 주석 처리 계획역할 색상 매핑 로직이 필요하다고 언급되어 있습니다. 현재 모든 역할이 동일한 색상(White)을 사용하고 있어 사용자 경험에 영향을 줄 수 있습니다.
역할별 색상 매핑 로직 구현을 도와드릴 수 있습니다. 별도 이슈를 생성하시겠습니까?
123-123: 빈 onClick 핸들러 처리"Start Thip" 버튼의 onClick 핸들러가 비어있습니다. 향후 메인 화면으로의 네비게이션 로직이 추가될 예정이라면 TODO 주석을 추가하는 것이 좋겠습니다.
- onClick = {}, + onClick = { /* TODO: 메인 화면으로 네비게이션 로직 추가 */ },app/src/main/java/com/texthip/thip/ui/feed/screen/MySubscriptionListScreen.kt (4)
42-127: 목 데이터 최적화 및 중복 제거목 데이터가 너무 많고 중복되는 항목들이 있습니다. 테스트 목적이라면 더 간결하고 다양한 데이터로 구성하는 것이 좋겠습니다.
- val initialmembers = listOf( - MySubscriptionData( - profileImageUrl = null, - nickname = "Thiper", - role = "칭호칭호", - roleColor = colors.Yellow, - subscriberCount = 100 - ), - // ... 중복되는 12개 항목 - ) + val initialmembers = listOf( + MySubscriptionData( + profileImageUrl = null, + nickname = "Thiper", + role = "칭호칭호", + roleColor = colors.Yellow, + subscriberCount = 100 + ), + MySubscriptionData( + profileImageUrl = null, + nickname = "thipthip", + role = "공식 인플루언서", + roleColor = colors.NeonGreen, + subscriberCount = 50 + ), + MySubscriptionData( + profileImageUrl = null, + nickname = "thip01", + role = "작가", + roleColor = colors.Purple, + subscriberCount = 75 + ) + )
131-136: 토스트 자동 해제 로직 개선LaunchedEffect를 사용한 토스트 자동 해제 로직이 적절하지만, 하드코딩된 2초 딜레이를 상수로 추출하는 것이 좋겠습니다.
+private const val TOAST_DURATION_MILLIS = 2000L + LaunchedEffect(toastMessage) { if (toastMessage != null) { - delay(2000) + delay(TOAST_DURATION_MILLIS) toastMessage = null } }
188-197: 구독 상태 변경 로직 최적화구독 상태 변경 시 전체 리스트를 순회하여 매핑하는 것보다 인덱스를 사용하여 직접 수정하는 것이 성능상 더 효율적입니다.
- onUnsubscribe = { nickname -> - members = members.map { - if (it.nickname == nickname) it.copy(isSubscribed = !it.isSubscribed) - else it - } - toastMessage = if (members.find { it.nickname == nickname }?.isSubscribed == true) { - "@$nickname 님을 구독했어요" - } else { - "@$nickname 님을 구독취소했어요" - } } + onUnsubscribe = { nickname -> + val index = members.indexOfFirst { it.nickname == nickname } + if (index != -1) { + val updatedMember = members[index].copy(isSubscribed = !members[index].isSubscribed) + members = members.toMutableList().apply { set(index, updatedMember) } + toastMessage = if (updatedMember.isSubscribed) { + stringResource(R.string.subscribe_success, nickname) + } else { + stringResource(R.string.subscribe_cancel_success, nickname) + } + } + }
197-198: 코드 포맷팅 개선인덴테이션과 줄바꿈이 일관되지 않습니다.
- } } - ) } + } + } + ) + }
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (35)
.idea/deploymentTargetSelector.xml(0 hunks).idea/gradle.xml(1 hunks)app/src/main/java/com/texthip/thip/ui/booksearch/screen/BookSearchScreen.kt(1 hunks)app/src/main/java/com/texthip/thip/ui/common/buttons/ActionMediumButton.kt(3 hunks)app/src/main/java/com/texthip/thip/ui/common/header/AuthorHeader.kt(5 hunks)app/src/main/java/com/texthip/thip/ui/common/header/ProfileBar.kt(3 hunks)app/src/main/java/com/texthip/thip/ui/common/modal/ToastWithDate.kt(2 hunks)app/src/main/java/com/texthip/thip/ui/feed/component/MySubscriptionList.kt(1 hunks)app/src/main/java/com/texthip/thip/ui/feed/mock/MySubscriptionData.kt(1 hunks)app/src/main/java/com/texthip/thip/ui/feed/screen/FeedScreen.kt(1 hunks)app/src/main/java/com/texthip/thip/ui/feed/screen/MySubscriptionListScreen.kt(1 hunks)app/src/main/java/com/texthip/thip/ui/mypage/component/MypageSaveBook.kt(2 hunks)app/src/main/java/com/texthip/thip/ui/mypage/component/MypageSaveFeed.kt(2 hunks)app/src/main/java/com/texthip/thip/ui/mypage/component/RoleCard.kt(1 hunks)app/src/main/java/com/texthip/thip/ui/mypage/component/SavedFeedCard.kt(4 hunks)app/src/main/java/com/texthip/thip/ui/mypage/mock/BookItem.kt(1 hunks)app/src/main/java/com/texthip/thip/ui/mypage/mock/FeedItem.kt(2 hunks)app/src/main/java/com/texthip/thip/ui/mypage/mock/ReactionItem.kt(1 hunks)app/src/main/java/com/texthip/thip/ui/mypage/mock/RoleItem.kt(1 hunks)app/src/main/java/com/texthip/thip/ui/mypage/screen/MypageEditScreen.kt(3 hunks)app/src/main/java/com/texthip/thip/ui/mypage/screen/MypageLeavethipCompleteScreen.kt(2 hunks)app/src/main/java/com/texthip/thip/ui/mypage/screen/MypageLeavethipScreen.kt(3 hunks)app/src/main/java/com/texthip/thip/ui/mypage/screen/MypageNotificationEditScreen.kt(2 hunks)app/src/main/java/com/texthip/thip/ui/mypage/screen/MypageReactionScreen.kt(3 hunks)app/src/main/java/com/texthip/thip/ui/mypage/screen/MypageSaveScreen.kt(3 hunks)app/src/main/java/com/texthip/thip/ui/mypage/screen/MypageScreen.kt(2 hunks)app/src/main/java/com/texthip/thip/ui/mypage/viewmodel/SavedBookViewModel.kt(1 hunks)app/src/main/java/com/texthip/thip/ui/mypage/viewmodel/SavedFeedViewModel.kt(6 hunks)app/src/main/java/com/texthip/thip/ui/navigator/MainNavHost.kt(1 hunks)app/src/main/java/com/texthip/thip/ui/signin/screen/LoginScreen.kt(1 hunks)app/src/main/java/com/texthip/thip/ui/signin/screen/SigninDoneScreen.kt(1 hunks)app/src/main/java/com/texthip/thip/ui/signin/screen/SigninNicknameScreen.kt(1 hunks)app/src/main/java/com/texthip/thip/ui/signin/screen/SplashScreen.kt(1 hunks)app/src/main/java/com/texthip/thip/ui/theme/Color.kt(3 hunks)app/src/main/res/values/strings.xml(1 hunks)
💤 Files with no reviewable changes (1)
- .idea/deploymentTargetSelector.xml
🧰 Additional context used
🧠 Learnings (12)
📓 Common learnings
Learnt from: rbqks529
PR: THIP-TextHip/THIP-Android#30
File: app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoomSmall.kt:108-112
Timestamp: 2025-07-01T07:19:10.981Z
Learning: The user rbqks529 prefers to extract hardcoded UI strings to StringResource files (strings.xml) rather than keeping them inline in Compose components, which is a good practice for maintainability and localization in Android development.
app/src/main/java/com/texthip/thip/ui/mypage/viewmodel/SavedBookViewModel.kt (1)
Learnt from: rbqks529
PR: THIP-TextHip/THIP-Android#30
File: app/src/main/java/com/texthip/thip/ui/myPage/groupPage/GroupPageScreen.kt:34-37
Timestamp: 2025-07-01T07:19:01.239Z
Learning: GroupPageScreen의 MyPageViewModel은 임시 ViewModel로, 현재는 프로토타입 단계이므로 오류 처리 등의 추가 기능은 나중에 구현 예정입니다.
app/src/main/java/com/texthip/thip/ui/mypage/component/SavedFeedCard.kt (1)
Learnt from: rbqks529
PR: THIP-TextHip/THIP-Android#30
File: app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoomSmall.kt:108-112
Timestamp: 2025-07-01T07:19:10.981Z
Learning: The user rbqks529 prefers to extract hardcoded UI strings to StringResource files (strings.xml) rather than keeping them inline in Compose components, which is a good practice for maintainability and localization in Android development.
app/src/main/java/com/texthip/thip/ui/mypage/viewmodel/SavedFeedViewModel.kt (1)
Learnt from: rbqks529
PR: THIP-TextHip/THIP-Android#30
File: app/src/main/java/com/texthip/thip/ui/myPage/groupPage/GroupPageScreen.kt:34-37
Timestamp: 2025-07-01T07:19:01.239Z
Learning: GroupPageScreen의 MyPageViewModel은 임시 ViewModel로, 현재는 프로토타입 단계이므로 오류 처리 등의 추가 기능은 나중에 구현 예정입니다.
app/src/main/java/com/texthip/thip/ui/common/header/ProfileBar.kt (1)
Learnt from: rbqks529
PR: THIP-TextHip/THIP-Android#30
File: app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoomSmall.kt:108-112
Timestamp: 2025-07-01T07:19:10.981Z
Learning: The user rbqks529 prefers to extract hardcoded UI strings to StringResource files (strings.xml) rather than keeping them inline in Compose components, which is a good practice for maintainability and localization in Android development.
app/src/main/java/com/texthip/thip/ui/signin/screen/SigninDoneScreen.kt (1)
Learnt from: rbqks529
PR: THIP-TextHip/THIP-Android#30
File: app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoomSmall.kt:108-112
Timestamp: 2025-07-01T07:19:10.981Z
Learning: The user rbqks529 prefers to extract hardcoded UI strings to StringResource files (strings.xml) rather than keeping them inline in Compose components, which is a good practice for maintainability and localization in Android development.
app/src/main/java/com/texthip/thip/ui/mypage/screen/MypageSaveScreen.kt (1)
Learnt from: rbqks529
PR: THIP-TextHip/THIP-Android#30
File: app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoomSmall.kt:108-112
Timestamp: 2025-07-01T07:19:10.981Z
Learning: The user rbqks529 prefers to extract hardcoded UI strings to StringResource files (strings.xml) rather than keeping them inline in Compose components, which is a good practice for maintainability and localization in Android development.
app/src/main/java/com/texthip/thip/ui/common/header/AuthorHeader.kt (1)
Learnt from: rbqks529
PR: THIP-TextHip/THIP-Android#30
File: app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoomSmall.kt:108-112
Timestamp: 2025-07-01T07:19:10.981Z
Learning: The user rbqks529 prefers to extract hardcoded UI strings to StringResource files (strings.xml) rather than keeping them inline in Compose components, which is a good practice for maintainability and localization in Android development.
app/src/main/java/com/texthip/thip/ui/signin/screen/SplashScreen.kt (1)
Learnt from: rbqks529
PR: THIP-TextHip/THIP-Android#30
File: app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoomSmall.kt:108-112
Timestamp: 2025-07-01T07:19:10.981Z
Learning: The user rbqks529 prefers to extract hardcoded UI strings to StringResource files (strings.xml) rather than keeping them inline in Compose components, which is a good practice for maintainability and localization in Android development.
app/src/main/java/com/texthip/thip/ui/signin/screen/SigninNicknameScreen.kt (1)
Learnt from: rbqks529
PR: THIP-TextHip/THIP-Android#30
File: app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoomSmall.kt:108-112
Timestamp: 2025-07-01T07:19:10.981Z
Learning: The user rbqks529 prefers to extract hardcoded UI strings to StringResource files (strings.xml) rather than keeping them inline in Compose components, which is a good practice for maintainability and localization in Android development.
app/src/main/java/com/texthip/thip/ui/signin/screen/LoginScreen.kt (1)
Learnt from: rbqks529
PR: THIP-TextHip/THIP-Android#30
File: app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoomSmall.kt:108-112
Timestamp: 2025-07-01T07:19:10.981Z
Learning: The user rbqks529 prefers to extract hardcoded UI strings to StringResource files (strings.xml) rather than keeping them inline in Compose components, which is a good practice for maintainability and localization in Android development.
app/src/main/res/values/strings.xml (1)
Learnt from: rbqks529
PR: THIP-TextHip/THIP-Android#30
File: app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoomSmall.kt:108-112
Timestamp: 2025-07-01T07:19:10.981Z
Learning: The user rbqks529 prefers to extract hardcoded UI strings to StringResource files (strings.xml) rather than keeping them inline in Compose components, which is a good practice for maintainability and localization in Android development.
🧬 Code Graph Analysis (10)
app/src/main/java/com/texthip/thip/ui/mypage/screen/MypageNotificationEditScreen.kt (1)
app/src/main/java/com/texthip/thip/ui/common/topappbar/InputTopAppBar.kt (1)
InputTopAppBar(25-69)
app/src/main/java/com/texthip/thip/ui/feed/screen/FeedScreen.kt (1)
app/src/main/java/com/texthip/thip/ui/common/topappbar/LogoTopAppBar.kt (1)
LogoTopAppBar(24-72)
app/src/main/java/com/texthip/thip/ui/mypage/screen/MypageEditScreen.kt (1)
app/src/main/java/com/texthip/thip/ui/common/topappbar/InputTopAppBar.kt (1)
InputTopAppBar(25-69)
app/src/main/java/com/texthip/thip/ui/mypage/screen/MypageSaveScreen.kt (1)
app/src/main/java/com/texthip/thip/ui/common/topappbar/DefaultTopAppBar.kt (1)
DefaultTopAppBar(23-66)
app/src/main/java/com/texthip/thip/ui/mypage/screen/MypageScreen.kt (1)
app/src/main/java/com/texthip/thip/ui/common/topappbar/LeftNameTopAppBar.kt (1)
LeftNameTopAppBar(26-73)
app/src/main/java/com/texthip/thip/ui/mypage/screen/MypageLeavethipCompleteScreen.kt (1)
app/src/main/java/com/texthip/thip/ui/common/topappbar/DefaultTopAppBar.kt (1)
DefaultTopAppBar(23-66)
app/src/main/java/com/texthip/thip/ui/feed/component/MySubscriptionList.kt (1)
app/src/main/java/com/texthip/thip/ui/common/header/AuthorHeader.kt (1)
AuthorHeader(36-99)
app/src/main/java/com/texthip/thip/ui/mypage/screen/MypageLeavethipScreen.kt (1)
app/src/main/java/com/texthip/thip/ui/common/topappbar/DefaultTopAppBar.kt (1)
DefaultTopAppBar(23-66)
app/src/main/java/com/texthip/thip/ui/signin/screen/LoginScreen.kt (1)
app/src/main/java/com/texthip/thip/ui/common/buttons/ActionMediumButton.kt (1)
ActionMediumButton(31-79)
app/src/main/java/com/texthip/thip/ui/mypage/screen/MypageReactionScreen.kt (1)
app/src/main/java/com/texthip/thip/ui/common/topappbar/DefaultTopAppBar.kt (1)
DefaultTopAppBar(23-66)
🔇 Additional comments (59)
app/src/main/java/com/texthip/thip/ui/mypage/mock/ReactionItem.kt (1)
1-1: 패키지명 통일 반영 👍
mypage소문자 패키지로 일관성 있게 수정된 점 확인했습니다. IDE-level 경로 충돌 이슈 방지 측면에서 적절한 수정입니다.app/src/main/java/com/texthip/thip/ui/mypage/component/RoleCard.kt (1)
1-1: 패키지 경로 소문자화 반영 👍
다른mypage모듈과 통일되었습니다. 추가 조치 필요 없습니다.app/src/main/java/com/texthip/thip/ui/mypage/mock/RoleItem.kt (1)
1-1: 패키지 경로 수정 확인 – 동일 모듈 간 import 오류 예방 차원에서 적절합니다.app/src/main/java/com/texthip/thip/ui/booksearch/screen/BookSearchScreen.kt (2)
1-1: 패키지명 camelCase → 소문자 일원화 확인
booksearch로 변경되어 네비게이션 그래프 import 충돌 가능성이 제거되었습니다.
1-1: 레거시 CamelCase 패키지(ui.bookSearch,ui.myPage) 사용 흔적 없음 확인
소문자 기반의ui.booksearch및ui.mypage패키지 외에 대소문자 혼용된 레거시 경로는 발견되지 않았습니다. 별도 수정 사항이 없습니다.app/src/main/java/com/texthip/thip/ui/mypage/mock/BookItem.kt (1)
1-1: 패키지 경로 소문자 정규화 OK
다른BookItem참조부와 충돌 없이 빌드될 것으로 보입니다.app/src/main/java/com/texthip/thip/ui/mypage/component/MypageSaveFeed.kt (1)
1-1: 패키지명 표준화 변경사항 승인패키지명을
myPage에서mypage로 통일한 변경이 일관성 있게 적용되었습니다. 해당 import 구문도 함께 업데이트되어 좋습니다.Also applies to: 10-10
app/src/main/java/com/texthip/thip/ui/mypage/component/MypageSaveBook.kt (1)
1-1: 패키지명 표준화 변경사항 승인패키지명을
myPage에서mypage로 통일한 변경이 일관성 있게 적용되었습니다. 해당 import 구문도 함께 업데이트되어 좋습니다.Also applies to: 10-10
app/src/main/java/com/texthip/thip/ui/navigator/MainNavHost.kt (1)
7-7: 패키지명 표준화 변경사항 승인import 구문에서 패키지명을
bookSearch에서booksearch로,myPage에서mypage로 통일한 변경이 일관성 있게 적용되었습니다.Also applies to: 10-10
app/src/main/java/com/texthip/thip/ui/mypage/mock/FeedItem.kt (1)
1-1: 패키지명 표준화 및 타입 개선 변경사항 승인패키지명을
myPage에서mypage로 통일한 변경과timeAgo프로퍼티 타입을Int에서String으로 변경한 것이 좋습니다. 문자열 타입 사용으로 "15시간 전"과 같이 더 직관적인 시간 표시가 가능해집니다.Also applies to: 10-10
app/src/main/java/com/texthip/thip/ui/mypage/viewmodel/SavedBookViewModel.kt (1)
1-1: 패키지명 표준화 변경사항 승인패키지명을
myPage에서mypage로 통일한 변경이 일관성 있게 적용되었습니다. 해당 import 구문도 함께 업데이트되어 좋습니다.Also applies to: 4-4
app/src/main/java/com/texthip/thip/ui/mypage/viewmodel/SavedFeedViewModel.kt (3)
1-1: 패키지명 일관성 개선 확인
myPage에서mypage로 패키지명 변경이 올바르게 적용되었습니다. 프로젝트 전체의 명명 일관성을 위한 좋은 변경사항입니다.
5-5: import 경로 업데이트 확인FeedItem import 경로가 패키지명 변경에 맞춰 올바르게 업데이트되었습니다.
19-19: 시간 표시 형식 개선
timeAgo속성이 Int에서 String으로 변경되어 더 유연한 시간 표시가 가능해졌습니다. "15시간 전"과 같은 형태로 직관적이고 사용자 친화적입니다.Also applies to: 33-33, 48-48, 63-63, 78-78
app/src/main/java/com/texthip/thip/ui/mypage/component/SavedFeedCard.kt (3)
1-1: 패키지명 일관성 개선 확인패키지명이
myPage에서mypage로 정확히 변경되었습니다.
26-26: import 경로 업데이트 확인FeedItem import 경로가 새로운 패키지 구조에 맞춰 올바르게 업데이트되었습니다.
129-129: Preview 데이터 업데이트 확인Preview 컴포넌트에서
timeAgo값이 String 타입으로 변경되어 FeedItem 데이터 클래스 변경사항과 일치합니다.Also applies to: 145-145
app/src/main/java/com/texthip/thip/ui/theme/Color.kt (3)
27-27: 카카오 브랜드 색상 추가 확인카카오 로그인을 위한 표준 노란색이 추가되었습니다. 색상 값
0xFFFEE500은 카카오 브랜드 가이드라인에 맞는 표준 색상입니다.
65-65: ThipColors 데이터 클래스 업데이트 확인
KakaoYellow속성이ThipColors데이터 클래스에 올바르게 추가되었습니다.
101-101: 기본 색상 테마 초기화 확인
defaultThipColors에KakaoYellow초기화가 추가되어 테마 시스템에서 정상적으로 사용 가능합니다.app/src/main/java/com/texthip/thip/ui/common/header/ProfileBar.kt (3)
43-43: 시간 표시 형식 개선
hoursAgo파라미터 타입이Int에서String으로 변경되어 더 유연한 시간 표시가 가능해졌습니다. 기본값도 빈 문자열로 적절히 변경되었습니다.
110-110: UI 표시 로직 업데이트 확인시간 표시 부분이 문자열을 직접 표시하도록 변경되어 새로운 파라미터 타입과 일치합니다.
135-135: Preview 업데이트 확인Preview 컴포넌트에서
hoursAgo값이 String 타입으로 올바르게 업데이트되었습니다.app/src/main/java/com/texthip/thip/ui/mypage/screen/MypageEditScreen.kt (4)
1-1: 패키지명 일관성 개선 확인패키지명이
myPage에서mypage로 정확히 변경되었습니다.
27-28: import 경로 업데이트 확인RoleCard와 RoleItem의 import 경로가 새로운 패키지 구조에 맞춰 올바르게 업데이트되었습니다.
67-77: UI 구조 단순화 개선Scaffold를 제거하고 Column으로 변경하여 UI 구조가 단순화되었습니다. 배경색이 명시적으로 설정되고 InputTopAppBar가 올바르게 배치되었습니다. 이는 다른 mypage 화면들과 일관된 구조를 제공합니다.
9-9: 필요한 import 추가 확인
fillMaxSizeimport가 새로운 UI 구조에 맞춰 추가되었습니다.app/src/main/java/com/texthip/thip/ui/common/modal/ToastWithDate.kt (3)
28-28: 옵션 매개변수 추가가 적절합니다date 매개변수를 nullable String으로 변경하고 기본값을 null로 설정한 것은 컴포넌트의 유연성을 높이는 좋은 개선입니다.
44-44: 조건부 레이아웃 배치가 올바릅니다date가 null인 경우 Arrangement.Start를 사용하여 메시지만 왼쪽 정렬하고, date가 있는 경우 SpaceBetween을 사용하는 로직이 적절합니다.
51-57: 조건부 렌더링이 올바르게 구현되었습니다date가 null이 아닌 경우에만 Text 컴포넌트를 렌더링하는 로직이 정확히 구현되어 있습니다.
app/src/main/java/com/texthip/thip/ui/mypage/screen/MypageNotificationEditScreen.kt (2)
1-1: 패키지명 통일이 좋습니다myPage에서 mypage로 패키지명을 통일한 것은 프로젝트 전반의 일관성을 높이는 좋은 개선입니다.
63-73: UI 구조 개선이 적절합니다Scaffold를 제거하고 Column을 사용하여 명시적으로 배경색과 레이아웃을 설정한 것은 다른 화면들과 일관성을 유지하는 좋은 접근입니다.
app/src/main/java/com/texthip/thip/ui/mypage/screen/MypageScreen.kt (2)
40-49: UI 구조 리팩토링이 적절합니다Scaffold를 제거하고 Column을 사용하여 명시적으로 배경색과 레이아웃을 설정한 것은 일관성 있는 접근입니다.
157-160: 로그아웃 다이얼로그 구현이 잘되어 있습니다로그아웃 메뉴의 onClick 핸들러가 올바르게 구현되어 있고, 다이얼로그 표시 로직도 적절합니다.
app/src/main/java/com/texthip/thip/ui/feed/screen/FeedScreen.kt (1)
23-27: UI 구조 개선이 적절합니다기본 플레이스홀더에서 실제 스크린 구조로 개선한 것은 좋은 진전입니다. Column을 사용하여 일관된 레이아웃 패턴을 따르고 있습니다.
app/src/main/java/com/texthip/thip/ui/mypage/screen/MypageSaveScreen.kt (3)
1-1: 패키지명 통일이 좋습니다myPage에서 mypage로 패키지명을 통일한 것은 프로젝트 전반의 일관성을 높이는 좋은 개선입니다.
42-50: UI 구조 개선이 적절합니다Scaffold를 제거하고 Column을 사용하여 명시적으로 배경색과 레이아웃을 설정한 것은 다른 화면들과 일관성을 유지하는 좋은 접근입니다.
55-93: 탭 기능이 잘 구현되어 있습니다TabRow를 사용한 피드/북 탭 전환 기능이 잘 구현되어 있고, 선택된 탭에 따라 적절한 컨텐츠를 표시하는 로직도 올바릅니다.
app/src/main/java/com/texthip/thip/ui/mypage/screen/MypageLeavethipCompleteScreen.kt (2)
1-1: 패키지명 수정 승인패키지명이
com.texthip.thip.ui.myPage.screen에서com.texthip.thip.ui.mypage.screen으로 올바르게 수정되었습니다. 일관성 있는 네이밍 컨벤션을 위한 좋은 변경입니다.
31-40: UI 구조 리팩토링 승인
Scaffold에서Column으로의 리팩토링이 다른 mypage 화면들과 일관되게 적용되었습니다. 명시적인 배경색과 크기 설정으로 더 직관적인 레이아웃 구조를 가지게 되었습니다.app/src/main/java/com/texthip/thip/ui/feed/mock/MySubscriptionData.kt (1)
6-13: 데이터 클래스 구조 승인구독 기능을 위한 데이터 클래스가 잘 설계되었습니다:
- 프로필 이미지의 nullable 처리가 적절합니다
- 역할 색상을 위한
Color타입 사용이 적절합니다- 구독 상태를 변경 가능한
var로 선언하여 UI에서 상태 변경을 지원합니다app/src/main/java/com/texthip/thip/ui/mypage/screen/MypageReactionScreen.kt (3)
1-1: 패키지명 수정 승인패키지명이 일관되게
com.texthip.thip.ui.mypage.screen으로 수정되었습니다.
27-27: import 경로 수정 승인
ReactionItem의 import 경로가 새로운 패키지명에 맞게 업데이트되었습니다.
59-67: 일관된 UI 구조 리팩토링 승인다른 mypage 화면들과 동일한 패턴으로
Scaffold에서Column구조로 리팩토링되었습니다. 일관성 있는 아키텍처 변경입니다.app/src/main/res/values/strings.xml (3)
161-164: 스플래시 화면 문자열 리소스 추가 승인스플래시 화면을 위한 문자열 리소스가 적절히 추가되었습니다. 브랜드 메시지를 잘 표현하고 있습니다.
165-175: 로그인 플로우 문자열 리소스 추가 승인로그인 플로우의 모든 단계를 지원하는 문자열 리소스가 체계적으로 추가되었습니다. 사용자 이름 포맷팅(
%1$s)도 올바르게 구현되었습니다.
176-180: 피드 기능 문자열 리소스 추가 승인구독 관련 기능을 위한 문자열 리소스가 적절히 추가되었습니다. 동적 개수 표시를 위한 포맷팅도 올바르게 구현되었습니다.
app/src/main/java/com/texthip/thip/ui/signin/screen/LoginScreen.kt (3)
34-41: 로그인 화면 레이아웃 구조 승인로그인 화면의 레이아웃이 깔끔하게 구현되었습니다. 중앙 정렬과 적절한 패딩으로 사용자 친화적인 인터페이스를 제공합니다.
48-57: 브랜드 메시지 스타일링 승인
buildAnnotatedString을 사용하여 "띱!" 텍스트에 보라색 강조 처리를 적용한 것이 브랜드 아이덴티티를 잘 표현합니다. 문자열 리소스 사용도 일관되게 적용되었습니다.
59-79: 로그인 버튼 구현 승인카카오와 구글 로그인 버튼이 일관된 스타일로 잘 구현되었습니다. 각각의 브랜드 컬러(카카오 옐로우, 구글 화이트)를 적절히 사용했고, 문자열 리소스도 올바르게 적용되었습니다. 초기 UI 구현 단계에서 빈 onClick 핸들러는 적절합니다.
app/src/main/java/com/texthip/thip/ui/signin/screen/SplashScreen.kt (1)
27-53: 스플래시 화면 구현 잘 되었습니다스플래시 화면의 구조와 레이아웃이 잘 구현되었습니다. 문자열 리소스 사용과 테마 적용도 적절합니다.
app/src/main/java/com/texthip/thip/ui/feed/component/MySubscriptionList.kt (1)
18-49: 구독 리스트 컴포넌트 구현 잘 되었습니다리스트 구조, 구분선 처리, 그리고 조건부 버튼 텍스트 렌더링이 잘 구현되었습니다. 문자열 리소스 사용도 적절합니다.
app/src/main/java/com/texthip/thip/ui/common/header/AuthorHeader.kt (2)
43-43: 옵셔널 파라미터 추가 잘 되었습니다
buttonWidth파라미터를 옵셔널로 추가하여 재사용성을 높인 것이 좋습니다.
87-93: 조건부 Modifier 적용 잘 되었습니다
buttonWidth가 null이 아닐 때만 크기를 설정하는 조건부 로직이 잘 구현되었습니다. 높이도 함께 설정하여 일관된 버튼 크기를 유지하는 것이 좋습니다.app/src/main/java/com/texthip/thip/ui/common/buttons/ActionMediumButton.kt (2)
35-36: 아이콘 커스터마이징 파라미터 추가 잘 되었습니다
iconSize와iconTint파라미터를 추가하여 아이콘의 크기와 색상을 유연하게 조정할 수 있게 된 것이 좋습니다. 기본값 설정도 적절합니다.
60-62: 아이콘 스타일 적용 잘 되었습니다추가된 파라미터들이 아이콘에 적절히 적용되어 있습니다.
Modifier.size()를 사용하여 명확하게 크기를 설정한 것이 좋습니다.app/src/main/java/com/texthip/thip/ui/mypage/screen/MypageLeavethipScreen.kt (3)
1-1: 패키지명 수정 잘 되었습니다
myPage에서mypage로 패키지명을 수정하여 일관성을 유지한 것이 좋습니다.
47-56: Scaffold 제거 리팩토링 잘 되었습니다
Scaffold를 제거하고Column을 사용하여 레이아웃을 명시적으로 관리하는 것이 더 명확하고 직관적입니다. 배경색과 패딩 설정도 적절합니다.
119-144: 하단 버튼 레이아웃 구현 잘 되었습니다하단 버튼의 활성화/비활성화 상태에 따른 배경색 변경과 클릭 이벤트 처리가 잘 구현되었습니다. 버튼 내부의 아이콘과 텍스트 배치도 적절합니다.
| onButtonClick = { | ||
| onUnsubscribe(member.nickname) | ||
| } |
There was a problem hiding this comment.
🛠️ Refactor suggestion
사용자 식별 방법 검토
구독 취소 시 member.nickname만으로 사용자를 식별하는 것이 적절한지 확인해주세요. 닉네임은 중복될 수 있으므로, 고유한 식별자(ID)를 사용하는 것이 더 안전할 수 있습니다.
🤖 Prompt for AI Agents
In app/src/main/java/com/texthip/thip/ui/feed/component/MySubscriptionList.kt
around lines 36 to 38, the code uses member.nickname to identify the user for
unsubscription, which may not be unique. Change the code to use a unique
identifier such as member.id instead of member.nickname when calling
onUnsubscribe to ensure correct user identification.
| "@$nickname 님을 구독했어요" | ||
| } else { | ||
| "@$nickname 님을 구독취소했어요" | ||
| } } |
There was a problem hiding this comment.
🛠️ Refactor suggestion
하드코딩된 토스트 메시지 개선
사용자 선호도에 따라 토스트 메시지를 문자열 리소스로 추출해야 합니다.
strings.xml에 다음 리소스를 추가하세요:
<string name="subscribe_success">@%s 님을 구독했어요</string>
<string name="subscribe_cancel_success">@%s 님을 구독취소했어요</string>그리고 코드를 다음과 같이 수정하세요:
- toastMessage = if (members.find { it.nickname == nickname }?.isSubscribed == true) {
- "@$nickname 님을 구독했어요"
- } else {
- "@$nickname 님을 구독취소했어요"
- }
+ toastMessage = if (members.find { it.nickname == nickname }?.isSubscribed == true) {
+ context.getString(R.string.subscribe_success, nickname)
+ } else {
+ context.getString(R.string.subscribe_cancel_success, nickname)
+ }🤖 Prompt for AI Agents
In app/src/main/java/com/texthip/thip/ui/feed/screen/MySubscriptionListScreen.kt
around lines 194 to 197, the toast messages are hardcoded in Korean. To support
user preferences and localization, move these messages to strings.xml by adding
subscribe_success and subscribe_cancel_success string resources with
placeholders for the nickname. Then, update the Kotlin code to use
context.getString(R.string.subscribe_success, nickname) and
context.getString(R.string.subscribe_cancel_success, nickname) instead of
hardcoded strings.
|
일단 위의 해결사항부터 남기자면 먼저 FormTextFieldDefault에는 에러 메세지를 처리하는 로직이 없고, 해당 로직은 WarningTextField에 있는데 여기에는 글자 수를 인식하는 로직이 없어서 이 부분을 추가하시면 될거 같고 두번째로 파일명 같은 경우에는 개인적으로는 signup이 맞는거 같아요 |
rbqks529
left a comment
There was a problem hiding this comment.
고생하셨습니다. 기존의 컴포넌트를 재 활용한거랑 scaffold -> column으로 바꾼 코드도 확인했고 screen도 확인 완료 했습니다!
| bottomText = stringResource(R.string.influencer), | ||
| showSubscriberInfo = false, | ||
| hoursAgo = 7 | ||
| hoursAgo = "10시간 전" |
There was a problem hiding this comment.
이거 아마 서버에서는 숫자만 보내줄 듯 한디 기존 Int 에서 String으로 바꾸신 이유가 있을까요?
There was a problem hiding this comment.
이거 제가 바꿔달라고 해써요 서버 api 명세서 보니까 string 통으로 보내주는거같길래
| import androidx.compose.ui.graphics.painter.Painter | ||
|
|
||
| data class MySubscriptionData( | ||
| val profileImageUrl: Painter? = null, |
There was a problem hiding this comment.
이거 이미지 URL고 Painter보다는 Int나 서버에서 받아오는거면 String이 좋을거 같아요
There was a problem hiding this comment.
넹 요런거 좀 여러개 있는데, drawable 파일에 있는 이미지로 테스트 가능하게 하려고 임의로 Painter 해두었습니닷 서버 연동시에 전부 String으로 변경할 예정이엇습니닷
| .padding(bottom = 12.dp) | ||
| ) | ||
| //TODO 컴포넌트 수정필요 -> 경고 메시지 처리 | ||
| FormTextFieldDefault( |
There was a problem hiding this comment.
이전에 코멘트 남기긴 했는데 WarningTextField를 수정하는게 좋을 거 같아요
There was a problem hiding this comment.
앗 그르네요 해당 컴포넌트 제가 수정해서 사용하겠습니닷
Nico1eKim
left a comment
There was a problem hiding this comment.
signin_ ~~은 .. 음 .. 저는 로직이 회원가입인거같아서 signup으로 통일하는게 좋을거같긴 한데 나중에 피그마보면서 찾을 때 안헷갈릴거같으면 바꾸면 좋을거가타용 ~
새로 구현하느라 수고했슙니당 🫡
| bottomText = stringResource(R.string.influencer), | ||
| showSubscriberInfo = false, | ||
| hoursAgo = 7 | ||
| hoursAgo = "10시간 전" |
There was a problem hiding this comment.
이거 제가 바꿔달라고 해써요 서버 api 명세서 보니까 string 통으로 보내주는거같길래
| ) { innerPadding -> | ||
| Column( | ||
| Modifier | ||
| .background(colors.Black) |
There was a problem hiding this comment.
배경화면 검정색으로 되는건 제가 theme에 적용해놔서 설정 안해도 됩니닷 !
| import com.texthip.thip.ui.theme.ThipTheme.typography | ||
|
|
||
| @Composable | ||
| fun SigninDoneScreen(nickname: String, profileImageResId: Int?, role: String) { |
There was a problem hiding this comment.
이 인자들은 각각 받는것보다 data 구조 만들어서 빼서 쓰는게 좋을 것 같아용 ~
There was a problem hiding this comment.
엇 항목이 세개뿐이라 data class를 굳이 만들어야할까 싶어서 인자로 받았는데,
혹시 항목 개수 상관없이 무조건 data class로 묶는 편인가요??
아니면 상황별로 다르게 판단하시나요? 그렇다면 그 기준이 궁금합니닷
There was a problem hiding this comment.
항목 개수랑 상관없이 서버에서 받아오는 데이터면 저는 무조건 data class로 묶는 편입니닷! 그래야 나중에 api 연결할 때 이미 data class로 작업해둔것들은 고려할게 적어져서 리팩할때 편하더라구용
| <string name="settings_2">설정 2/2</string> | ||
| <string name="nickname">닉네임 (필수)</string> | ||
| <string name="nickname_condition">한글/영어/숫자로 구성</string> | ||
| <string name="hello_user">안녕하세요, %1$s님</string> |
There was a problem hiding this comment.
앗 요건 제가 피그마 보고 추출하면서 착각한 것 같아유
인자 여러개인 줄 알고!!
문제는 없지만 $s로 바꿔놓겟숩니당
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (6)
app/src/main/java/com/texthip/thip/ui/signin/screen/SignupNicknameScreen.kt (2)
51-63: 서버 연동 로직을 개선해주세요.하드코딩된 "test" 닉네임 검증 로직은 프로토타입 단계에서는 이해할 수 있지만, 향후 서버 연동 시 더 현실적인 검증 로직으로 대체되어야 합니다.
더 현실적인 닉네임 검증 로직(중복 검사, 금지어 검사 등)을 구현하는 데 도움이 필요하시면 말씀해 주세요.
97-101: Preview 함수명도 함께 수정해주세요.메인 함수명 변경 시 Preview 함수명도 일관성 있게 수정해주세요.
-private fun SigninNicknameScreenPrev() { - SigninNicknameScreen() +private fun SignupNicknameScreenPrev() { + SignupNicknameScreen()app/src/main/java/com/texthip/thip/ui/signin/screen/SignupDoneScreen.kt (3)
35-36: 불필요한 빈 줄을 제거해주세요.코드 가독성을 위해 불필요한 빈 줄을 제거하는 것이 좋습니다.
- - @Composable
115-121: TODO 코멘트를 처리해주세요.역할(role)에 따른 색상 매핑 로직이 필요합니다. 이를 처리할 계획이 있으신지 확인해 주세요.
역할별 색상 매핑 로직을 구현하는 데 도움이 필요하시면 말씀해 주세요.
131-134: 불필요한 빈 줄을 제거해주세요.코드 구조를 정리해주세요.
} - } - }app/src/main/java/com/texthip/thip/ui/common/forms/WarningTextField.kt (1)
45-49: 주석 처리된 코드를 제거해주세요.더 이상 사용하지 않는 주석 처리된 코드를 제거하여 코드를 정리해주세요.
- //var text by rememberSaveable { mutableStateOf("") } val myStyle = typography.menu_r400_s14_h24.copy(lineHeight = 14.sp) - - //val displayText = if (showLimit && text.length > limit) text.substring(0, limit) else text -
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (6)
app/src/main/java/com/texthip/thip/ui/common/forms/WarningTextField.kt(4 hunks)app/src/main/java/com/texthip/thip/ui/mypage/screen/MypageEditScreen.kt(3 hunks)app/src/main/java/com/texthip/thip/ui/signin/mock/SignupUserInfo.kt(1 hunks)app/src/main/java/com/texthip/thip/ui/signin/screen/SignupDoneScreen.kt(1 hunks)app/src/main/java/com/texthip/thip/ui/signin/screen/SignupNicknameScreen.kt(1 hunks)app/src/main/res/values/strings.xml(1 hunks)
✅ Files skipped from review due to trivial changes (1)
- app/src/main/java/com/texthip/thip/ui/signin/mock/SignupUserInfo.kt
🚧 Files skipped from review as they are similar to previous changes (2)
- app/src/main/java/com/texthip/thip/ui/mypage/screen/MypageEditScreen.kt
- app/src/main/res/values/strings.xml
🧰 Additional context used
🧠 Learnings (4)
📓 Common learnings
Learnt from: rbqks529
PR: THIP-TextHip/THIP-Android#30
File: app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoomSmall.kt:108-112
Timestamp: 2025-07-01T07:19:10.981Z
Learning: The user rbqks529 prefers to extract hardcoded UI strings to StringResource files (strings.xml) rather than keeping them inline in Compose components, which is a good practice for maintainability and localization in Android development.
Learnt from: rbqks529
PR: THIP-TextHip/THIP-Android#30
File: app/src/main/java/com/texthip/thip/ui/myPage/groupPage/GroupPageScreen.kt:34-37
Timestamp: 2025-07-01T07:19:01.239Z
Learning: GroupPageScreen의 MyPageViewModel은 임시 ViewModel로, 현재는 프로토타입 단계이므로 오류 처리 등의 추가 기능은 나중에 구현 예정입니다.
app/src/main/java/com/texthip/thip/ui/signin/screen/SignupNicknameScreen.kt (1)
Learnt from: rbqks529
PR: THIP-TextHip/THIP-Android#30
File: app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoomSmall.kt:108-112
Timestamp: 2025-07-01T07:19:10.981Z
Learning: The user rbqks529 prefers to extract hardcoded UI strings to StringResource files (strings.xml) rather than keeping them inline in Compose components, which is a good practice for maintainability and localization in Android development.
app/src/main/java/com/texthip/thip/ui/signin/screen/SignupDoneScreen.kt (1)
Learnt from: rbqks529
PR: THIP-TextHip/THIP-Android#30
File: app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoomSmall.kt:108-112
Timestamp: 2025-07-01T07:19:10.981Z
Learning: The user rbqks529 prefers to extract hardcoded UI strings to StringResource files (strings.xml) rather than keeping them inline in Compose components, which is a good practice for maintainability and localization in Android development.
app/src/main/java/com/texthip/thip/ui/common/forms/WarningTextField.kt (1)
Learnt from: rbqks529
PR: THIP-TextHip/THIP-Android#30
File: app/src/main/java/com/texthip/thip/ui/common/cards/CardItemRoomSmall.kt:108-112
Timestamp: 2025-07-01T07:19:10.981Z
Learning: The user rbqks529 prefers to extract hardcoded UI strings to StringResource files (strings.xml) rather than keeping them inline in Compose components, which is a good practice for maintainability and localization in Android development.
🧬 Code Graph Analysis (2)
app/src/main/java/com/texthip/thip/ui/signin/screen/SignupNicknameScreen.kt (2)
app/src/main/java/com/texthip/thip/ui/common/topappbar/InputTopAppBar.kt (1)
InputTopAppBar(25-69)app/src/main/java/com/texthip/thip/ui/common/forms/WarningTextField.kt (1)
WarningTextField(32-123)
app/src/main/java/com/texthip/thip/ui/signin/screen/SignupDoneScreen.kt (2)
app/src/main/java/com/texthip/thip/ui/common/topappbar/DefaultTopAppBar.kt (1)
DefaultTopAppBar(23-66)app/src/main/java/com/texthip/thip/ui/common/buttons/ActionMediumButton.kt (1)
ActionMediumButton(31-79)
🔇 Additional comments (9)
app/src/main/java/com/texthip/thip/ui/signin/screen/SignupNicknameScreen.kt (2)
33-37: 상태 관리 구조가 잘 구현되어 있습니다.
rememberSaveable을 사용한 닉네임 상태 관리와derivedStateOf를 사용한 버튼 활성화 로직이 적절하게 구현되어 있습니다.
79-92: WarningTextField 사용법이 적절합니다.경고 메시지 처리와 문자 제한 설정이 올바르게 구현되어 있습니다. 특히 입력 중에 경고를 숨기는 UX 처리가 좋습니다.
app/src/main/java/com/texthip/thip/ui/signin/screen/SignupDoneScreen.kt (3)
38-41: 변수 추출이 적절하게 처리되었습니다.
SignupUserInfo에서 필요한 정보를 명확하게 추출하는 구조가 좋습니다.
80-106: 프로필 이미지 처리 로직이 잘 구현되어 있습니다.프로필 이미지가 있을 때와 없을 때의 UI 처리가 적절하게 분리되어 있고, 스타일링도 일관성 있게 적용되어 있습니다.
123-129: 시작 버튼의 onClick 핸들러를 구현해주세요.현재 빈 onClick 핸들러가 있습니다. 홈 화면으로의 네비게이션 로직이 필요할 것 같습니다.
이 버튼이 홈 화면으로 이동하는 기능을 담당하는지 확인해 주세요.
app/src/main/java/com/texthip/thip/ui/common/forms/WarningTextField.kt (4)
33-43: Controlled component로의 리팩토링이 적절합니다.내부 상태 관리에서 외부 상태 관리로 변경하여 컴포넌트의 재사용성과 제어 가능성이 향상되었습니다. 새로운 매개변수들도 적절하게 추가되었습니다.
56-98: OutlinedTextField 구현이 잘 개선되었습니다.
- 문자 제한 로직이
onValueChange콜백 내에서 적절하게 처리되고 있습니다.- 조건부 아이콘 표시와 클리어 기능이 잘 구현되어 있습니다.
- 경고 상태에 따른 UI 색상 변경이 적절합니다.
100-113: 문자 개수 표시 로직이 개선되었습니다.Box 내부에 문자 개수 표시를 배치하여 레이아웃이 더 안정적으로 구성되었습니다.
128-129: Preview 함수들이 적절하게 업데이트되었습니다.Controlled component 패턴에 맞춰 Preview 함수들에서 상태를 직접 관리하도록 변경한 것이 좋습니다.
Also applies to: 135-136, 150-151, 157-158
| import kotlinx.coroutines.launch | ||
|
|
||
| @Composable | ||
| fun SigninNicknameScreen() { |
There was a problem hiding this comment.
🛠️ Refactor suggestion
파일명과 함수명의 네이밍 일관성을 개선해주세요.
PR 목표에서 언급하신 대로, 이 화면은 회원가입 과정의 일부이므로 SignupNicknameScreen으로 함수명을 변경하는 것이 적절합니다. 파일명도 SignupNicknameScreen.kt로 변경하는 것을 권장합니다.
-fun SigninNicknameScreen() {
+fun SignupNicknameScreen() {🤖 Prompt for AI Agents
In app/src/main/java/com/texthip/thip/ui/signin/screen/SignupNicknameScreen.kt
at line 32, the function name SigninNicknameScreen does not match the file name
or the intended purpose. Rename the function from SigninNicknameScreen to
SignupNicknameScreen to ensure naming consistency with the file and the signup
process. Also, rename the file from SigninNicknameScreen.kt to
SignupNicknameScreen.kt to align with the updated function name.
➕ 이슈 링크
🔎 작업 내용
📸 스크린샷
###SplashScreen

###LoginScreen


###SigninNicknameScreen
https://github.com/user-attachments/assets/a0f411ef-6cd6-4b93-afa0-68406ebd14fc
###SigninDoneScreen

###MySubscriptionScreen
https://github.com/user-attachments/assets/233c5835-c723-4250-9cda-94c61ae1bf7a
😢 해결하지 못한 과제
FormTextFieldDefault 공용 컴포넌트를 닉네임 설정 화면에서 사용했는데, 에러메시지 처리하는 로직이 포함되어있지 않더라고요! 요거는 제가 추가로 수정해서 넣어보겠숩니다
📢 리뷰어들에게
Summary by CodeRabbit
신규 기능
기능 개선
버그 수정 및 리팩터링
문서 및 기타