Conversation
[AndroidX] - compileSdk 35 → 36 - core-ktx 1.9.0 → 1.18.0 - appcompat 1.5.1 → 1.7.1 - constraintlayout 2.1.4 → 2.2.1 - activity 1.6.1 → 1.13.0 - fragment 1.5.5 → 1.8.9 - lifecycle 2.8.2 → 2.10.0 - recyclerview 1.3.0 → 1.4.0 - viewpager2 1.0.0 → 1.1.0 - swiperefreshlayout 1.1.0 → 1.2.0 - security-crypto 1.1.0-alpha03 → 1.1.0 - test:junit 1.1.5 → 1.3.0, espresso 3.5.1 → 3.7.0 [Compose + UI] - compose-bom 2023.03.00 → 2026.03.00 - material 1.8.0 → 1.13.0 [Kotlin / Network] - okhttp-bom 4.10.0 → 4.12.0 - kotlinx-serialization-json 1.4.1 → 1.10.0 - kotlinx-coroutines 1.6.4 → 1.10.2 - retrofit2-kotlinx-serialization 0.8.0 → 1.0.0 - gson 2.10.1 → 2.13.2 [Firebase] - firebase-bom 31.2.3 → 33.14.0 - google-services 4.3.15 → 4.4.4 [서드파티] - kakao-sdk 2.15.0 → 2.23.3 - kakao v2-link → v2-share 교체 (이름 변경) - kakao v2-story 2.17.0 고정 (서비스 종료) - naver-map 3.22.1 → 3.23.2 - coil 2.2.2 → 2.7.0 - tedpermission 3.3.0 → 3.4.2 [보류 (별도 작업)] - Retrofit 3.0 (suspend 동작 변경) - OkHttp 5.x (breaking API) - Coil 3.x (패키지명 변경) - Hilt 2.59 (AGP 9 필요) - Glide 5.x (nullability 변경) - Firebase BOM 34.x (-ktx 모듈 제거) - play-services-auth → Credential Manager 전환
|
Warning Rate limit exceeded
Your organization is not enrolled in usage-based pricing. Contact your admin to enable usage-based pricing to continue reviews beyond the rate limit, or try again in 0 minutes and 42 seconds. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (5)
📝 WalkthroughWalkthroughUpdated dependency catalog and app code to align with upgraded libraries: compileSdk bumped to 36, numerous AndroidX/Compose/Firebase/network/image-library versions updated; Coil migrated to Coil3 with OkHttp integration; Glide thumbnail usage replaced by sizeMultiplier; some Firebase KTX imports switched to non-KTX equivalents. Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 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 |
- thumbnail(float) 제거됨 → sizeMultiplier(float)로 대체 - 영향 파일: BindingAdapter, MyHistoryAdapter, MyRewardAdapter, MyUploadAdapter
- 아티팩트 io.coil-kt:coil → io.coil-kt.coil3:coil-android 변경 - coil-network-okhttp 의존성 추가 (3.x에서 네트워크 모듈 분리) - import coil.load → coil3.load 변경 - 영향 파일: BindingAdapter, MyHistoryAdapter, CourseDetailActivity
- Firebase.ktx.Firebase → Firebase.Firebase - firestore.ktx.firestore → firestore.firestore - remoteconfig.ktx.remoteConfig → remoteconfig.remoteConfig - remoteconfig.ktx.remoteConfigSettings → remoteconfig.remoteConfigSettings - 영향 파일: ServiceModule, MainActivity - BOM 34.x 업그레이드 사전 준비 (34.x에서 -ktx 모듈 제거 예정)
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (2)
gradle/libs.versions.toml (2)
43-43: Plan to retire the archived JakeWharton converter on the next Retrofit bump.This version bump keeps the project on an artifact whose repository is archived and whose README says it has moved into Retrofit. Retrofit 2.10 announced the first-party coordinates as
com.squareup.retrofit2:converter-kotlinx-serialization, unchanged from the old1.0.0code. Sinceretrofitis still pinned to2.9.0here, I wouldn’t block this PR, but I would track a follow-up instead of treating this catalog entry as the steady state. (github.com)🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@gradle/libs.versions.toml` at line 43, The dependency entry retrofit2-kotlinx-serialization = "1.0.0" references the archived JakeWharton converter; keep this change for now but add a tracked follow-up to replace this catalog key with the first-party artifact coordinates com.squareup.retrofit2:converter-kotlinx-serialization when Retrofit is bumped to >=2.10. Update any documentation or a TODO in the repo referencing the toml key retrofit2-kotlinx-serialization and the pinned retrofit version (2.9.0) so the follow-up is visible to maintainers.
3-3: Open thetargetSdk 36follow-up now.
compileSdkis already moving to36through this catalog, but Android Developers now say Google Play will require API 36 in August 2026. Sinceapp/build.gradle:24-27also readstargetSdkfrom the catalog, I’d capture the behavior-change test pass in a separate ticket now rather than waiting for the next store submission. (developer.android.com)🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@gradle/libs.versions.toml` at line 3, The catalog only sets compileSdk = "36" but app/build.gradle also reads targetSdk from the same catalog, so add or update a targetSdk entry in gradle/libs.versions.toml (matching the compileSdk value) so the app's targetSdk is explicitly set to "36"; modify the libs.versions.toml to include targetSdk = "36" and ensure app/build.gradle continues to read that property (referencing the compileSdk and targetSdk keys and app/build.gradle's usage) so behavior-change testing can be captured now.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@gradle/libs.versions.toml`:
- Around line 63-64: Remove the unused kakao-story entry from the shared Kakao
bundle in libs.versions.toml to avoid pinning that module to 2.17.0 and creating
a mixed-version dependency graph; keep kakao-sdk = "2.23.3" and update the
libs.bundles.kakao bundle to only reference kakao-sdk (and any other Kakao
modules at matching versions), then run a dependency scan/build to verify
nothing in the codebase references kakao-story before committing the change.
---
Nitpick comments:
In `@gradle/libs.versions.toml`:
- Line 43: The dependency entry retrofit2-kotlinx-serialization = "1.0.0"
references the archived JakeWharton converter; keep this change for now but add
a tracked follow-up to replace this catalog key with the first-party artifact
coordinates com.squareup.retrofit2:converter-kotlinx-serialization when Retrofit
is bumped to >=2.10. Update any documentation or a TODO in the repo referencing
the toml key retrofit2-kotlinx-serialization and the pinned retrofit version
(2.9.0) so the follow-up is visible to maintainers.
- Line 3: The catalog only sets compileSdk = "36" but app/build.gradle also
reads targetSdk from the same catalog, so add or update a targetSdk entry in
gradle/libs.versions.toml (matching the compileSdk value) so the app's targetSdk
is explicitly set to "36"; modify the libs.versions.toml to include targetSdk =
"36" and ensure app/build.gradle continues to read that property (referencing
the compileSdk and targetSdk keys and app/build.gradle's usage) so
behavior-change testing can be captured now.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
There was a problem hiding this comment.
Actionable comments posted: 2
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
app/src/main/java/com/runnect/runnect/presentation/mypage/history/adapter/MyHistoryAdapter.kt (1)
53-57:⚠️ Potential issue | 🔴 CriticalBug: Image is loaded twice with both Glide and Coil into the same ImageView.
Lines 53-55 load
data.imgwith Glide intoivMyPageHistoryCourse, then line 57 immediately loads the same image with Coil into the same view. This causes:
- Wasteful duplicate network/decode operations
- Race condition where Coil's result overwrites Glide's
- Inconsistent behavior compared to other adapters
Remove one of the image loading calls. If migrating to Coil 3.x, remove the Glide call:
🐛 Proposed fix: Remove duplicate Glide load
fun onBind(data: HistoryInfoDTO) { with(binding) { - Glide.with(itemView).load(data.img).sizeMultiplier(0.3f) - .format(DecodeFormat.PREFER_RGB_565) - .into(ivMyPageHistoryCourse) - - ivMyPageHistoryCourse.load(data.img) + ivMyPageHistoryCourse.load(data.img) { + // Add Coil 3.x configuration if needed for memory optimization + } tvMyPageHistoryCourseName.text = data.titleAlternatively, if you want to keep Glide with
sizeMultiplierfor memory optimization, remove the Coil import and theload(data.img)call.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@app/src/main/java/com/runnect/runnect/presentation/mypage/history/adapter/MyHistoryAdapter.kt` around lines 53 - 57, In MyHistoryAdapter remove the duplicate image load so the same view ivMyPageHistoryCourse isn't loaded by both Glide and Coil; specifically choose one loader (either keep the Glide chain using Glide.with(itemView).load(data.img).sizeMultiplier(0.3f)...into(ivMyPageHistoryCourse) or keep the Coil extension call ivMyPageHistoryCourse.load(data.img)) and delete the other call (and corresponding import) to avoid duplicate network/decoding and race conditions.
🧹 Nitpick comments (3)
app/src/main/java/com/runnect/runnect/presentation/mypage/reward/adapter/MyRewardAdapter.kt (1)
18-21: Samethumbnail()tosizeMultiplier()behavioral change.Same concern as in
MyUploadAdapter.kt:sizeMultiplier()scales the final image size rather than providing progressive loading. Verify this matches the intended behavior.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@app/src/main/java/com/runnect/runnect/presentation/mypage/reward/adapter/MyRewardAdapter.kt` around lines 18 - 21, The Glide call in MyRewardAdapter.kt uses sizeMultiplier(0.3f) which scales the final decoded image instead of providing progressive/placeholder loading; if you intended progressive thumbnail loading like in MyUploadAdapter, replace sizeMultiplier(0.3f) with thumbnail(0.3f) on the same Glide request (Glide.with(itemView).load(data.img).thumbnail(0.3f).into(ivItemMyPageRewardCircleFrame)) so Glide fetches a smaller preview first, or alternatively use RequestOptions.override(width, height) when you need a fixed decode size; update the code path that binds images in MyRewardAdapter (the Glide.with(...).load(...) chain) accordingly.app/src/main/java/com/runnect/runnect/util/binding/BindingAdapter.kt (1)
45-51: Samethumbnail()tosizeMultiplier()behavioral change in Glide.The
setDiscoverItemImagebinding adapter also usessizeMultiplier(0.3f)instead of the previousthumbnail(0.3f). Same behavioral difference applies as noted in the adapter classes.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@app/src/main/java/com/runnect/runnect/util/binding/BindingAdapter.kt` around lines 45 - 51, The Glide call in the ImageView.setDiscoverItemImage binding adapter uses sizeMultiplier(0.3f) which changes behavior compared to the original thumbnail(0.3f); update the Glide chain in setDiscoverItemImage to use thumbnail(0.3f) (preserving any existing sizeMultiplier/format needs) so it loads a lower-resolution placeholder image while the full image loads, keeping the rest of the Glide options (e.g., format) intact.app/build.gradle (1)
120-121: Consider configuring Coil's ImageLoader with your existing OkHttpClient for consistency.Coil 3.x with
coil-network-okhttpuses its own defaultOkHttpClientunless explicitly configured. The app has customOkHttpClientinstances inRetrofitModule.kt(lines 67–85) with security configurations (TLS 1.2+ enforcement, auth interceptor, logging) viaNetworkSecurityUtil.createSecureOkHttpClient().Without explicit
ImageLoaderconfiguration, Coil images won't benefit from these security settings and interceptors. Consider providing a customImageLoaderthat reuses the app'sOkHttpClientvia Hilt or inApplicationClassfor consistent network behavior.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@app/build.gradle` around lines 120 - 121, Coil is using its own default OkHttpClient; update app to construct an ImageLoader that reuses the same secure OkHttpClient created by NetworkSecurityUtil.createSecureOkHttpClient() (the client used in RetrofitModule.kt) and provide that ImageLoader via Hilt or in your Application class; specifically, create/provide an ImageLoader instance that sets the okHttpClient to the existing secure client (so coil-network-okhttp uses your interceptors, TLS settings and logging) and replace any default/implicit ImageLoader usage with this provided instance.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In
`@app/src/main/java/com/runnect/runnect/presentation/mypage/upload/adapter/MyUploadAdapter.kt`:
- Around line 67-70: The Glide call in MyUploadAdapter.kt currently uses
sizeMultiplier(0.3f), which removes progressive thumbnail loading; to restore
the previous behavior replace it with thumbnail(RequestBuilder) by creating a
RequestBuilder via
Glide.with(itemView).asDrawable().sizeMultiplier(0.3f).load(data.img) and
passing that builder into the main
Glide.with(itemView).load(data.img).thumbnail(...).format(DecodeFormat.PREFER_RGB_565).into(ivMyPageUploadCourse);
alternatively, if you intentionally only want memory optimization and no
progressive loading, leave sizeMultiplier as-is and add a brief comment
explaining that choice.
In `@gradle/libs.versions.toml`:
- Line 31: The Compose BOM version value compose-bom = "2026.03.00" is invalid
and causes build failures; update the compose-bom entry in libs.versions.toml
(the compose-bom key) to a valid released Compose BOM version (for example
replace "2026.03.00" with an available version such as "2024.12.00" or the
latest published BOM) so the dependency resolves from Maven Central.
---
Outside diff comments:
In
`@app/src/main/java/com/runnect/runnect/presentation/mypage/history/adapter/MyHistoryAdapter.kt`:
- Around line 53-57: In MyHistoryAdapter remove the duplicate image load so the
same view ivMyPageHistoryCourse isn't loaded by both Glide and Coil;
specifically choose one loader (either keep the Glide chain using
Glide.with(itemView).load(data.img).sizeMultiplier(0.3f)...into(ivMyPageHistoryCourse)
or keep the Coil extension call ivMyPageHistoryCourse.load(data.img)) and delete
the other call (and corresponding import) to avoid duplicate network/decoding
and race conditions.
---
Nitpick comments:
In `@app/build.gradle`:
- Around line 120-121: Coil is using its own default OkHttpClient; update app to
construct an ImageLoader that reuses the same secure OkHttpClient created by
NetworkSecurityUtil.createSecureOkHttpClient() (the client used in
RetrofitModule.kt) and provide that ImageLoader via Hilt or in your Application
class; specifically, create/provide an ImageLoader instance that sets the
okHttpClient to the existing secure client (so coil-network-okhttp uses your
interceptors, TLS settings and logging) and replace any default/implicit
ImageLoader usage with this provided instance.
In
`@app/src/main/java/com/runnect/runnect/presentation/mypage/reward/adapter/MyRewardAdapter.kt`:
- Around line 18-21: The Glide call in MyRewardAdapter.kt uses
sizeMultiplier(0.3f) which scales the final decoded image instead of providing
progressive/placeholder loading; if you intended progressive thumbnail loading
like in MyUploadAdapter, replace sizeMultiplier(0.3f) with thumbnail(0.3f) on
the same Glide request
(Glide.with(itemView).load(data.img).thumbnail(0.3f).into(ivItemMyPageRewardCircleFrame))
so Glide fetches a smaller preview first, or alternatively use
RequestOptions.override(width, height) when you need a fixed decode size; update
the code path that binds images in MyRewardAdapter (the
Glide.with(...).load(...) chain) accordingly.
In `@app/src/main/java/com/runnect/runnect/util/binding/BindingAdapter.kt`:
- Around line 45-51: The Glide call in the ImageView.setDiscoverItemImage
binding adapter uses sizeMultiplier(0.3f) which changes behavior compared to the
original thumbnail(0.3f); update the Glide chain in setDiscoverItemImage to use
thumbnail(0.3f) (preserving any existing sizeMultiplier/format needs) so it
loads a lower-resolution placeholder image while the full image loads, keeping
the rest of the Glide options (e.g., format) intact.
🪄 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: defaults
Review profile: CHILL
Plan: Pro
Run ID: 57a7dc23-a67c-4eaa-be78-c8aef826f84e
📒 Files selected for processing (9)
app/build.gradleapp/src/main/java/com/runnect/runnect/di/ServiceModule.ktapp/src/main/java/com/runnect/runnect/presentation/MainActivity.ktapp/src/main/java/com/runnect/runnect/presentation/detail/CourseDetailActivity.ktapp/src/main/java/com/runnect/runnect/presentation/mypage/history/adapter/MyHistoryAdapter.ktapp/src/main/java/com/runnect/runnect/presentation/mypage/reward/adapter/MyRewardAdapter.ktapp/src/main/java/com/runnect/runnect/presentation/mypage/upload/adapter/MyUploadAdapter.ktapp/src/main/java/com/runnect/runnect/util/binding/BindingAdapter.ktgradle/libs.versions.toml
✅ Files skipped from review due to trivial changes (1)
- app/src/main/java/com/runnect/runnect/di/ServiceModule.kt
app/src/main/java/com/runnect/runnect/presentation/mypage/upload/adapter/MyUploadAdapter.kt
Show resolved
Hide resolved
- compose-bom 2026.03.00 → 2026.03.01 (최신 패치) - kakao-story 미사용 의존성 제거 (혼합 버전 해소) - Glide sizeMultiplier → thumbnail(RequestBuilder) 패턴으로 변경 (progressive loading 동작 유지)
작업 배경
변경 사항
AndroidX
Compose + UI
Kotlin / Network
Firebase
Image (breaking changes 대응)
thumbnail(float)→sizeMultiplier(float)(4파일)Firebase KTX → non-KTX 마이그레이션
com.google.firebase.ktx.Firebase→com.google.firebase.Firebasefirestore.ktx.firestore→firestore.firestoreremoteconfig.ktx.*→remoteconfig.*서드파티
보류 (별도 작업 필요)
영향 범위
gradle/libs.versions.toml버전 업데이트thumbnail()→sizeMultiplier()변경Test Plan
./gradlew assembleDebug로컬 빌드 성공 확인🤖 Generated with Claude Code
Summary by CodeRabbit