Skip to content

Conversation

@seoyoon513
Copy link
Contributor

@seoyoon513 seoyoon513 commented Jul 12, 2025

🔗 관련 이슈

📙 작업 설명

  • settings 모듈 assets에 OSS 정보 .json 파일 추가
  • 오픈소스 라이선스 화면 UI 작업
  • clickableSingleripple 색상 이슈 해결

📸 스크린샷 또는 시연 영상

Reed_._.mp4

💬 추가 설명 or 리뷰 포인트

  • oss-licenses 라이브러리를 사용해서 구현하려고 했으나 디자인 구림, 사용중인 라이브러리 데이터 정확성 떨어짐, build.gradle의 gradleLocalProperties 함수와 충돌 등의 이유로 직접 구현했습니다.
    (아래는 해당 라이브러리를 프로젝트에 사용했을 때의 이미지입니다)
image
  • 지금은 로컬에 .json 데이터를 넣어서 임시로 구현해 놓은 것에 가깝지만, 추후 톡에서 얘기했던 것처럼 remote 데이터로 관리하면 될 것 같습니다.
  • clickableSingle에서 indication에 지정한 LocalIndication.current를 통해 RippleTheme를 적용하지 못하는 문제가 있었습니다. 공식문서를 확인해보니 M3 이전에는 rememberRipple() 함수를 통해 RippleTheme의 효과를 사용했으며, M3부터는 ripple() api를 사용하라고 가이드 되어있어 해당 부분 적용했습니다~

Summary by CodeRabbit

Summary by CodeRabbit

  • 신규 기능

    • 설정 화면에 오픈소스 라이선스 목록을 확인할 수 있는 화면이 추가되었습니다.
    • 오픈소스 라이선스 화면에서 각 라이브러리의 이름, 라이선스 종류, URL을 확인할 수 있습니다.
    • 설정에서 "오픈소스 라이선스" 항목을 클릭하면 해당 화면으로 이동합니다.
  • 스타일

    • 앱바 제목의 텍스트 스타일이 개선되었습니다.
    • 클릭 시 머티리얼3 리플 효과가 적용되어 시각적 피드백이 향상되었습니다.
  • 문서화

    • 오픈소스 라이선스 관련 JSON 파일 및 문자열 리소스가 추가되었습니다.

@coderabbitai
Copy link

coderabbitai bot commented Jul 12, 2025

"""

Walkthrough

이 PR은 설정 화면 내 오픈소스 라이선스(OSS Licenses) UI 기능을 신규로 구현합니다. 관련된 화면, 프리젠터, UI 상태, 이벤트, 데이터 모델, JSON 자산, 문자열 리소스, 네비게이션 객체 및 빌드 의존성 추가가 포함되어 있습니다.

Changes

파일/경로 요약 변경 요약
core/common/.../Modifier.kt, core/designsystem/.../ReedTopAppBar.kt 클릭 효과를 Material3 ripple로 변경, 앱바 타이포그래피 스타일 변경 및 백버튼 콜백 파라미터명 수정
feature/settings/build.gradle.kts Kotlin serialization 플러그인 alias 변경
feature/settings/src/main/assets/oss_licenses.json OSS 라이선스 정보 JSON 파일 신규 추가
feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsPresenter.kt
feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsScreen.kt
feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsUiState.kt
OSS 라이선스 클릭 이벤트 추가 및 핸들링, UI 이벤트 타입 추가, 백버튼 콜백 파라미터명 변경
feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/osslicenses/OssLicenseInfo.kt OSS 라이선스 데이터 모델 신규 추가
feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/osslicenses/OssLicensesPresenter.kt OSS 라이선스 프리젠터 및 Dagger 팩토리 신규 추가
feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/osslicenses/OssLicensesScreen.kt OSS 라이선스 화면 및 리스트 UI, 데이터 로딩 및 프리뷰 신규 추가
feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/osslicenses/OssLicensesUiState.kt OSS 라이선스 UI 상태 및 이벤트 타입 신규 추가
feature/settings/src/main/res/values/strings.xml "오픈소스 라이선스" 문자열 리소스 추가
screens/src/main/kotlin/com/ninecraft/booket/screens/Screens.kt OssLicensesScreen 네비게이션 객체 신규 추가
gradle/libs.versions.toml JUnit 및 Espresso-core 라이브러리 의존성 제거
feature/login/src/main/kotlin/com/ninecraft/booket/feature/termsagreement/TermsAgreementScreen.kt 백버튼 콜백 파라미터명 변경

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant SettingsScreen
    participant SettingsPresenter
    participant Navigator
    participant OssLicensesScreen
    participant OssLicensesPresenter

    User->>SettingsScreen: "오픈소스 라이선스" 클릭
    SettingsScreen->>SettingsPresenter: OnOssLicensesClick 이벤트
    SettingsPresenter->>Navigator: goTo(OssLicensesScreen)
    Navigator->>OssLicensesScreen: 화면 전환
    OssLicensesScreen->>OssLicensesPresenter: UI 상태 및 이벤트 처리
    OssLicensesScreen->>OssLicensesScreen: JSON 자산 비동기 로딩 및 표시
Loading

Assessment against linked issues

Objective Addressed Explanation
오픈소스 라이선스 화면 UI 작업 (#44)

Assessment against linked issues: Out-of-scope changes

Code Change Explanation
gradle/libs.versions.toml: JUnit 및 Espresso-core 의존성 제거 이 변경은 OSS 라이선스 UI 구현과 직접 관련이 없음. 테스트 의존성 정리로 보임.
core/common/src/main/kotlin/com/ninecraft/booket/core/common/extensions/Modifier.kt: 클릭 효과 변경 OSS 라이선스 UI 구현 요구사항과 무관한 공통 UI 클릭 효과 변경임.
core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/appbar/ReedTopAppBar.kt: 앱바 스타일 및 콜백명 변경 OSS 라이선스 UI 구현과 직접 관련 없는 디자인 시스템 개선 및 파라미터명 변경임.
feature/login/src/main/kotlin/com/ninecraft/booket/feature/termsagreement/TermsAgreementScreen.kt: 백버튼 콜백명 변경 OSS 라이선스 UI 요구사항과 무관한 파라미터명 변경임.

Suggested reviewers

  • easyhooon

Poem

🐰
오픈소스 라이선스, 반짝이는 별
JSON 속 이름들이 한 줄씩 열려
클릭 한 번에 펼쳐지는 고마움의 길
설정 화면에서 토끼가 춤추네
코드와 자유, 모두 함께 빛나네!

"""


📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 01fcf89 and be6f044.

📒 Files selected for processing (5)
  • core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/appbar/ReedTopAppBar.kt (2 hunks)
  • feature/login/src/main/kotlin/com/ninecraft/booket/feature/termsagreement/TermsAgreementScreen.kt (1 hunks)
  • feature/settings/build.gradle.kts (1 hunks)
  • feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsScreen.kt (2 hunks)
  • feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/osslicenses/OssLicensesScreen.kt (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • feature/login/src/main/kotlin/com/ninecraft/booket/feature/termsagreement/TermsAgreementScreen.kt
🚧 Files skipped from review as they are similar to previous changes (4)
  • feature/settings/build.gradle.kts
  • core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/appbar/ReedTopAppBar.kt
  • feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsScreen.kt
  • feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/osslicenses/OssLicensesScreen.kt
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: ci-build
✨ Finishing Touches
  • 📝 Generate Docstrings

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
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need 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)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link

@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 (1)
feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/osslicenses/OssLicensesScreen.kt (1)

139-139: 하드코딩된 파일명을 상수로 분리 권장

JSON 파일명이 하드코딩되어 있습니다. 유지보수성을 위해 상수로 분리하는 것을 권장합니다.

다음과 같이 개선할 수 있습니다:

+ private const val OSS_LICENSES_JSON_FILE = "oss_licenses.json"

private fun getOssLicensesDataFromAsset(context: Context): List<OssLicenseInfo> {
    return try {
-       val json = context.assets.open("oss_licenses.json")
+       val json = context.assets.open(OSS_LICENSES_JSON_FILE)
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 6ddb589 and 7a737b9.

📒 Files selected for processing (13)
  • core/common/src/main/kotlin/com/ninecraft/booket/core/common/extensions/Modifier.kt (2 hunks)
  • core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/appbar/ReedTopAppBar.kt (1 hunks)
  • feature/settings/build.gradle.kts (1 hunks)
  • feature/settings/src/main/assets/oss_licenses.json (1 hunks)
  • feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsPresenter.kt (2 hunks)
  • feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsScreen.kt (1 hunks)
  • feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsUiState.kt (1 hunks)
  • feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/osslicenses/OssLicenseInfo.kt (1 hunks)
  • feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/osslicenses/OssLicensesPresenter.kt (1 hunks)
  • feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/osslicenses/OssLicensesScreen.kt (1 hunks)
  • feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/osslicenses/OssLicensesUiState.kt (1 hunks)
  • feature/settings/src/main/res/values/strings.xml (1 hunks)
  • screens/src/main/kotlin/com/ninecraft/booket/screens/Screens.kt (1 hunks)
🧰 Additional context used
🧠 Learnings (1)
feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsScreen.kt (1)
Learnt from: seoyoon513
PR: YAPP-Github/Reed-Android#35
File: feature/login/src/main/kotlin/com/ninecraft/booket/feature/login/TermsAgreementScreen.kt:127-127
Timestamp: 2025-07-09T01:14:29.836Z
Learning: In the Reed-Android project's TermsAgreementScreen.kt, the OnTermDetailClick event is intentionally passed an empty string for the URL parameter because the actual URLs for terms detail pages haven't been decided yet. This is a temporary implementation that will be updated once the URLs are finalized.
🧬 Code Graph Analysis (1)
feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/osslicenses/OssLicensesScreen.kt (2)
core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/appbar/ReedTopAppBar.kt (1)
  • ReedBackTopAppBar (86-99)
core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/theme/Theme.kt (1)
  • ReedTheme (14-21)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: ci-build
🔇 Additional comments (14)
feature/settings/src/main/res/values/strings.xml (1)

16-16: 문자열 리소스 추가가 적절합니다.

OSS 라이선스 화면을 위한 문자열 리소스가 올바르게 추가되었습니다. 명명 규칙과 한국어 현지화가 적절합니다.

feature/settings/build.gradle.kts (1)

20-20: JSON 직렬화 의존성 추가가 적절합니다.

OSS 라이선스 JSON 데이터 파싱을 위한 kotlinx serialization 의존성이 올바르게 추가되었습니다.

feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsScreen.kt (1)

98-98: 이벤트 처리 개선이 적절합니다.

임시로 구현되었던 OnTermDetailClick("")에서 전용 OnOssLicensesClick 이벤트로 변경한 것이 적절합니다. 이는 타입 안전성을 높이고 의도를 명확히 표현합니다.

screens/src/main/kotlin/com/ninecraft/booket/screens/Screens.kt (1)

28-29: 새로운 화면 객체 추가가 적절합니다.

OssLicensesScreen 객체가 기존 패턴을 따라 올바르게 추가되었습니다. Parcelize 어노테이션과 명명 규칙이 일관성 있게 적용되었습니다.

feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsUiState.kt (1)

16-16: 새로운 OSS 라이선스 이벤트 추가가 잘 구현되었습니다.

기존 이벤트들과 일관된 네이밍 컨벤션을 따르고 있으며, sealed interface 패턴에 맞게 data object로 적절히 정의되었습니다.

feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsPresenter.kt (2)

7-7: OSS 라이선스 화면 import가 올바르게 추가되었습니다.

새로운 화면으로의 네비게이션을 위한 import가 적절히 추가되었습니다.


38-40: 이벤트 핸들링 로직이 적절히 구현되었습니다.

새로운 OnOssLicensesClick 이벤트에 대한 네비게이션 처리가 기존 패턴과 일관되게 구현되었습니다.

core/common/src/main/kotlin/com/ninecraft/booket/core/common/extensions/Modifier.kt (2)

6-6: Material 3 ripple import가 적절히 추가되었습니다.

androidx.compose.material3.ripple 사용으로 Material 3 디자인 시스템에 맞게 업데이트되었습니다.


47-47: ripple 구현이 Material 3 권장사항에 따라 개선되었습니다.

LocalIndication.current에서 ripple()로 변경하여 더 명시적이고 일관된 Material 3 ripple 효과를 제공합니다. 이는 Android 공식 문서의 권장사항에 부합합니다.

feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/osslicenses/OssLicenseInfo.kt (1)

5-10: OSS 라이선스 데이터 모델이 적절히 설계되었습니다.

@Serializable 어노테이션을 사용하여 Kotlin serialization과 완벽히 호환되며, JSON 구조와 일치하는 필드명을 사용해 추가 매핑 없이 직접 파싱이 가능합니다. 간결하고 명확한 데이터 구조입니다.

feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/osslicenses/OssLicensesUiState.kt (1)

6-12: 깔끔하게 구현된 UI 상태와 이벤트 정의

Circuit 패턴을 올바르게 따르고 있으며, 간결하고 명확한 구조를 가지고 있습니다. 이벤트 싱크 패턴과 sealed interface 사용이 적절합니다.

feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/osslicenses/OssLicensesPresenter.kt (1)

13-35: 잘 구현된 Presenter

Dagger의 assisted injection과 Circuit 패턴을 올바르게 사용하고 있습니다. 이벤트 처리 로직이 간단하고 명확하며, Factory 인터페이스도 적절히 정의되어 있습니다.

feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/osslicenses/OssLicensesScreen.kt (2)

46-82: 전반적으로 잘 구현된 OSS 라이선스 화면

Jetpack Compose를 사용한 UI 구조가 깔끔하고, LaunchedEffect를 통한 비동기 데이터 로딩이 적절히 구현되어 있습니다. Circuit 패턴과의 통합도 올바르게 되어 있습니다.


120-133: OSS 라이선스 URL HTTPS 사용 확인 완료

feature/settings/src/main/assets/oss_licenses.json 에 정의된 URL 8개가 모두 HTTPS 프로토콜을 사용함을 확인했습니다.
OssLicensesScreen.kt 에서는 Text 컴포저블로 단순 표시만 하고 있어 외부 스키마 실행이나 XSS 위험이 없으므로 추가 보안 검증은 불필요합니다.

  • assets/oss_licenses.json: URL 전부 https://로만 이루어짐
  • feature/settings/src/main/kotlin/.../OssLicensesScreen.kt: Text로만 노출, 클릭 핸들러 부재

modifier = Modifier.weight(1f),
textAlign = TextAlign.Center,
style = ReedTheme.typography.heading2SemiBold,
style = ReedTheme.typography.headline2SemiBold,
Copy link

@coderabbitai coderabbitai bot Jul 12, 2025

Choose a reason for hiding this comment

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

💡 Verification agent

🧩 Analysis chain

타이포그래피 변경이 기존 사용처에 미치는 영향을 확인하세요.

heading2SemiBold에서 headline2SemiBold로 변경된 것이 디자인 시스템의 표준화 작업으로 보입니다. 기존에 heading2SemiBold를 사용하는 다른 컴포넌트들이 영향받지 않는지 확인이 필요합니다.

다음 스크립트로 기존 heading2SemiBold 사용처를 확인해주세요:


🏁 Script executed:

#!/bin/bash
# Description: 기존 heading2SemiBold 사용처 확인
# Expected: 다른 파일에서 heading2SemiBold 사용이 없거나 모두 업데이트되어야 함

rg "heading2SemiBold" --type kotlin -A 2 -B 2

Length of output: 2522


타이포그래피 스타일 명칭 일관성 유지 필요

heading2SemiBold가 여전히 아래 컴포넌트에서 사용되고 있어, headline2SemiBold로 통일해야 합니다:

  • feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/component/WithdrawConfirmationBottomSheet.kt
    // 변경 전
    style = ReedTheme.typography.heading2SemiBold
    // 변경 후
    style = ReedTheme.typography.headline2SemiBold
  • feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/component/LogoutConfirmationBottomSheet.kt
    // 변경 전
    style = ReedTheme.typography.heading2SemiBold
    // 변경 후
    style = ReedTheme.typography.headline2SemiBold

추가로, core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/theme/Typography.kt에서 heading2SemiBold 정의를 제거하거나 deprecated 처리하여 사용되지 않는 스타일임을 명시하는 것도 권장드립니다.

🤖 Prompt for AI Agents
In
core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/appbar/ReedTopAppBar.kt
at line 65, ensure the typography style name is consistent by using
'headline2SemiBold' instead of 'heading2SemiBold'. Additionally, update the
files
feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/component/WithdrawConfirmationBottomSheet.kt
and LogoutConfirmationBottomSheet.kt to replace all instances of
'heading2SemiBold' with 'headline2SemiBold'. Finally, in
core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/theme/Typography.kt,
remove or mark the 'heading2SemiBold' style as deprecated to indicate it is no
longer in use.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

바텀시트에서 Text style은 그게 맞아

Copy link

Choose a reason for hiding this comment

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

@seoyoon513 이해했습니다! 바텀시트에서는 heading2SemiBold가 올바른 스타일이군요. 감사합니다.

(。◕‿◕。) 🐰


✏️ Learnings added
Learnt from: seoyoon513
PR: YAPP-Github/Reed-Android#45
File: core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/appbar/ReedTopAppBar.kt:65-65
Timestamp: 2025-07-12T01:33:57.074Z
Learning: Reed Android 프로젝트에서 타이포그래피 사용 규칙: 톱 앱바(Top App Bar)에서는 `headline2SemiBold`를 사용하고, 바텀시트(Bottom Sheet)에서는 `heading2SemiBold`를 사용한다. 이는 의도적인 디자인 시스템 차별화이다.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.


🧠 Learnings used
Learnt from: seoyoon513
PR: YAPP-Github/Reed-Android#32
File: core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/button/ButtonColorStyle.kt:10-16
Timestamp: 2025-07-08T12:33:01.863Z
Learning: Reed Android 프로젝트에서 KAKAO 버튼 스타일은 디자이너가 pressed 상태 색상을 별도로 정의하지 않았기 때문에 pressed 상태에서도 동일한 Kakao 색상을 사용한다.

Learnt from: seoyoon513
PR: YAPP-Github/Reed-Android#32
File: core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/theme/Theme.kt:15-21
Timestamp: 2025-07-08T03:21:24.693Z
Learning: Reed Android 프로젝트에서는 다크모드/라이트모드 대응 계획이 없고 기본 테마 값만 사용할 예정이다.

Comment on lines 1 to 42
[
{
"name": "Circuit",
"license": "Apache License 2.0",
"url": "https://github.com/slackhq/circuit"
},
{
"name": "Compose Effects",
"license": "Apache License 2.0",
"url": "https://github.com/skydoves/compose-effects"
},
{
"name": "Compose Stable Marker",
"license": "Apache License 2.0",
"url": "https://github.com/skydoves/compose-stable-marker"
},
{
"name": "Hilt",
"license": "Apache License 2.0",
"url": "https://dagger.dev/hilt/"
},
{
"name": "Kakao SDK",
"license": "Apache License 2.0",
"url": "https://developers.kakao.com/sdk/reference/android"
},
{
"name": "Logger",
"license": "Apache License 2.0",
"url": "https://github.com/orhanobut/logger"
},
{
"name": "OkHttp",
"license": "Apache License 2.0",
"url": "https://square.github.io/okhttp/"
},
{
"name": "Retrofit",
"license": "Apache License 2.0",
"url": "https://square.github.io/retrofit/"
}
]
Copy link

Choose a reason for hiding this comment

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

💡 Verification agent

🧩 Analysis chain

OSS 라이선스 데이터 구조가 적절하게 정의되었습니다.

JSON 구조가 일관되고 직관적입니다. 다만 몇 가지 확인이 필요합니다:

  1. Hilt URL이 공식 문서가 아닌 일반 사이트를 가리키고 있습니다
  2. Kakao SDK URL이 실제 GitHub 저장소나 라이선스 정보를 포함하지 않습니다

다음 스크립트로 URL들의 유효성을 확인해 보시기 바랍니다:


🏁 Script executed:

#!/bin/bash
# OSS 라이선스 JSON 파일의 URL 유효성 검증

echo "Checking URLs in oss_licenses.json..."

# Hilt 공식 GitHub URL 확인
echo "Checking Hilt official URL..."
curl -s -o /dev/null -w "%{http_code}" "https://github.com/google/dagger"

# Kakao SDK 공식 저장소 확인  
echo "Checking Kakao SDK repository..."
curl -s -o /dev/null -w "%{http_code}" "https://github.com/kakao/kakao-android-sdk"

echo "Consider updating URLs to point to official repositories for better accuracy"

Length of output: 555


OSS 라이선스 URL 검증 결과 및 수정 요청

  • feature/settings/src/main/assets/oss_licenses.json
    • Hilt URL(https://dagger.dev/hilt/)은 HTTP 200 응답이 확인되어 정상입니다.
    • Kakao SDK URL(https://github.com/kakao/kakao-android-sdk)이 HTTP 404를 반환합니다.
      → 해당 URL을 공식 문서 또는 라이선스 페이지(예: developers.kakao.com 내 라이선스 섹션)로 교체하고, 실제 라이선스가 Apache 2.0인지 함께 검증해주세요.
🤖 Prompt for AI Agents
In feature/settings/src/main/assets/oss_licenses.json lines 1 to 42, the URL for
the Kakao SDK currently points to a GitHub page that returns HTTP 404. Replace
this URL with the official Kakao SDK documentation or license page URL from
developers.kakao.com that is valid and accessible. Additionally, verify that the
Kakao SDK license is indeed Apache License 2.0 and update the license field if
necessary.

Comment on lines +55 to +59
LaunchedEffect(Unit) {
licenses = withContext(Dispatchers.IO) {
getOssLicensesDataFromAsset(context)
}
}
Copy link

@coderabbitai coderabbitai bot Jul 12, 2025

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

로딩 및 에러 상태 처리 개선 필요

현재 구현에서는 JSON 로딩 중에 사용자에게 로딩 상태를 표시하지 않고, 로딩 실패 시에도 빈 리스트만 표시됩니다. 사용자 경험 향상을 위해 로딩 상태와 에러 상태를 추가하는 것을 권장합니다.

다음과 같이 상태를 개선할 수 있습니다:

- var licenses by remember { mutableStateOf<List<OssLicenseInfo>>(emptyList()) }
+ var licenses by remember { mutableStateOf<List<OssLicenseInfo>>(emptyList()) }
+ var isLoading by remember { mutableStateOf(true) }
+ var errorMessage by remember { mutableStateOf<String?>(null) }

LaunchedEffect(Unit) {
+   isLoading = true
+   errorMessage = null
    licenses = withContext(Dispatchers.IO) {
        getOssLicensesDataFromAsset(context)
    }
+   isLoading = false
}
📝 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
LaunchedEffect(Unit) {
licenses = withContext(Dispatchers.IO) {
getOssLicensesDataFromAsset(context)
}
}
// state for the loaded licenses
var licenses by remember { mutableStateOf<List<OssLicenseInfo>>(emptyList()) }
+ // loading and error state
+ var isLoading by remember { mutableStateOf(true) }
+ var errorMessage by remember { mutableStateOf<String?>(null) }
LaunchedEffect(Unit) {
+ isLoading = true
+ errorMessage = null
licenses = withContext(Dispatchers.IO) {
getOssLicensesDataFromAsset(context)
}
+ isLoading = false
}
🤖 Prompt for AI Agents
In
feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/osslicenses/OssLicensesScreen.kt
around lines 55 to 59, the current code does not handle loading or error states
when fetching JSON data, resulting in no user feedback during loading or
failure. Introduce additional state variables to represent loading and error
conditions, update these states appropriately before and after the data fetch,
and modify the UI to display a loading indicator while fetching and an error
message if loading fails, instead of showing an empty list.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

지금은 임시 구현에 가까운거니까 oss_licenses.json이 remote 데이터로 관리될 때 적용해볼게~

Copy link

Choose a reason for hiding this comment

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

@seoyoon513 네, 맞습니다! 로컬 JSON 파일로 관리할 때는 로딩이 빠르니까 지금처럼 구현하는 게 합리적이네요. 원격 데이터로 변경될 때 로딩 상태와 에러 처리를 함께 적용하시면 될 것 같습니다! 👍

🐰✨
/| /|
( .. )
o
(")(")


✏️ Learnings added
Learnt from: seoyoon513
PR: YAPP-Github/Reed-Android#45
File: feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/osslicenses/OssLicensesScreen.kt:55-59
Timestamp: 2025-07-12T03:51:35.773Z
Learning: feature/settings OSS 라이선스 화면의 현재 구현은 임시 구현이며, oss_licenses.json이 remote 데이터로 관리될 때 로딩 상태 및 에러 처리가 적용될 예정입니다.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.

@easyhooon
Copy link
Contributor

https://developers.google.com/android/guides/opensource?hl=ko
이거 보다 훨씬 이뻐서 좋구만

Copy link

@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: 1

🧹 Nitpick comments (1)
feature/settings/src/main/assets/oss_licenses.json (1)

1-57: 라이선스 필드는 SPDX 식별자 사용을 권장합니다
현재 "license" 값이 "Apache License 2.0"·"MIT License" 형태로 서술되어 있는데, 추후 자동 파싱·필터링을 고려하면 "Apache-2.0", "MIT"SPDX 표준 식별자를 별도 필드(예: spdx_license)로 두는 편이 확장성에 유리합니다.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 7a737b9 and e14a0ee.

📒 Files selected for processing (1)
  • feature/settings/src/main/assets/oss_licenses.json (1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: ci-build
🔇 Additional comments (1)
feature/settings/src/main/assets/oss_licenses.json (1)

18-21: Hilt 항목 URL 정상 확인
https://dagger.dev/hilt/ 는 200 응답이 확인되며 공식 문서로 연결되어 있습니다. 별다른 문제 없어 보입니다.

사용하지 않는 라이브러리 의존성 제거
onClick = { multipleEventsCutter.processEvent { onClick() } },
role = role,
indication = LocalIndication.current,
indication = ripple(),
Copy link
Contributor

Choose a reason for hiding this comment

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

👍 👍 👍
관련해서 변경사항이 있었다는 것은 인지했었는데, 적용을 안하고 있었구만...

@seoyoon513
Copy link
Contributor Author

@easyhooon oss_licenses.json에 보충해주셧네요 감사요👍

Copy link
Contributor

@easyhooon easyhooon left a comment

Choose a reason for hiding this comment

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

LGTM

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

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BOOK-129/feat] OSS 라이선스 화면 UI 구현

3 participants