Skip to content

[Feat] 하루요약 상세화면 / 그림자 적용 #15#24

Open
librawish808 wants to merge 9 commits intodevelopfrom
feature/screen-detail-shadow-#15
Open

[Feat] 하루요약 상세화면 / 그림자 적용 #15#24
librawish808 wants to merge 9 commits intodevelopfrom
feature/screen-detail-shadow-#15

Conversation

@librawish808
Copy link
Copy Markdown
Contributor

@librawish808 librawish808 commented Mar 24, 2026

🔗 관련 이슈

📙 작업 설명

  • 하루요약 상세 화면 UI를 구현했습니다.
    API 연동 전 단계라 화면 데이터는 목데이터로 임시 적용했습니다.
  • 공통 shadow 렌더링 구현을 수정해 iOS와 Android에서 그림자가 정상적으로 반영되도록 개선했습니다.
    기존에 따로 구현해둔 shadow는 삭제하였습니다.

📸 스크린샷 또는 시연 영상 (선택)

기능 미리보기 기능 미리보기
하루요약 아침 화면 하루요약 저녁 화면

💬 추가 설명 or 리뷰 포인트 (선택)

  • 그림자반영 다시한번 확인부탁드립니다!

Summary by CodeRabbit

새로운 기능

  • 통화 상세 화면 추가: 통화 오디오 재생 기능, 식사/복약/수면 요약 정보 표시, 날짜별 일일 캘린더 네비게이션, 식사(아침/점심/저녁) 선택 기능 포함
  • 특이사항 섹션 추가: 주의사항 별도 표시

스타일

  • 재생/정지 버튼, 체크/미체크 마크, 날짜 네비게이션 화살표, 상태별 보고 아이콘 등 새로운 UI 아이콘 추가

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Mar 24, 2026

Walkthrough

하루 요약 상세 화면과 관련된 UI 컴포넌트들을 추가하고(오디오 플레이어, 캘린더, 세그먼트 등), 아이콘 리소스를 다수 추가했으며 그림자 효과 구현을 figmaShadow에서 dropShadow 체인으로 변경하고, Compose UI 툴링 의존성을 빌드에 추가했습니다.

Changes

Cohort / File(s) Summary
빌드 설정
composeApp/build.gradle.kts
Compose UI 미리보기/툴링 의존성(ui-tooling-preview:1.10.1, ui-tooling:1.10.1 via debugImplementation) 추가
Android 리소스 (androidMain)
composeApp/src/androidMain/res/drawable/ic_button_play.xml, .../ic_check.xml, .../ic_leftarrow_date.xml, .../ic_report_attention.xml, .../ic_report_normal.xml, .../ic_report_unrecord.xml, .../ic_rightarrow_date.xml, .../ic_uncheck.xml
여러 벡터 드로어블(재생, 체크/미체크, 좌우 화살표, 보고서 상태 아이콘 등) 추가
공통 Compose 리소스 (commonMain/composeResources)
composeApp/src/commonMain/composeResources/drawable/* (ic_button_play, ic_button_stop, ic_check, ic_leftarrow_date, ic_report_attention, ic_report_normal, ic_report_unrecord, ic_rightarrow_date, ic_uncheck, ic_unrecord)
멀티플랫폼 공통 리소스로 동일/유사 벡터 드로어블 추가
상단 앱바 변경
composeApp/src/commonMain/kotlin/.../TopAppBar.kt
TopAppBar에 titleTextStyle: TextStyletitleColor: Color 선택적 파라미터 추가, 제목 텍스트 스타일/색상 외부화
콜 상세 컴포넌트들
composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/feature/calldetail/component/*
AudioPlayerCard.kt, CareCallSummary.kt, DailyCalendar.kt, MealSegmentControl.kt, SpecialNoteSection.kt
오디오 플레이어 카드, 케어콜 요약, 일별 캘린더, 식사 세그먼트 컨트롤, 특이사항 섹션 등 5개 Compose 컴포넌트 추가(미리보기 포함)
콜 상세 화면
composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/feature/calldetail/screen/CallDetailScreen.kt
TopAppBar, DailyCalendar, MealSegmentedControl, AudioPlayerCard, CareCallSummary 및 조건부 SpecialNoteSection을 조합한 CallDetailScreen 추가
테마/이펙트 변경
composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/theme/Effect.kt
figmaShadow 구현을 drawWithCache 기반 수작업 드로잉에서 Compose dropShadow modifier 체인으로 변경

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Poem

🎨 새 화면에 아이콘들 반짝,
재생 버튼 눌러 시간은 흐르고,
식사·복약·특이사항 한눈에,
그림자는 부드럽게 내려앉아,
작은 순간들이 화면에 노래하네 ✨

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed PR 제목이 주요 변경 사항인 하루요약 상세화면 UI 구현과 그림자 적용을 명확하게 설명하고 있습니다.
Linked Issues check ✅ Passed PR에서 구현된 모든 주요 기능(하루요약 상세화면 UI, iOS 그림자 적용)이 issue #15의 목표와 일치합니다.
Out of Scope Changes check ✅ Passed 모든 변경사항이 하루요약 상세화면 UI 구현과 그림자 적용에 직접적으로 관련되어 있습니다.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/screen-detail-shadow-#15

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (16)
composeApp/src/commonMain/composeResources/drawable/ic_report_unrecord.xml (1)

1-12: 동일 아이콘 이중 관리로 드리프트 위험이 있어요.

commonMain/androidMain에 같은 벡터를 각각 들고 가면, 추후 한쪽만 수정돼 UI 불일치가 생기기 쉬워요. 가능하면 단일 소스(예: 공통 리소스 기준)로 관리하거나 동기화 규칙을 명시해 두는 걸 추천합니다.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@composeApp/src/commonMain/composeResources/drawable/ic_report_unrecord.xml`
around lines 1 - 12, commonMain과 androidMain에 동일한 벡터(ic_report_unrecord.xml)를
중복으로 관리해 UI 드리프트 위험이 있으니 한 쪽을 단일 소스로 삼거나 동기화 규칙을 적용하세요; 해결 방법으로는 공통 소스(common
ic_report_unrecord.xml)를 유지하고 androidMain의 중복 파일을 제거하거나 androidMain에선 공통 리소스를
참조(리소스 병합/심볼릭 참조 또는 Gradle 리소스 복사 작업 사용)하도록 변경하고, ic_report_unrecord.xml 파일명을
기준으로 중복 제거와 빌드 스크립트(예: 리소스 복사/검증)로 동기화 규칙을 강제하세요.
composeApp/src/commonMain/composeResources/drawable/ic_uncheck.xml (1)

1-13: 리소스 중복 제거 검토 요청

확인 결과, composeApp/src/commonMain/composeResources/drawable/ic_uncheck.xmlcomposeApp/src/androidMain/res/drawable/ic_uncheck.xml의 내용이 byte-for-byte로 완전히 동일합니다 (MD5: c706feee5f5f5ec9dd610bcba3bb1bcd). 추가로 현재 코드베이스에서는 두 리소스 모두 사용되지 않고 있는 상태입니다.

불필요한 중복을 정리하기 위해, 다음 중 하나를 진행하는 것을 권장합니다:

  • Compose Multiplatform 리소스 체계에 통합 (composeResources)
  • 또는 Android 기존 리소스로 단일화 (androidMain/res)

결정 후 미사용 파일은 제거해서 유지보수 부담을 줄이면 좋을 것 같습니다.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@composeApp/src/commonMain/composeResources/drawable/ic_uncheck.xml` around
lines 1 - 13, The two identical vector drawable resources ic_uncheck.xml in
composeApp/src/commonMain/composeResources/drawable/ic_uncheck.xml and
composeApp/src/androidMain/res/drawable/ic_uncheck.xml are duplicated and
currently unused; decide whether to centralize the asset into the Compose
Multiplatform resource system (keep and use
composeApp/src/commonMain/composeResources/drawable/ic_uncheck.xml and remove
the androidMain copy) or to consolidate it into the Android res folder (keep
composeApp/src/androidMain/res/drawable/ic_uncheck.xml and remove the
composeResources copy), update any resource references to point to the retained
file, and delete the unused duplicate to eliminate redundancy.
composeApp/build.gradle.kts (2)

52-52: 버전 카탈로그 사용 권장

버전 1.10.1이 하드코딩되어 있습니다. gradle/libs.versions.toml에 이미 compose-multiplatform = "1.10.1"이 정의되어 있으므로, 버전 카탈로그를 참조하면 향후 버전 업데이트 시 일관성을 유지할 수 있습니다.

♻️ 버전 카탈로그 참조로 변경 제안

libs.versions.toml에 다음을 추가:

[libraries]
compose-ui-tooling-preview = { module = "org.jetbrains.compose.ui:ui-tooling-preview", version.ref = "compose-multiplatform" }
compose-ui-tooling = { module = "org.jetbrains.compose.ui:ui-tooling", version.ref = "compose-multiplatform" }

그 후 build.gradle.kts에서:

-            implementation("org.jetbrains.compose.ui:ui-tooling-preview:1.10.1")
+            implementation(libs.compose.ui.tooling.preview)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@composeApp/build.gradle.kts` at line 52, Replace the hardcoded dependency
implementation("org.jetbrains.compose.ui:ui-tooling-preview:1.10.1") with a
version-catalog reference; add the suggested entries to libs.versions.toml
(compose-ui-tooling-preview and compose-ui-tooling referencing version.ref =
"compose-multiplatform"), then update the build.gradle.kts line to use the
catalog symbol (e.g. implementation(libs.composeUiToolingPreview)) so the
compose-multiplatform version from the catalog is used consistently.

162-164: 동일하게 버전 카탈로그 참조 권장

위와 동일하게 하드코딩된 버전을 버전 카탈로그로 변경하면 유지보수가 용이해집니다.

♻️ 수정 제안
-    add("debugImplementation", "org.jetbrains.compose.ui:ui-tooling:1.10.1")
+    add("debugImplementation", libs.compose.ui.tooling)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@composeApp/build.gradle.kts` around lines 162 - 164, Replace the hardcoded
dependency string add("debugImplementation",
"org.jetbrains.compose.ui:ui-tooling:1.10.1") with a version-catalog reference
(e.g., use the libs alias for the Compose UI tooling artifact) so the version is
managed from gradle/libs. Update the version catalog (settings or
libs.versions.toml) to include the compose UI tooling entry (e.g.,
compose.ui.tooling = "org.jetbrains.compose.ui:ui-tooling:1.10.1") if it doesn't
exist, then change the add call to use that catalog alias (referencing
libs.compose.ui.tooling or the project's chosen alias) instead of the hardcoded
string.
composeApp/src/androidMain/res/drawable/ic_rightarrow_date.xml (1)

1-9: commonMain/composeResources와 중복

ic_leftarrow_date.xml과 마찬가지로, Compose Multiplatform 프로젝트에서 이 androidMain 버전은 불필요할 수 있습니다. Context snippet에서 확인된 것처럼 commonMain/composeResources/drawable/ic_rightarrow_date.xml과 완전히 동일합니다.

여러 androidMain drawable들(ic_check, ic_leftarrow_date, ic_rightarrow_date, ic_button_play)이 동일한 패턴을 보이므로, 일괄적으로 정리하는 것을 권장드립니다.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@composeApp/src/androidMain/res/drawable/ic_rightarrow_date.xml` around lines
1 - 9, This Android-specific drawable ic_rightarrow_date.xml duplicates the
identical resource already provided in
commonMain/composeResources/drawable/ic_rightarrow_date.xml; remove or stop
shipping the androidMain copy (ic_rightarrow_date.xml) and ensure code
references the common resource instead, and apply the same cleanup to the other
duplicates (ic_leftarrow_date.xml, ic_check, ic_button_play) so only the
commonMain/composeResources versions remain; if build/resource merging requires
it, delete the androidMain file(s) or replace them with lightweight
platform-specific overrides that forward to the common resource.
composeApp/src/androidMain/res/drawable/ic_leftarrow_date.xml (1)

1-9: commonMain/composeResources와 중복 리소스

ic_check.xml과 동일한 상황입니다. Compose Multiplatform은 commonMain/composeResources/drawable/에서 리소스를 resolve하므로, 이 androidMain 버전이 실제로 필요한지 확인이 필요합니다.

레거시 Android View에서 사용하지 않는다면 중복 리소스 제거를 고려해 주세요.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@composeApp/src/androidMain/res/drawable/ic_leftarrow_date.xml` around lines 1
- 9, 중복 리소스인 ic_leftarrow_date.xml(androidMain drawable) 파일이
commonMain/composeResources/drawable에 이미 존재하는지 확인하고, 레거시 Android View에서 해당
androidMain 버전을 참조하고 있지 않다면 androidMain 버전을 삭제하고 commonMain 버전만 사용되도록 정리하세요; 필요
시 ic_leftarrow_date 및 ic_check 리소스의 참조를 전체 코드베이스(예: XML 레이아웃, Compose 호출,
AndroidView 래퍼 등)에서 검색해 실제 사용처가 있는지 확인하고, 사용 중이라면 왜 androidMain 전용이 필요한지 주석으로
남기거나 리소스 통합 후 빌드 및 리소스 병합 결과를 확인하여 아이콘이 정상 표시되는지 검증하세요.
composeApp/src/androidMain/res/drawable/ic_button_play.xml (1)

1-9: commonMain/composeResources와 중복 리소스

Context snippet에서 확인된 것처럼, commonMain/composeResources/drawable/ic_button_play.xml과 완전히 동일한 파일입니다. AudioPlayerCard.kt는 Compose resource system을 사용하므로 이 androidMain 버전은 불필요합니다.

다른 중복 drawable들과 함께 정리를 고려해 주세요.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@composeApp/src/androidMain/res/drawable/ic_button_play.xml` around lines 1 -
9, This Android-specific drawable ic_button_play.xml duplicates the
commonMain/composeResources copy and is unnecessary because AudioPlayerCard.kt
uses the Compose resource system; remove the file from androidMain/res/drawable
(ic_button_play.xml) so the build will pick up the shared
commonMain/composeResources version, and verify there are no other duplicate
drawables in androidMain (remove or consolidate any identical files) and ensure
no platform-specific overrides rely on the removed file.
composeApp/src/androidMain/res/drawable/ic_check.xml (1)

1-9: androidMain 버전의 ic_check.xml은 불필요합니다

Res.drawable.ic_check로 리소스를 참조하는 모든 코드가 commonMain/composeResources/drawable/의 버전을 사용하고 있으며, R.drawable.ic_check 형태의 안드로이드 기본 리소스 참조는 코드에서 찾을 수 없습니다. 두 파일의 내용이 동일하므로 composeApp/src/androidMain/res/drawable/ic_check.xml은 삭제해도 무방합니다.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@composeApp/src/androidMain/res/drawable/ic_check.xml` around lines 1 - 9, The
android-specific duplicate drawable ic_check is redundant because all references
use Res.drawable.ic_check from commonMain/composeResources/drawable/; remove the
file composeApp/src/androidMain/res/drawable/ic_check.xml to avoid duplication,
ensure no code references R.drawable.ic_check in Android-specific code, and run
a clean build to verify the project picks up the commonMain drawable.
composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/feature/calldetail/component/MealSegmentControl.kt (3)

27-27: KMP 프로젝트에서 잘못된 Preview import 사용

commonMain에서는 org.jetbrains.compose.ui.tooling.preview.Preview를 사용해야 합니다.

♻️ 제안된 수정
-import androidx.compose.ui.tooling.preview.Preview
+import org.jetbrains.compose.ui.tooling.preview.Preview
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/feature/calldetail/component/MealSegmentControl.kt`
at line 27, The Preview import in MealSegmentControl.kt is wrong for commonMain;
replace the Android-specific import androidx.compose.ui.tooling.preview.Preview
with the multiplatform one org.jetbrains.compose.ui.tooling.preview.Preview so
any `@Preview` annotations (e.g., on the MealSegmentControl preview function) use
the correct KMP preview provider; update the import statement at the top of
MealSegmentControl.kt accordingly.

105-107: Preview 함수를 private으로 변경

다른 파일의 Preview 함수들과 일관성을 위해 private으로 선언하는 것이 좋습니다.

♻️ 제안된 수정
 `@Preview`
 `@Composable`
-fun PreviewMealSegmentedControl() {
+private fun PreviewMealSegmentedControl() {
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/feature/calldetail/component/MealSegmentControl.kt`
around lines 105 - 107, The Preview composable function
PreviewMealSegmentedControl should be made private for consistency with other
preview functions; locate the PreviewMealSegmentedControl() `@Composable` function
and change its visibility from public to private (i.e., declare it as private
fun PreviewMealSegmentedControl()) so the preview remains available in the file
but isn't exposed publicly.

49-53: selectedItem이 items에 없을 경우 방어 처리

indexOf가 -1을 반환하면 xOffset이 음수가 되어 UI가 의도치 않게 렌더링될 수 있습니다. 현재 사용 패턴상 문제가 없어 보이지만, 방어적 코딩을 고려해 주세요.

♻️ 제안된 수정
-        val selectedIndex = items.indexOf(selectedItem)
+        val selectedIndex = items.indexOf(selectedItem).coerceAtLeast(0)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/feature/calldetail/component/MealSegmentControl.kt`
around lines 49 - 53, The code uses selectedIndex = items.indexOf(selectedItem)
and then computes xOffset = itemWidth * selectedIndex which can be negative if
indexOf returns -1; change to a safe index before using it (e.g., compute a
safeSelectedIndex by clamping the result of items.indexOf(selectedItem) to
0..items.lastIndex or defaulting to 0 when not found) and use that
safeSelectedIndex when computing xOffset in animateDpAsState; also ensure you
handle the empty-items case before dividing by items.size (e.g., early return or
guard) so itemWidth computation is safe.
composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/feature/calldetail/component/SpecialNoteSection.kt (2)

79-83: Preview 함수 포맷팅 수정

닫는 괄호의 위치가 일관되지 않습니다.

♻️ 제안된 수정
     SpecialNoteSection(
         note = "무릎통증",
         description = "어제부터 있던 무릎통증이 있어요",
-        statusIcon = painterResource(Res.drawable.ic_report_attention)
-        )
-
+        statusIcon = painterResource(Res.drawable.ic_report_attention),
+    )
 }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/feature/calldetail/component/SpecialNoteSection.kt`
around lines 79 - 83, The SpecialNoteSection preview call has inconsistent
closing-parenthesis placement and missing trailing commas; update the call to
add a trailing comma after the statusIcon argument
(painterResource(Res.drawable.ic_report_attention),) and place the closing
parenthesis on its own line aligned with the start of SpecialNoteSection so the
parameters (note, description, statusIcon) are each on their own lines and the
closing parenthesis is consistently formatted.

22-22: 사용되지 않는 import

ic_report_normal이 import되었지만 파일 내에서 사용되지 않습니다.

♻️ 제안된 수정
-import com.konkuk.medicarecall.resources.ic_report_normal
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/feature/calldetail/component/SpecialNoteSection.kt`
at line 22, The file imports a resource named ic_report_normal that is not used;
remove the unused import statement (ic_report_normal) from SpecialNoteSection.kt
to clean up unused references and avoid compiler warnings, ensuring no other
references to ic_report_normal exist in the SpecialNoteSection composable or
related functions before deleting it.
composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/common/component/TopAppBar.kt (1)

21-22: 중복 import 정리

Line 21의 wildcard import(*)가 이미 ic_arrow_big_back을 포함하므로, Line 22의 명시적 import는 불필요합니다.

♻️ 제안된 수정
 import com.konkuk.medicarecall.resources.Res
 import com.konkuk.medicarecall.resources.*
-import com.konkuk.medicarecall.resources.ic_arrow_big_back
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/common/component/TopAppBar.kt`
around lines 21 - 22, Remove the redundant explicit import of ic_arrow_big_back
since com.konkuk.medicarecall.resources.* already imports it; in TopAppBar.kt
delete the specific import line for ic_arrow_big_back and keep the wildcard
import (or replace the wildcard with explicit imports if you prefer
explicit-only imports) to eliminate the duplicate import.
composeApp/src/commonMain/composeResources/drawable/ic_report_attention.xml (1)

1-13: 중복된 아이콘 리소스 정리 검토해도 좋겠어요

ic_report_attention.xmlcommonMain/composeResources/androidMain/res/drawable/ 양쪽에 동일한 내용으로 존재하네요. Compose Multiplatform 프로젝트에서는 보통 commonMain/composeResources/의 리소스 하나면 충분하니까, androidMain 버전 제거를 한 번 검토해 보시면 어떨까요?

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@composeApp/src/commonMain/composeResources/drawable/ic_report_attention.xml`
around lines 1 - 13, Duplicate vector drawable ic_report_attention.xml exists in
both commonMain/composeResources and androidMain/res/drawable; remove the
redundant Android-specific copy and keep the shared Compose resource to avoid
duplication. Locate the resource named ic_report_attention.xml in
androidMain/res/drawable and delete it (or replace any platform-specific
references to point to the commonMain/composeResources version), then run a
build to ensure no missing-resource references and update any import/resource
qualifiers if necessary. If there are any Android-only overrides required,
consolidate differences into the common resource or create a single
platform-specific variant with a clear name. Ensure the remaining resource is
referenced by its original name from Compose Multiplatform code and Android
manifests/layouts.
composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/feature/calldetail/component/CareCallSummary.kt (1)

28-36: isTaken 파라미터가 실제 렌더링에 쓰이지 않아 API 의미가 깨져 있어요.

현재는 전달값과 무관하게 동일하게 그려져서 상태 동기화 포인트가 사라집니다. 쓰지 않을 거면 시그니처에서 제거하는 쪽이 안전합니다.

♻️ 제안 수정안
 fun CareCallSummary(
     modifier: Modifier = Modifier,
     meal: String,
     sleep: String,
     statusIcon: Painter? = null,
     tagIcon: Painter? = null,
-    medicines: List<MedicineUiState>,
-    isTaken: Boolean,
+    medicines: List<MedicineUiState>,
 ) {

호출부(composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/feature/calldetail/screen/CallDetailScreen.kt)도 함께 정리:

             CareCallSummary(
                 meal = "된장찌개에 밥",
                 medicines = mockMedicines,
-                isTaken = true,
                 sleep = "충분히 수면",
                 statusIcon = painterResource(Res.drawable.ic_report_normal),
                 tagIcon = painterResource(Res.drawable.ic_check),
             )

Also applies to: 107-134

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/feature/calldetail/component/CareCallSummary.kt`
around lines 28 - 36, The CareCallSummary composable currently accepts an
isTaken parameter that isn't used in rendering, breaking the API contract;
either remove isTaken from the CareCallSummary signature and update all call
sites (e.g., the CallDetailScreen composable) to stop passing it, or incorporate
isTaken into the UI (for example, toggle a visual state or pass it down to
Medicine item rendering) so the prop affects output—make the change consistently
across CareCallSummary and its callers (update parameter list and invocation
sites, e.g., CallDetailScreen) so the API and rendering stay synchronized.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In
`@composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/feature/calldetail/component/AudioPlayerCard.kt`:
- Around line 102-105: The Icon in AudioPlayerCard currently uses a fixed
contentDescription "Play/Stop"; change it to a state-based description so screen
readers announce the current action — e.g., compute contentDescription = if
(isPlaying) "Stop" else "Play" (or use appropriate boolean/enum like
isPlaying/playbackState) and pass that variable into the Icon(contentDescription
= ...); prefer using string resources for localization if available.

In
`@composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/feature/calldetail/component/SpecialNoteSection.kt`:
- Line 18: The file imports the Android-only Preview annotation
(androidx.compose.ui.tooling.preview.Preview) which is invalid in commonMain;
replace that import with the multiplatform Preview
(org.jetbrains.compose.ui.tooling.preview.Preview) in SpecialNoteSection.kt and
make the same replacement in CallDetailScreen.kt, CareCallSummary.kt,
AudioPlayerCard.kt, DailyCalendar.kt, and MealSegmentControl.kt so all preview
usages reference the org.jetbrains.compose UI Preview; search for any remaining
androidx.compose.ui.tooling.preview.Preview occurrences and update them to
org.jetbrains.compose.ui.tooling.preview.Preview to keep commonMain compilable.

In
`@composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/feature/calldetail/screen/CallDetailScreen.kt`:
- Around line 32-35: CallDetailScreen currently wires the calendar "previous"
arrow to the screen-level onBack handler causing the arrow to navigate away;
change the handler used by the calendar previous-arrow inside CallDetailScreen
so it performs date navigation instead of calling onBack. Concretely, remove the
onBack invocation from the calendar-left-arrow click lambda and either call the
existing date-state updater (e.g., viewModel.changeDate(-1) or call an
onPreviousDate/onChangeDate(date) function) or add a new onPreviousDate:
()->Unit parameter to CallDetailScreen and invoke that; ensure the app bar
back-button still calls onBack so the two controls no longer conflict.

---

Nitpick comments:
In `@composeApp/build.gradle.kts`:
- Line 52: Replace the hardcoded dependency
implementation("org.jetbrains.compose.ui:ui-tooling-preview:1.10.1") with a
version-catalog reference; add the suggested entries to libs.versions.toml
(compose-ui-tooling-preview and compose-ui-tooling referencing version.ref =
"compose-multiplatform"), then update the build.gradle.kts line to use the
catalog symbol (e.g. implementation(libs.composeUiToolingPreview)) so the
compose-multiplatform version from the catalog is used consistently.
- Around line 162-164: Replace the hardcoded dependency string
add("debugImplementation", "org.jetbrains.compose.ui:ui-tooling:1.10.1") with a
version-catalog reference (e.g., use the libs alias for the Compose UI tooling
artifact) so the version is managed from gradle/libs. Update the version catalog
(settings or libs.versions.toml) to include the compose UI tooling entry (e.g.,
compose.ui.tooling = "org.jetbrains.compose.ui:ui-tooling:1.10.1") if it doesn't
exist, then change the add call to use that catalog alias (referencing
libs.compose.ui.tooling or the project's chosen alias) instead of the hardcoded
string.

In `@composeApp/src/androidMain/res/drawable/ic_button_play.xml`:
- Around line 1-9: This Android-specific drawable ic_button_play.xml duplicates
the commonMain/composeResources copy and is unnecessary because
AudioPlayerCard.kt uses the Compose resource system; remove the file from
androidMain/res/drawable (ic_button_play.xml) so the build will pick up the
shared commonMain/composeResources version, and verify there are no other
duplicate drawables in androidMain (remove or consolidate any identical files)
and ensure no platform-specific overrides rely on the removed file.

In `@composeApp/src/androidMain/res/drawable/ic_check.xml`:
- Around line 1-9: The android-specific duplicate drawable ic_check is redundant
because all references use Res.drawable.ic_check from
commonMain/composeResources/drawable/; remove the file
composeApp/src/androidMain/res/drawable/ic_check.xml to avoid duplication,
ensure no code references R.drawable.ic_check in Android-specific code, and run
a clean build to verify the project picks up the commonMain drawable.

In `@composeApp/src/androidMain/res/drawable/ic_leftarrow_date.xml`:
- Around line 1-9: 중복 리소스인 ic_leftarrow_date.xml(androidMain drawable) 파일이
commonMain/composeResources/drawable에 이미 존재하는지 확인하고, 레거시 Android View에서 해당
androidMain 버전을 참조하고 있지 않다면 androidMain 버전을 삭제하고 commonMain 버전만 사용되도록 정리하세요; 필요
시 ic_leftarrow_date 및 ic_check 리소스의 참조를 전체 코드베이스(예: XML 레이아웃, Compose 호출,
AndroidView 래퍼 등)에서 검색해 실제 사용처가 있는지 확인하고, 사용 중이라면 왜 androidMain 전용이 필요한지 주석으로
남기거나 리소스 통합 후 빌드 및 리소스 병합 결과를 확인하여 아이콘이 정상 표시되는지 검증하세요.

In `@composeApp/src/androidMain/res/drawable/ic_rightarrow_date.xml`:
- Around line 1-9: This Android-specific drawable ic_rightarrow_date.xml
duplicates the identical resource already provided in
commonMain/composeResources/drawable/ic_rightarrow_date.xml; remove or stop
shipping the androidMain copy (ic_rightarrow_date.xml) and ensure code
references the common resource instead, and apply the same cleanup to the other
duplicates (ic_leftarrow_date.xml, ic_check, ic_button_play) so only the
commonMain/composeResources versions remain; if build/resource merging requires
it, delete the androidMain file(s) or replace them with lightweight
platform-specific overrides that forward to the common resource.

In `@composeApp/src/commonMain/composeResources/drawable/ic_report_attention.xml`:
- Around line 1-13: Duplicate vector drawable ic_report_attention.xml exists in
both commonMain/composeResources and androidMain/res/drawable; remove the
redundant Android-specific copy and keep the shared Compose resource to avoid
duplication. Locate the resource named ic_report_attention.xml in
androidMain/res/drawable and delete it (or replace any platform-specific
references to point to the commonMain/composeResources version), then run a
build to ensure no missing-resource references and update any import/resource
qualifiers if necessary. If there are any Android-only overrides required,
consolidate differences into the common resource or create a single
platform-specific variant with a clear name. Ensure the remaining resource is
referenced by its original name from Compose Multiplatform code and Android
manifests/layouts.

In `@composeApp/src/commonMain/composeResources/drawable/ic_report_unrecord.xml`:
- Around line 1-12: commonMain과 androidMain에 동일한 벡터(ic_report_unrecord.xml)를
중복으로 관리해 UI 드리프트 위험이 있으니 한 쪽을 단일 소스로 삼거나 동기화 규칙을 적용하세요; 해결 방법으로는 공통 소스(common
ic_report_unrecord.xml)를 유지하고 androidMain의 중복 파일을 제거하거나 androidMain에선 공통 리소스를
참조(리소스 병합/심볼릭 참조 또는 Gradle 리소스 복사 작업 사용)하도록 변경하고, ic_report_unrecord.xml 파일명을
기준으로 중복 제거와 빌드 스크립트(예: 리소스 복사/검증)로 동기화 규칙을 강제하세요.

In `@composeApp/src/commonMain/composeResources/drawable/ic_uncheck.xml`:
- Around line 1-13: The two identical vector drawable resources ic_uncheck.xml
in composeApp/src/commonMain/composeResources/drawable/ic_uncheck.xml and
composeApp/src/androidMain/res/drawable/ic_uncheck.xml are duplicated and
currently unused; decide whether to centralize the asset into the Compose
Multiplatform resource system (keep and use
composeApp/src/commonMain/composeResources/drawable/ic_uncheck.xml and remove
the androidMain copy) or to consolidate it into the Android res folder (keep
composeApp/src/androidMain/res/drawable/ic_uncheck.xml and remove the
composeResources copy), update any resource references to point to the retained
file, and delete the unused duplicate to eliminate redundancy.

In
`@composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/common/component/TopAppBar.kt`:
- Around line 21-22: Remove the redundant explicit import of ic_arrow_big_back
since com.konkuk.medicarecall.resources.* already imports it; in TopAppBar.kt
delete the specific import line for ic_arrow_big_back and keep the wildcard
import (or replace the wildcard with explicit imports if you prefer
explicit-only imports) to eliminate the duplicate import.

In
`@composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/feature/calldetail/component/CareCallSummary.kt`:
- Around line 28-36: The CareCallSummary composable currently accepts an isTaken
parameter that isn't used in rendering, breaking the API contract; either remove
isTaken from the CareCallSummary signature and update all call sites (e.g., the
CallDetailScreen composable) to stop passing it, or incorporate isTaken into the
UI (for example, toggle a visual state or pass it down to Medicine item
rendering) so the prop affects output—make the change consistently across
CareCallSummary and its callers (update parameter list and invocation sites,
e.g., CallDetailScreen) so the API and rendering stay synchronized.

In
`@composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/feature/calldetail/component/MealSegmentControl.kt`:
- Line 27: The Preview import in MealSegmentControl.kt is wrong for commonMain;
replace the Android-specific import androidx.compose.ui.tooling.preview.Preview
with the multiplatform one org.jetbrains.compose.ui.tooling.preview.Preview so
any `@Preview` annotations (e.g., on the MealSegmentControl preview function) use
the correct KMP preview provider; update the import statement at the top of
MealSegmentControl.kt accordingly.
- Around line 105-107: The Preview composable function
PreviewMealSegmentedControl should be made private for consistency with other
preview functions; locate the PreviewMealSegmentedControl() `@Composable` function
and change its visibility from public to private (i.e., declare it as private
fun PreviewMealSegmentedControl()) so the preview remains available in the file
but isn't exposed publicly.
- Around line 49-53: The code uses selectedIndex = items.indexOf(selectedItem)
and then computes xOffset = itemWidth * selectedIndex which can be negative if
indexOf returns -1; change to a safe index before using it (e.g., compute a
safeSelectedIndex by clamping the result of items.indexOf(selectedItem) to
0..items.lastIndex or defaulting to 0 when not found) and use that
safeSelectedIndex when computing xOffset in animateDpAsState; also ensure you
handle the empty-items case before dividing by items.size (e.g., early return or
guard) so itemWidth computation is safe.

In
`@composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/feature/calldetail/component/SpecialNoteSection.kt`:
- Around line 79-83: The SpecialNoteSection preview call has inconsistent
closing-parenthesis placement and missing trailing commas; update the call to
add a trailing comma after the statusIcon argument
(painterResource(Res.drawable.ic_report_attention),) and place the closing
parenthesis on its own line aligned with the start of SpecialNoteSection so the
parameters (note, description, statusIcon) are each on their own lines and the
closing parenthesis is consistently formatted.
- Line 22: The file imports a resource named ic_report_normal that is not used;
remove the unused import statement (ic_report_normal) from SpecialNoteSection.kt
to clean up unused references and avoid compiler warnings, ensuring no other
references to ic_report_normal exist in the SpecialNoteSection composable or
related functions before deleting it.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 18072bab-6bf6-4556-94ca-d32d77c2b515

📥 Commits

Reviewing files that changed from the base of the PR and between 61088a4 and 4fdf62a.

⛔ Files ignored due to path filters (1)
  • composeApp/src/commonMain/composeResources/drawable/img_id_card.png is excluded by !**/*.png
📒 Files selected for processing (27)
  • composeApp/build.gradle.kts
  • composeApp/src/androidMain/res/drawable/ic_button_play.xml
  • composeApp/src/androidMain/res/drawable/ic_check.xml
  • composeApp/src/androidMain/res/drawable/ic_leftarrow_date.xml
  • composeApp/src/androidMain/res/drawable/ic_report_attention.xml
  • composeApp/src/androidMain/res/drawable/ic_report_normal.xml
  • composeApp/src/androidMain/res/drawable/ic_report_unrecord.xml
  • composeApp/src/androidMain/res/drawable/ic_rightarrow_date.xml
  • composeApp/src/androidMain/res/drawable/ic_uncheck.xml
  • composeApp/src/commonMain/composeResources/drawable/ic_button_play.xml
  • composeApp/src/commonMain/composeResources/drawable/ic_button_stop.xml
  • composeApp/src/commonMain/composeResources/drawable/ic_check.xml
  • composeApp/src/commonMain/composeResources/drawable/ic_leftarrow_date.xml
  • composeApp/src/commonMain/composeResources/drawable/ic_report_attention.xml
  • composeApp/src/commonMain/composeResources/drawable/ic_report_normal.xml
  • composeApp/src/commonMain/composeResources/drawable/ic_report_unrecord.xml
  • composeApp/src/commonMain/composeResources/drawable/ic_rightarrow_date.xml
  • composeApp/src/commonMain/composeResources/drawable/ic_uncheck.xml
  • composeApp/src/commonMain/composeResources/drawable/ic_unrecord.xml
  • composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/common/component/TopAppBar.kt
  • composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/feature/calldetail/component/AudioPlayerCard.kt
  • composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/feature/calldetail/component/CareCallSummary.kt
  • composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/feature/calldetail/component/DailyCalendar.kt
  • composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/feature/calldetail/component/MealSegmentControl.kt
  • composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/feature/calldetail/component/SpecialNoteSection.kt
  • composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/feature/calldetail/screen/CallDetailScreen.kt
  • composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/theme/Effect.kt

Comment on lines +102 to +105
Icon(
painter = playStop,
contentDescription = "Play/Stop",
modifier = Modifier
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

재생 버튼 접근성 라벨을 상태 기반으로 바꿔주세요.

지금은 "Play/Stop" 고정이라 스크린리더가 현재 상태를 제대로 읽어주지 못합니다.

♿ 제안 수정안
             Icon(
                 painter = playStop,
-                contentDescription = "Play/Stop",
+                contentDescription = if (isPlaying) "정지" else "재생",
                 modifier = Modifier
                     .size(40.dp)
                     .clickable { onTogglePlay() },
                 tint = Color.Black,
             )
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/feature/calldetail/component/AudioPlayerCard.kt`
around lines 102 - 105, The Icon in AudioPlayerCard currently uses a fixed
contentDescription "Play/Stop"; change it to a state-based description so screen
readers announce the current action — e.g., compute contentDescription = if
(isPlaying) "Stop" else "Play" (or use appropriate boolean/enum like
isPlaying/playbackState) and pass that variable into the Icon(contentDescription
= ...); prefer using string resources for localization if available.

import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.ui.tooling.preview.Preview
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Description: Check which Preview import is used across commonMain files

echo "=== Checking Preview imports in commonMain ==="
rg -n "import.*tooling.preview.Preview" composeApp/src/commonMain/ --type kotlin

Repository: Medicare-Call/Medicare-Call-KMP

Length of output: 1095


🏁 Script executed:

#!/bin/bash
# Check if this is a KMP project and what Compose dependencies are being used

echo "=== Checking build.gradle.kts for multiplatform setup ==="
find composeApp -name "build.gradle.kts" -type f | head -5 | xargs cat | grep -A 5 -B 5 "multiplatform\|compose\|kotlin" | head -60

echo ""
echo "=== Checking if org.jetbrains.compose is declared ==="
find composeApp -name "build.gradle.kts" -type f | xargs grep -l "org.jetbrains.compose"

echo ""
echo "=== Checking Compose Multiplatform version/setup ==="
find . -name "gradle" -o -name "libs.versions.toml" | xargs cat 2>/dev/null | grep -i compose | head -10

Repository: Medicare-Call/Medicare-Call-KMP

Length of output: 3243


🏁 Script executed:

#!/bin/bash
# Check if androidMain also uses Preview and what imports it has

echo "=== Checking Preview imports in androidMain ==="
rg -n "import.*tooling.preview.Preview" composeApp/src/androidMain/ --type kotlin 2>/dev/null || echo "No androidMain directory or no matches"

echo ""
echo "=== Verify the actual dependency in commonMain ==="
grep -A 2 -B 2 "ui-tooling-preview" composeApp/build.gradle.kts

Repository: Medicare-Call/Medicare-Call-KMP

Length of output: 423


KMP 프로젝트에서 잘못된 Preview import 사용

androidx.compose.ui.tooling.preview.Preview는 Android 전용입니다. 이 프로젝트는 Compose Multiplatform을 사용하므로 commonMain에서는 org.jetbrains.compose.ui.tooling.preview.Preview를 사용해야 합니다. 같은 문제가 CallDetailScreen.kt, CareCallSummary.kt, AudioPlayerCard.kt, DailyCalendar.kt, MealSegmentControl.kt에도 있으니 함께 수정하면 좋습니다.

♻️ 수정 사항
-import androidx.compose.ui.tooling.preview.Preview
+import org.jetbrains.compose.ui.tooling.preview.Preview
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
import androidx.compose.ui.tooling.preview.Preview
import org.jetbrains.compose.ui.tooling.preview.Preview
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/feature/calldetail/component/SpecialNoteSection.kt`
at line 18, The file imports the Android-only Preview annotation
(androidx.compose.ui.tooling.preview.Preview) which is invalid in commonMain;
replace that import with the multiplatform Preview
(org.jetbrains.compose.ui.tooling.preview.Preview) in SpecialNoteSection.kt and
make the same replacement in CallDetailScreen.kt, CareCallSummary.kt,
AudioPlayerCard.kt, DailyCalendar.kt, and MealSegmentControl.kt so all preview
usages reference the org.jetbrains.compose UI Preview; search for any remaining
androidx.compose.ui.tooling.preview.Preview occurrences and update them to
org.jetbrains.compose.ui.tooling.preview.Preview to keep commonMain compilable.

Comment on lines +32 to +35
fun CallDetailScreen(
modifier: Modifier = Modifier,
onBack: () -> Unit,
) {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

달력 이전 화살표가 화면 뒤로가기에 연결되어 있어 UX 오작동이 납니다.

Line 50에서 달력 화살표가 날짜 이동이 아니라 화면 이탈로 동작합니다. 상단 앱바 뒤로가기와 역할이 중복/충돌돼요.

💡 제안 수정안
 fun CallDetailScreen(
     modifier: Modifier = Modifier,
     onBack: () -> Unit,
+    onPrevDate: () -> Unit = {},
+    onNextDate: () -> Unit = {},
 ) {
@@
         DailyCalendar(
             date = LocalDate(2026, 3, 17),
             day = "오늘",
-            onBack = {
-                onBack()
-            },
+            onBack = onPrevDate,
+            onNext = onNextDate,
         )

Also applies to: 47-53

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/feature/calldetail/screen/CallDetailScreen.kt`
around lines 32 - 35, CallDetailScreen currently wires the calendar "previous"
arrow to the screen-level onBack handler causing the arrow to navigate away;
change the handler used by the calendar previous-arrow inside CallDetailScreen
so it performs date navigation instead of calling onBack. Concretely, remove the
onBack invocation from the calendar-left-arrow click lambda and either call the
existing date-state updater (e.g., viewModel.changeDate(-1) or call an
onPreviousDate/onChangeDate(date) function) or add a new onPreviousDate:
()->Unit parameter to CallDetailScreen and invoke that; ensure the app bar
back-button still calls onBack so the two controls no longer conflict.

…ail-shadow-#15

# Conflicts:
#	composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/theme/Effect.kt
Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@composeApp/build.gradle.kts`:
- Around line 165-167: 현재 build.gradle.kts에서 하드코딩된
"org.jetbrains.compose.ui:ui-tooling:1.10.1" (및 다른 위치의 "ui-tooling-preview") 의존성
문자열로 인해 버전 중복 위험이 있습니다; gradle/libs.versions.toml의 [libraries]에
compose-ui-tooling-preview 및 compose-ui-tooling 항목을 추가하고(version.ref =
"compose-multiplatform"), build.gradle.kts에서 add("debugImplementation",
"org.jetbrains.compose.ui:ui-tooling:1.10.1") 대신 버전 카탈로그
참조(libs.compose-ui-tooling 또는 라이브러리 이름에 맞게 조정)로 교체하여 모든 Compose 툴링 의존성을 중앙에서
관리하도록 수정하세요.
- Line 52: Replace the Android-only Preview import with the multiplatform
Compose Preview import in the affected composable files: change any import of
androidx.compose.ui.tooling.preview.Preview to
org.jetbrains.compose.ui.tooling.preview.Preview in the files containing the
composables CallDetailScreen, SpecialNoteSection, DailyCalendar,
CareCallSummary, AudioPlayerCard, and MealSegmentControl so the commonMain
preview dependency added in build.gradle.kts won't break iOS/Desktop builds.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 4e317aaa-0e7d-4ec2-aa43-ac46d2a5c3a8

📥 Commits

Reviewing files that changed from the base of the PR and between 4fdf62a and a658382.

📒 Files selected for processing (1)
  • composeApp/build.gradle.kts

implementation(compose.material3)
implementation(compose.ui)
implementation(compose.components.resources)
implementation("org.jetbrains.compose.ui:ui-tooling-preview:1.10.1")
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

# 목적:
# commonMain 에 Android 전용 Preview import가 남아있는지 확인

echo "[1] Android 전용 Preview import 검색"
rg -n --type=kotlin 'import androidx\.compose\.ui\.tooling\.preview\.Preview' composeApp/src/commonMain || true

echo
echo "[2] commonMain `@Preview` 사용 위치 확인"
rg -n --type=kotlin '@Preview' composeApp/src/commonMain

Repository: Medicare-Call/Medicare-Call-KMP

Length of output: 2045


commonMain Preview 의존성 추가로 인한 멀티플랫폼 빌드 문제가 생길 수 있어요.

Line 52에서 CMP preview 의존성을 추가했는데, commonMain에 아직도 Android 전용 Preview import(androidx.compose.ui.tooling.preview.Preview)가 남아있어서 iOS/Desktop 빌드가 깨질 거예요.

다음 6개 파일에서 모두 org.jetbrains.compose.ui.tooling.preview.Preview로 바꿔야 합니다:

  • composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/feature/calldetail/screen/CallDetailScreen.kt (Line 14)
  • composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/feature/calldetail/component/SpecialNoteSection.kt (Line 18)
  • composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/feature/calldetail/component/DailyCalendar.kt (Line 21)
  • composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/feature/calldetail/component/CareCallSummary.kt (Line 18)
  • composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/feature/calldetail/component/AudioPlayerCard.kt (Line 23)
  • composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/feature/calldetail/component/MealSegmentControl.kt (Line 27)
🔧 제안 수정
--- a/composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/feature/calldetail/screen/CallDetailScreen.kt
+++ b/composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/feature/calldetail/screen/CallDetailScreen.kt
@@
-import androidx.compose.ui.tooling.preview.Preview
+import org.jetbrains.compose.ui.tooling.preview.Preview
--- a/composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/feature/calldetail/component/SpecialNoteSection.kt
+++ b/composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/feature/calldetail/component/SpecialNoteSection.kt
@@
-import androidx.compose.ui.tooling.preview.Preview
+import org.jetbrains.compose.ui.tooling.preview.Preview
--- a/composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/feature/calldetail/component/DailyCalendar.kt
+++ b/composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/feature/calldetail/component/DailyCalendar.kt
@@
-import androidx.compose.ui.tooling.preview.Preview
+import org.jetbrains.compose.ui.tooling.preview.Preview
--- a/composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/feature/calldetail/component/CareCallSummary.kt
+++ b/composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/feature/calldetail/component/CareCallSummary.kt
@@
-import androidx.compose.ui.tooling.preview.Preview
+import org.jetbrains.compose.ui.tooling.preview.Preview
--- a/composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/feature/calldetail/component/AudioPlayerCard.kt
+++ b/composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/feature/calldetail/component/AudioPlayerCard.kt
@@
-import androidx.compose.ui.tooling.preview.Preview
+import org.jetbrains.compose.ui.tooling.preview.Preview
--- a/composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/feature/calldetail/component/MealSegmentControl.kt
+++ b/composeApp/src/commonMain/kotlin/com/konkuk/medicarecall/ui/feature/calldetail/component/MealSegmentControl.kt
@@
-import androidx.compose.ui.tooling.preview.Preview
+import org.jetbrains.compose.ui.tooling.preview.Preview
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@composeApp/build.gradle.kts` at line 52, Replace the Android-only Preview
import with the multiplatform Compose Preview import in the affected composable
files: change any import of androidx.compose.ui.tooling.preview.Preview to
org.jetbrains.compose.ui.tooling.preview.Preview in the files containing the
composables CallDetailScreen, SpecialNoteSection, DailyCalendar,
CareCallSummary, AudioPlayerCard, and MealSegmentControl so the commonMain
preview dependency added in build.gradle.kts won't break iOS/Desktop builds.

Comment on lines +165 to +167
// Compose preview tooling for Android Studio
add("debugImplementation", "org.jetbrains.compose.ui:ui-tooling:1.10.1")

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

# 목적:
# tooling 관련 하드코딩 버전 중복 및 중앙관리 여부 점검

echo "[1] build.gradle.kts 내 ui-tooling 하드코딩 확인"
rg -n 'ui-tooling(-preview)?:[0-9]+\.[0-9]+\.[0-9]+' composeApp/build.gradle.kts

echo
echo "[2] compose accessor 사용 여부 확인"
rg -n 'compose\.uiToolingPreview|compose\.uiTooling' composeApp/build.gradle.kts || true

echo
echo "[3] version catalog 내 tooling 정의 확인"
fd 'libs\.versions\.toml' . -x rg -n 'ui-tooling|tooling-preview|compose' {}

Repository: Medicare-Call/Medicare-Call-KMP

Length of output: 1323


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "[1] Check full build.gradle.kts to understand compose plugin setup"
head -60 composeApp/build.gradle.kts | tail -20

echo
echo "[2] Check if compose.ui-tooling accessor exists"
grep -n "compose\.ui" composeApp/build.gradle.kts || echo "No direct compose.ui accessors found"

echo
echo "[3] Check gradle plugins and accessors available"
head -30 composeApp/build.gradle.kts

echo
echo "[4] Full libs.versions.toml content"
cat gradle/libs.versions.toml

Repository: Medicare-Call/Medicare-Call-KMP

Length of output: 7392


ui-tooling 버전 문자열이 중복 하드코딩돼서 추후 드리프트 위험이 있어요.

Line 52와 Line 166에서 같은 버전을 문자열로 직접 들고 있어서, Compose 버전 업할 때 한쪽만 바뀌는 실수가 생기기 쉽습니다.

가능하면 버전 카탈로그에 추가해서 통일하는 게 유지보수에 좋아요. gradle/libs.versions.toml[libraries] 섹션에 다음처럼 추가한 후 참조하면 됩니다:

compose-ui-tooling-preview = { group = "org.jetbrains.compose.ui", name = "ui-tooling-preview", version.ref = "compose-multiplatform" }
compose-ui-tooling = { group = "org.jetbrains.compose.ui", name = "ui-tooling", version.ref = "compose-multiplatform" }

이렇게 하면 버전 업 시 한 곳만 수정해도 모든 의존성이 따라가니까 드리프트 리스크를 없앨 수 있습니다.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@composeApp/build.gradle.kts` around lines 165 - 167, 현재 build.gradle.kts에서
하드코딩된 "org.jetbrains.compose.ui:ui-tooling:1.10.1" (및 다른 위치의
"ui-tooling-preview") 의존성 문자열로 인해 버전 중복 위험이 있습니다; gradle/libs.versions.toml의
[libraries]에 compose-ui-tooling-preview 및 compose-ui-tooling 항목을
추가하고(version.ref = "compose-multiplatform"), build.gradle.kts에서
add("debugImplementation", "org.jetbrains.compose.ui:ui-tooling:1.10.1") 대신 버전
카탈로그 참조(libs.compose-ui-tooling 또는 라이브러리 이름에 맞게 조정)로 교체하여 모든 Compose 툴링 의존성을
중앙에서 관리하도록 수정하세요.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feat] 하루요약상세화면,iOS 그림자 적용

1 participant