Conversation
Walkthrough프로필 이미지 관련 UI를 통합하여 Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
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. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
feature/mypage/impl/src/main/java/com/neki/android/feature/mypage/impl/profile/EditProfileScreen.kt (1)
78-87:⚠️ Potential issue | 🟡 Minor이미지 상태를 non-null로 고정하면서 빈 URL fallback이 약해졌습니다.
Line 79 변경으로 빈 문자열이 기본 이미지 fallback(
null)을 우회할 수 있어 불필요한 로드 실패가 발생할 수 있습니다. nullable 상태를 유지하는 편이 안전합니다.🔧 제안 수정안
var displayProfileImage by remember { - mutableStateOf<Any>(uiState.userInfo.profileImageUrl) + mutableStateOf<Any?>(uiState.userInfo.profileImageUrl.ifEmpty { null }) } LaunchedEffect(uiState.profileImageState) { when (uiState.profileImageState) { - is EditProfileImageType.OriginalImageUrl -> {} + is EditProfileImageType.OriginalImageUrl -> { + displayProfileImage = uiState.userInfo.profileImageUrl.ifEmpty { null } + } is EditProfileImageType.ImageUri -> displayProfileImage = uiState.profileImageState.uri EditProfileImageType.Default -> displayProfileImage = R.drawable.image_profile_empty } }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@feature/mypage/impl/src/main/java/com/neki/android/feature/mypage/impl/profile/EditProfileScreen.kt` around lines 78 - 87, The current change makes displayProfileImage non-nullable (mutableStateOf<Any>) which prevents preserving a null/empty profile URL fallback and can cause unnecessary load failures; revert it to a nullable state by changing displayProfileImage to hold Any? (or the actual nullable type like String?) and initialize it with uiState.userInfo.profileImageUrl (which may be null), then keep the LaunchedEffect assignments compatible (assign uri, R.drawable.image_profile_empty, or null as appropriate) so the UI can distinguish empty/null URL vs explicit defaults; update any downstream consumers of displayProfileImage accordingly to handle the nullable case.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In
`@feature/mypage/impl/src/main/java/com/neki/android/feature/mypage/impl/profile/component/ProfileImage.kt`:
- Around line 56-64: The clickable camera/edit icon lacks an accessibility
label, so add a descriptive contentDescription and semantic role to the
clickable element: locate the Box that uses noRippleClickableSingle(onClick =
onClickCameraIcon) in ProfileImage (and the similar block at the other spot
referenced), and provide an accessible label (e.g., "프로필 사진 변경" or appropriate
Korean string) via semantics or by giving the contained Icon a non-null
contentDescription and setting role = Role.Button so TalkBack users can
understand the action; ensure you apply the same fix to the second instance
(lines ~85-90) as well.
---
Outside diff comments:
In
`@feature/mypage/impl/src/main/java/com/neki/android/feature/mypage/impl/profile/EditProfileScreen.kt`:
- Around line 78-87: The current change makes displayProfileImage non-nullable
(mutableStateOf<Any>) which prevents preserving a null/empty profile URL
fallback and can cause unnecessary load failures; revert it to a nullable state
by changing displayProfileImage to hold Any? (or the actual nullable type like
String?) and initialize it with uiState.userInfo.profileImageUrl (which may be
null), then keep the LaunchedEffect assignments compatible (assign uri,
R.drawable.image_profile_empty, or null as appropriate) so the UI can
distinguish empty/null URL vs explicit defaults; update any downstream consumers
of displayProfileImage accordingly to handle the nullable case.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro
Run ID: 45934950-fcbd-4d54-abbe-d5dca5485cfb
📒 Files selected for processing (5)
feature/mypage/impl/src/main/java/com/neki/android/feature/mypage/impl/profile/EditProfileScreen.ktfeature/mypage/impl/src/main/java/com/neki/android/feature/mypage/impl/profile/ProfileSettingScreen.ktfeature/mypage/impl/src/main/java/com/neki/android/feature/mypage/impl/profile/component/EditProfileImage.ktfeature/mypage/impl/src/main/java/com/neki/android/feature/mypage/impl/profile/component/ProfileImage.ktfeature/mypage/impl/src/main/java/com/neki/android/feature/mypage/impl/profile/component/SettingProfileImage.kt
💤 Files with no reviewable changes (2)
- feature/mypage/impl/src/main/java/com/neki/android/feature/mypage/impl/profile/component/EditProfileImage.kt
- feature/mypage/impl/src/main/java/com/neki/android/feature/mypage/impl/profile/component/SettingProfileImage.kt
| Box( | ||
| modifier = Modifier | ||
| .align(Alignment.BottomEnd) | ||
| .background( | ||
| color = NekiTheme.colorScheme.gray700, | ||
| shape = CircleShape, | ||
| ) | ||
| .noRippleClickableSingle(onClick = onClickCameraIcon) | ||
| .padding(8.dp), |
There was a problem hiding this comment.
클릭 가능한 아이콘에 접근성 라벨이 없습니다.
카메라/수정 아이콘이 contentDescription = null 상태라 TalkBack 사용자가 동작 목적을 식별하기 어렵습니다. 최소한 버튼 역할/설명을 부여해 주세요.
🔧 제안 수정안
import androidx.compose.ui.unit.dp
+import androidx.compose.ui.semantics.Role
+import androidx.compose.ui.semantics.contentDescription
+import androidx.compose.ui.semantics.role
+import androidx.compose.ui.semantics.semantics
@@
Box(
modifier = Modifier
.align(Alignment.BottomEnd)
.background(
color = NekiTheme.colorScheme.gray700,
shape = CircleShape,
)
.noRippleClickableSingle(onClick = onClickCameraIcon)
+ .semantics {
+ role = Role.Button
+ contentDescription = "프로필 사진 편집"
+ }
.padding(8.dp),
contentAlignment = Alignment.Center,
) {
@@
Icon(
- modifier = Modifier.noRippleClickableSingle(onClick = onClickEdit),
+ modifier = Modifier
+ .noRippleClickableSingle(onClick = onClickEdit)
+ .semantics {
+ role = Role.Button
+ contentDescription = "닉네임 편집"
+ },
imageVector = ImageVector.vectorResource(R.drawable.icon_edit),
contentDescription = null,
tint = Color.Unspecified,
)Also applies to: 85-90
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In
`@feature/mypage/impl/src/main/java/com/neki/android/feature/mypage/impl/profile/component/ProfileImage.kt`
around lines 56 - 64, The clickable camera/edit icon lacks an accessibility
label, so add a descriptive contentDescription and semantic role to the
clickable element: locate the Box that uses noRippleClickableSingle(onClick =
onClickCameraIcon) in ProfileImage (and the similar block at the other spot
referenced), and provide an accessible label (e.g., "프로필 사진 변경" or appropriate
Korean string) via semantics or by giving the contained Icon a non-null
contentDescription and setting role = Role.Button so TalkBack users can
understand the action; ensure you apply the same fix to the second instance
(lines ~85-90) as well.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
There was a problem hiding this comment.
♻️ Duplicate comments (1)
feature/mypage/impl/src/main/java/com/neki/android/feature/mypage/impl/profile/component/ProfileImage.kt (1)
56-64:⚠️ Potential issue | 🟠 Major클릭 아이콘의 접근성 라벨/역할이 누락되어 있습니다.
Line 63, Line 86의 클릭 요소에
role/설명 텍스트가 없어 스크린리더 사용자가 동작 목적을 알기 어렵습니다. 카메라/수정 액션에 접근성 semantics를 추가해 주세요.🔧 제안 수정안
import androidx.compose.ui.unit.dp +import androidx.compose.ui.semantics.Role +import androidx.compose.ui.semantics.contentDescription +import androidx.compose.ui.semantics.role +import androidx.compose.ui.semantics.semantics @@ Box( modifier = Modifier .align(Alignment.BottomEnd) .background( color = NekiTheme.colorScheme.gray700, shape = CircleShape, ) .noRippleClickableSingle(onClick = onClickCameraIcon) + .semantics { + role = Role.Button + contentDescription = "프로필 사진 변경" + } .padding(8.dp), contentAlignment = Alignment.Center, ) { @@ Icon( - modifier = Modifier.noRippleClickableSingle(onClick = onClickEdit), + modifier = Modifier + .noRippleClickableSingle(onClick = onClickEdit) + .semantics { + role = Role.Button + contentDescription = "닉네임 편집" + }, imageVector = ImageVector.vectorResource(R.drawable.icon_edit), contentDescription = null, tint = Color.Unspecified, )Also applies to: 85-90
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@feature/mypage/impl/src/main/java/com/neki/android/feature/mypage/impl/profile/component/ProfileImage.kt` around lines 56 - 64, The clickable icon Box using noRippleClickableSingle(onClick = onClickCameraIcon) in ProfileImage.kt is missing accessibility semantics; update the composable to add semantics(role = Role.Button) and a clear contentDescription (e.g., "Open camera" or "Edit profile image") so screen readers announce its purpose. Apply the same change to the other clickable element near lines 85-90 (the modify/edit icon) and ensure you use the same unique identifiers (onClickCameraIcon / the edit-icon Box) so the role and description are attached to those click handlers rather than only visual styling.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Duplicate comments:
In
`@feature/mypage/impl/src/main/java/com/neki/android/feature/mypage/impl/profile/component/ProfileImage.kt`:
- Around line 56-64: The clickable icon Box using
noRippleClickableSingle(onClick = onClickCameraIcon) in ProfileImage.kt is
missing accessibility semantics; update the composable to add semantics(role =
Role.Button) and a clear contentDescription (e.g., "Open camera" or "Edit
profile image") so screen readers announce its purpose. Apply the same change to
the other clickable element near lines 85-90 (the modify/edit icon) and ensure
you use the same unique identifiers (onClickCameraIcon / the edit-icon Box) so
the role and description are attached to those click handlers rather than only
visual styling.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro
Run ID: 6ee485e1-8f8c-4ce8-ab88-719db8674a7f
📒 Files selected for processing (1)
feature/mypage/impl/src/main/java/com/neki/android/feature/mypage/impl/profile/component/ProfileImage.kt
ikseong00
left a comment
There was a problem hiding this comment.
카메라 아이콘이랑, Edit 클릭 이벤트 나눈 것 좋은 거 같습니다!
🔗 관련 이슈
📙 작업 설명
EditProfileImage,SettingProfileImage두 개의 별도 컴포넌트를ProfileImage공통 컴포넌트로 통합EditProfileScreen,ProfileSettingScreen에서 공통ProfileImage컴포넌트를 사용하도록 교체ProfileSettingScreen)에도 카메라 아이콘이 노출되도록 수정📸 스크린샷 또는 시연 영상 (선택)
KakaoTalk_Video_2026-04-13-01-01-50.mp4
💬 추가 설명 or 리뷰 포인트 (선택)
Summary by CodeRabbit
릴리스 노트