Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 40 additions & 4 deletions app/proguard-rules.pro
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,47 @@
# hide the original source file name.
#-renamesourcefileattribute SourceFile

# kakao login
-keep class com.kakao.sdk.**.model.* { <fields>; }
-keep class * extends com.google.gson.TypeAdapter

# https://github.com/square/okhttp/pull/6792
-dontwarn org.bouncycastle.jsse.**
-dontwarn org.conscrypt.*
-dontwarn org.openjsse.**

# 카카오 SDK 관련 난독화 방지
-keep class com.kakao.** { *; }
-keep interface com.kakao.** { *; }
-dontwarn com.kakao.**

# 카카오 로그인 SDK
-keep class com.kakao.sdk.** { *; }
-keep interface com.kakao.sdk.** { *; }
-dontwarn com.kakao.sdk.**

Comment on lines +28 to +37
Copy link

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

카카오 영역 keep 범위 축소

com.kakao.**까지 전역 keep/dontwarn는 과도합니다. SDK 영역(com.kakao.sdk.**)만 유지하고 나머지는 제거해 크기/최적화 이점을 보존하세요.

-# 카카오 SDK 관련 난독화 방지
--keep class com.kakao.** { *; }
--keep interface com.kakao.** { *; }
--dontwarn com.kakao.**
-
-# 카카오 로그인 SDK
 -keep class com.kakao.sdk.** { *; }
 -keep interface com.kakao.sdk.** { *; }
 -dontwarn com.kakao.sdk.**

Committable suggestion skipped: line range outside the PR's diff.

🤖 Prompt for AI Agents
In app/proguard-rules.pro around lines 28 to 37, the current rules keep and
suppress warnings for the entire com.kakao package (lines keeping com.kakao.**
and dontwarn com.kakao.**), which is too broad; remove the three global
com.kakao rules and retain only the SDK-scoped rules for com.kakao.sdk.** (keep
class, keep interface, dontwarn) so that only the Kakao SDK is exempted from
obfuscation/warnings and the rest of the package can be optimized.

# 카카오 인증 관련
-keep class com.kakao.sdk.auth.** { *; }
-keep class com.kakao.sdk.user.** { *; }
-keep class com.kakao.sdk.common.** { *; }

# 네트워크 통신 관련
-keepclassmembers class * {
@com.kakao.sdk.** *;
}

# Retrofit/OkHttp
-keep class retrofit2.** { *; }
-keep class okhttp3.** { *; }
-dontwarn retrofit2.**
-dontwarn okhttp3.**

Comment on lines +48 to +53
Copy link

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Retrofit/OkHttp 전역 keep 제거

R8가 네트워크 스택을 문제없이 축소합니다. 전역 keep는 바이너리 비대화만 초래합니다. 경고 억제가 필요하면 구체 원인에 한정해 주세요.

-# Retrofit/OkHttp
--keep class retrofit2.** { *; }
--keep class okhttp3.** { *; }
 -dontwarn retrofit2.**
 -dontwarn okhttp3.**
📝 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
# Retrofit/OkHttp
-keep class retrofit2.** { *; }
-keep class okhttp3.** { *; }
-dontwarn retrofit2.**
-dontwarn okhttp3.**
-dontwarn retrofit2.**
-dontwarn okhttp3.**
🤖 Prompt for AI Agents
In app/proguard-rules.pro around lines 48–53, remove the global keep/dontwarn
rules for retrofit2 and okhttp3 because they prevent R8 from shrinking the
network stack; delete those four lines and instead add only targeted
keep/dontwarn entries if you encounter specific missing-reflection or warning
cases (identify the exact class/package causing the warning and restrict rules
to that scope).

# JSON 직렬화 관련
-keep class com.google.gson.** { *; }
-keep class * implements com.google.gson.TypeAdapterFactory
-keep class * implements com.google.gson.JsonSerializer
-keep class * implements com.google.gson.JsonDeserializer

# Intent 관련 유지
-keep class * extends android.app.Activity
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}

-keep class *.BuildConfig { *; }
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.addCallback
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.activity.viewModels
import com.into.websoso.core.common.util.setupWhiteStatusBar
import com.into.websoso.core.designsystem.theme.WebsosoTheme
Expand All @@ -17,6 +18,7 @@ class NotificationDetailActivity : ComponentActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
this.setupWhiteStatusBar()

Comment on lines +21 to 23
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

enableEdgeToEdge와 기존 흰색 상태바 설정 충돌 가능 — SystemBarStyle로 일원화 권장

edge-to-edge 활성화 후 불투명 흰색 상태바를 강제하면 콘텐츠 겹침/아이콘 대비가 어긋날 수 있습니다. setupWhiteStatusBar()를 제거하고 SystemBarStyle.auto(TRANSPARENT, TRANSPARENT)로 일괄 제어하세요.

-        enableEdgeToEdge()
-        this.setupWhiteStatusBar()
+        enableEdgeToEdge(
+            statusBarStyle = androidx.activity.SystemBarStyle.auto(
+                android.graphics.Color.TRANSPARENT,
+                android.graphics.Color.TRANSPARENT
+            ),
+            navigationBarStyle = androidx.activity.SystemBarStyle.auto(
+                android.graphics.Color.TRANSPARENT,
+                android.graphics.Color.TRANSPARENT
+            ),
+        )

추가로, 상단/하단 시스템바 영역을 피하도록 Compose 루트에 windowInsetsPadding(WindowInsets.systemBars)가 적용되어 있는지 화면 단에서 한 번 더 확인 부탁드립니다.


enableEdgeToEdge 함수와 setupWhiteStatusBar 함수의 정의 및 호출 방식을 확인하기 위해 아래 스크립트를 실행합니다.


🏁 Script executed:

#!/bin/bash
# enableEdgeToEdge 함수 정의 확인
rg -nP 'fun enableEdgeToEdge' -C3

# enableEdgeToEdge 호출 위치 확인
rg -n 'enableEdgeToEdge\(' -C2

# setupWhiteStatusBar 함수 정의 확인
rg -nP 'fun setupWhiteStatusBar' -C3

# NotificationDetailActivity imports 및 상단 코드 확인
sed -n '1,50p' app/src/main/java/com/into/websoso/ui/notificationDetail/NotificationDetailActivity.kt

Length of output: 4613


설정된 setupWhiteStatusBar 구현과 enableEdgeToEdge 확장 함수가 제안한 파라미터를 지원하는지 추가 확인합니다.


🏁 Script executed:

#!/bin/bash
# setupWhiteStatusBar 함수 정의 및 구현 확인
rg -n "setupWhiteStatusBar" -C5 -g '*.kt'

Length of output: 8749


🌐 Web query:

androidx.activity enableEdgeToEdge statusBarStyle navigationBarStyle extension function signature

💡 Result:

Kotlin extension signature (from androidx.activity EdgeToEdge.kt):

fun ComponentActivity.enableEdgeToEdge(
statusBarStyle: SystemBarStyle = SystemBarStyle.auto(Color.TRANSPARENT, Color.TRANSPARENT),
navigationBarStyle: SystemBarStyle = SystemBarStyle.auto(DefaultLightScrim, DefaultDarkScrim),
)

Source: AndroidX source and docs. [1][2]

References

  • EdgeToEdge.enable (Android docs). [1]
  • EdgeToEdge.kt source (android.googlesource.com) showing the Kotlin extension and default params. [2]

setupWhiteStatusBar 제거하고 enableEdgeToEdge 호출로 상태/내비게이션 바 스타일 일원화

  • NotificationDetailActivity.kt onCreate에서
    -    enableEdgeToEdge()
    -    this.setupWhiteStatusBar()
    +    enableEdgeToEdge(
    +        statusBarStyle = androidx.activity.SystemBarStyle.auto(
    +            android.graphics.Color.TRANSPARENT,
    +            android.graphics.Color.TRANSPARENT
    +        ),
    +        navigationBarStyle = androidx.activity.SystemBarStyle.auto(
    +            android.graphics.Color.TRANSPARENT,
    +            android.graphics.Color.TRANSPARENT
    +        )
    +    )
  • Compose 루트에 windowInsetsPadding(WindowInsets.systemBars) 적용 여부를 반드시 확인하세요.
📝 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
enableEdgeToEdge()
this.setupWhiteStatusBar()
// Remove the old calls and replace with a unified edge-to-edge setup:
- enableEdgeToEdge()
enableEdgeToEdge(
statusBarStyle = androidx.activity.SystemBarStyle.auto(
android.graphics.Color.TRANSPARENT,
android.graphics.Color.TRANSPARENT
),
navigationBarStyle = androidx.activity.SystemBarStyle.auto(
android.graphics.Color.TRANSPARENT,
android.graphics.Color.TRANSPARENT
)
)
🤖 Prompt for AI Agents
In
app/src/main/java/com/into/websoso/ui/notificationDetail/NotificationDetailActivity.kt
around lines 21-23, remove the explicit this.setupWhiteStatusBar() call and rely
solely on enableEdgeToEdge() to unify status/navigation bar styling; then ensure
the Compose root content applies WindowInsets.systemBars by adding
windowInsetsPadding(WindowInsets.systemBars) (or equivalent InsetsPaddingValues)
to the top-level composable so content respects system bars and looks correct
with edge-to-edge mode.

handleBackPressed()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@ package com.into.websoso.ui.notificationDetail

import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.systemBars
import androidx.compose.foundation.layout.windowInsetsPadding
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
Expand All @@ -26,7 +29,8 @@ fun NotificationDetailScreen(
Column(
modifier = modifier
.fillMaxSize()
.background(White),
.background(White)
.windowInsetsPadding(WindowInsets.systemBars),
) {
NotificationAppBar(onBackButtonClick)
NotificationDetailContent(
Expand Down
8 changes: 8 additions & 0 deletions core/auth-kakao/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,14 @@ plugins {

android {
setNamespace("core.auth_kakao")

buildTypes {
release {
isMinifyEnabled = false

consumerProguardFiles("consumer-rules.pro")
}
}
}

dependencies {
Expand Down
37 changes: 37 additions & 0 deletions core/auth-kakao/consumer-rules.pro
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}

# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable

# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile

# consumer-rules.pro
-keep class com.kakao.sdk.** { *; }
-keep interface com.kakao.sdk.** { *; }
-dontwarn com.kakao.sdk.**

# 카카오 로그인 관련 클래스 보호
-keep class com.kakao.sdk.auth.** { *; }
-keep class com.kakao.sdk.user.** { *; }
-keep class com.kakao.sdk.common.** { *; }
Comment on lines +24 to +31
Copy link

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

중복 keep 규칙 정리

com.kakao.sdk.** 전체 keep 후 하위 패키지(auth/user/common)를 다시 keep하는 것은 중복입니다. 최소 규칙만 유지해 난독화/축소 효율을 확보하세요.

- -keep class com.kakao.sdk.** { *; }
- -keep interface com.kakao.sdk.** { *; }
- -dontwarn com.kakao.sdk.**
-
- # 카카오 로그인 관련 클래스 보호
- -keep class com.kakao.sdk.auth.** { *; }
- -keep class com.kakao.sdk.user.** { *; }
- -keep class com.kakao.sdk.common.** { *; }
+ -keep class com.kakao.sdk.** { *; }
+ -keep interface com.kakao.sdk.** { *; }
+ -dontwarn com.kakao.sdk.**
📝 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
-keep class com.kakao.sdk.** { *; }
-keep interface com.kakao.sdk.** { *; }
-dontwarn com.kakao.sdk.**
# 카카오 로그인 관련 클래스 보호
-keep class com.kakao.sdk.auth.** { *; }
-keep class com.kakao.sdk.user.** { *; }
-keep class com.kakao.sdk.common.** { *; }
-keep class com.kakao.sdk.** { *; }
-keep interface com.kakao.sdk.** { *; }
-dontwarn com.kakao.sdk.**
🤖 Prompt for AI Agents
In core/auth-kakao/consumer-rules.pro around lines 24 to 31, there are redundant
keep rules: keeping com.kakao.sdk.** already protects all subpackages so the
additional keep lines for auth, user, and common are duplicated; remove the
specific subpackage keep entries and the duplicate interface keep so only a
minimal, non-redundant set of rules remains (e.g., keep com.kakao.sdk.** { *; }
and dontwarn com.kakao.sdk.**), leaving comments as needed to document why the
broad rule exists.


# 네트워크 관련 (카카오 SDK 의존성)
-keep class retrofit2.** { *; }
-keep class okhttp3.** { *; }
-dontwarn retrofit2.**
-dontwarn okhttp3.**
21 changes: 0 additions & 21 deletions core/auth-kakao/proguard-rules.pro

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -34,24 +34,36 @@ class KakaoAuthClient

private fun loginWithKakaotalk(loginContinuation: CancellableContinuation<AuthToken>) {
client.loginWithKakaoTalk(context) { token, error ->
if (error != null) {
if (error is ClientError && error.reason == ClientErrorCause.Cancelled) {
loginContinuation.resumeWithException(error)
when {
error != null -> {
when {
error is ClientError && error.reason == ClientErrorCause.Cancelled -> {
loginWithKakaoAccount(loginContinuation)
}

else -> loginWithKakaoAccount(loginContinuation)
}
}
Comment on lines +37 to 46
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

사용자 취소(Cancelled) 시 자동 계정 로그인으로 강제 폴백 — UX 역행 가능

톡 로그인 화면에서 사용자가 취소한 경우 계정 로그인으로 자동 전환되면 예기치 않은 화면 전환이 발생합니다. 취소는 상위로 전달(취소/실패 처리)하고, 비-취소 오류만 계정 로그인으로 폴백하는 구분을 권장합니다.

-                when {
-                    error != null -> {
-                        when {
-                            error is ClientError && error.reason == ClientErrorCause.Cancelled -> {
-                                loginWithKakaoAccount(loginContinuation)
-                            }
-
-                            else -> loginWithKakaoAccount(loginContinuation)
-                        }
-                    }
+                when {
+                    error != null -> {
+                        if (error is ClientError && error.reason == ClientErrorCause.Cancelled) {
+                            // 사용자 취소는 상위로 전달
+                            if (loginContinuation.isActive) {
+                                loginContinuation.resumeWithException(error)
+                            }
+                        } else {
+                            // 비-취소 오류만 계정 로그인으로 폴백
+                            loginWithKakaoAccount(loginContinuation)
+                        }
+                    }

loginContinuation의 정의와 resumeWithException 호출 가능 여부를 확인하기 위해 아래 스크립트를 실행합니다:


🏁 Script executed:

#!/bin/bash
# KakaoAuthClient.kt에서 loginContinuation의 선언 위치 및 타입 확인
rg -n "loginContinuation" -C3 core/auth-kakao/src/main/java/com/into/websoso/core/auth_kakao/KakaoAuthClient.kt

# Continuation 인터페이스에서 resumeWithException 메서드 존재 여부 확인
rg -n "resumeWithException" -C3 --type=kt

Length of output: 2098


취소 시 상위로 전달하고, 비-취소 오류에만 폴백 적용
톡 로그인 중 사용자가 취소(ClientErrorCause.Cancelled)한 경우 loginContinuation.resumeWithException(error)를 호출해 취소를 상위로 전달하고, 그 외 오류에 대해서만 loginWithKakaoAccount(loginContinuation)로 폴백하세요.

🤖 Prompt for AI Agents
In
core/auth-kakao/src/main/java/com/into/websoso/core/auth_kakao/KakaoAuthClient.kt
around lines 37 to 46, the current error handling always falls back to
loginWithKakaoAccount even when the user explicitly cancelled; change the logic
so that when error is a ClientError with reason ClientErrorCause.Cancelled you
call loginContinuation.resumeWithException(error) to propagate the cancellation
upward, and only for non-cancel errors call
loginWithKakaoAccount(loginContinuation) as the fallback.


loginWithKakaoAccount(loginContinuation)
} else if (token != null) {
loginContinuation.resume(token.accessToken.toAuthToken())
token != null -> loginContinuation.resume(token.accessToken.toAuthToken())

else -> loginWithKakaoAccount(loginContinuation)
}
Comment on lines +48 to 51
Copy link

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

이중 resume 가드 추가

콜백 도중 코루틴이 취소될 수 있으니 isActive 확인 후 resume 하세요.

-                    token != null -> loginContinuation.resume(token.accessToken.toAuthToken())
+                    token != null -> if (loginContinuation.isActive) {
+                        loginContinuation.resume(token.accessToken.toAuthToken())
+                    }
@@
-                    error != null -> loginContinuation.resumeWithException(error)
+                    error != null -> if (loginContinuation.isActive) {
+                        loginContinuation.resumeWithException(error)
+                    }
@@
-                    else -> {
-                        loginContinuation.resumeWithException(
-                            IllegalStateException("Both token and error are null"),
-                        )
-                    }
+                    else -> if (loginContinuation.isActive) {
+                        loginContinuation.resumeWithException(
+                            IllegalStateException("Both token and error are null"),
+                        )
+                    }

Also applies to: 56-67

🤖 Prompt for AI Agents
core/auth-kakao/src/main/java/com/into/websoso/core/auth_kakao/KakaoAuthClient.kt
lines 48-51 (and similarly for 56-67): the coroutine continuation may be
cancelled while the callback runs, so guard all continuation.resume(...) calls
by checking that the coroutine Job is still active before resuming. Implement a
check like continuation.context[Job]?.isActive == true (or use the
coroutineScope's isActive) and only call resume when true; if not active, skip
the resume to avoid double-resume/cancellation races.

}
}

private fun loginWithKakaoAccount(loginContinuation: CancellableContinuation<AuthToken>) {
client.loginWithKakaoAccount(context) { token, error ->
if (error != null) {
loginContinuation.resumeWithException(error)
} else if (token != null) {
loginContinuation.resume(token.accessToken.toAuthToken())
when {
error != null -> loginContinuation.resumeWithException(error)

token != null -> loginContinuation.resume(token.accessToken.toAuthToken())

else -> {
loginContinuation.resumeWithException(
IllegalStateException("Both token and error are null"),
)
}
}
}
}
Expand Down
8 changes: 8 additions & 0 deletions feature/signin/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,14 @@ plugins {

android {
setNamespace("feature.signin")

buildTypes {
release {
isMinifyEnabled = false

consumerProguardFiles("consumer-rules.pro")
}
}
Comment on lines +10 to +16
Copy link

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

consumerProguardFiles 선언 위치 부적절 — buildType별 선언 대신 defaultConfig로 노출하세요

consumer rules는 AAR에 포함되어 소비자(App)에 전달되어야 하므로 variant(빌드타입)별이 아닌 기본 설정에 선언하는 것이 안전합니다.

적용 diff(해당 범위 내 수정):

 release {
     isMinifyEnabled = false
-
-    consumerProguardFiles("consumer-rules.pro")
 }

추가로 android 블록에 다음을 배치:

android {
    defaultConfig {
        consumerProguardFiles("consumer-rules.pro")
    }
}
🤖 Prompt for AI Agents
In feature/signin/build.gradle.kts around lines 10 to 16, consumerProguardFiles
is incorrectly declared inside the release buildType; move the
consumerProguardFiles("consumer-rules.pro") declaration into the
android.defaultConfig block instead and remove it from the buildTypes block so
the consumer proguard rules are included in the AAR for all variants.

}

dependencies {
Expand Down
37 changes: 37 additions & 0 deletions feature/signin/consumer-rules.pro
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}

# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable

# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile

# consumer-rules.pro (feature.signin 모듈)
-keep class com.kakao.sdk.** { *; }
-keep interface com.kakao.sdk.** { *; }
-dontwarn com.kakao.sdk.**

# 카카오 로그인 관련 클래스 보호
-keep class com.kakao.sdk.auth.** { *; }
-keep class com.kakao.sdk.user.** { *; }
-keep class com.kakao.sdk.common.** { *; }
Comment on lines +24 to +31
Copy link

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Kakao SDK keep 규칙이 과도/중복입니다 — 축소/난독화 이점 저하

-keep class com.kakao.sdk.**로 이미 하위 패키지를 모두 포함합니다. 인터페이스/세부 패키지의 중복 keep은 제거하세요.

권장 diff:

- -keep class com.kakao.sdk.** { *; }
- -keep interface com.kakao.sdk.** { *; }
- -dontwarn com.kakao.sdk.**
-
- # 카카오 로그인 관련 클래스 보호
- -keep class com.kakao.sdk.auth.** { *; }
- -keep class com.kakao.sdk.user.** { *; }
- -keep class com.kakao.sdk.common.** { *; }
+ -keep class com.kakao.sdk.** { *; }
+ -dontwarn com.kakao.sdk.**

가능하면 코어 모듈(core/auth-kakao)의 consumer-rules에만 집중적으로 배치하고, feature 모듈에서는 중복을 피하는 것이 좋습니다.

🤖 Prompt for AI Agents
In feature/signin/consumer-rules.pro around lines 24 to 31, the ProGuard/R8
rules are redundant because -keep class com.kakao.sdk.** already preserves all
subpackages; remove the duplicate -keep interface com.kakao.sdk.**, the repeated
-keep class entries for auth/user/common, and the unnecessary dontwarn unless
you have a specific unresolved warning to suppress; instead keep only the
minimal package/entries actually required by this feature (or remove the file
entirely) and relocate any broad keep rules to the core/auth-kakao module's
consumer-rules so feature modules do not duplicate them.


# 네트워크 관련 (카카오 SDK 의존성)
-keep class retrofit2.** { *; }
-keep class okhttp3.** { *; }
-dontwarn retrofit2.**
-dontwarn okhttp3.**
Comment on lines +33 to +37
Copy link

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Retrofit/OkHttp 전체 keep/dontwarn은 불필요하며 바이너리 팽창을 유발합니다

대부분의 네트워크 라이브러리는 자체 consumer-rules를 제공합니다. 전역 keep/dontwarn은 제거하세요.

권장 diff:

-# 네트워크 관련 (카카오 SDK 의존성)
--keep class retrofit2.** { *; }
--keep class okhttp3.** { *; }
--dontwarn retrofit2.**
--dontwarn okhttp3.**
📝 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
# 네트워크 관련 (카카오 SDK 의존성)
-keep class retrofit2.** { *; }
-keep class okhttp3.** { *; }
-dontwarn retrofit2.**
-dontwarn okhttp3.**
🤖 Prompt for AI Agents
In feature/signin/consumer-rules.pro around lines 33 to 37, remove the broad
keep/dontwarn rules for retrofit2 and okhttp3 (the four lines shown) because
they cause binary bloat; instead delete these global entries and rely on the
individual network libraries' provided consumer-rules or add minimal, targeted
ProGuard/R8 rules only for the specific classes/methods your app uses (or the
official Kakao SDK consumer rules) to preserve required classes and suppress
only necessary warnings.

21 changes: 0 additions & 21 deletions feature/signin/proguard-rules.pro

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,7 @@ fun SignInScreen(
)
}

ShowToast -> {
// TODO: 실패 시 커스텀 스낵 바 구현
}
ShowToast -> {}
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

ShowToast 이펙트가 no-op입니다 — 사용자 피드백이 사라졌습니다.

효과를 드롭하면 실패/안내 토스트가 더 이상 표시되지 않습니다. 최소한의 토스트를 복구하세요.

적용 diff:

-            ShowToast -> {}
+            ShowToast -> Toast.makeText(
+                context,
+                "문제가 발생했습니다. 잠시 후 다시 시도해 주세요.",
+                Toast.LENGTH_SHORT
+            ).show()

파일 상단 import 추가:

import android.widget.Toast

만약 메시지를 동적으로 표시해야 한다면 UiEffect.ShowToast에 payload(message/StringRes)를 포함시키는 방향으로 후속 리워크를 권장합니다.


ShowToast 이펙트가 실제로 no-op인지 확인하기 위해 해당 파일에서 호출 위치를 검색합니다.


🏁 Script executed:

#!/bin/bash
rg -n "ShowToast" -n feature/signin/src/main/java/com/into/websoso/feature/signin/SignInScreen.kt

Length of output: 189


전체 컨텍스트 확인을 위해 SignInScreen.kt 파일 상단부터 effect 처리 부분까지 출력합니다.


🏁 Script executed:

#!/bin/bash
sed -n '1,120p' feature/signin/src/main/java/com/into/websoso/feature/signin/SignInScreen.kt

Length of output: 4292


ShowToast 이펙트 no-op — 토스트 호출 복구 필요

파일: feature/signin/src/main/java/com/into/websoso/feature/signin/SignInScreen.kt 라인 56
ShowToast 처리부가 빈 블록이라 사용자 피드백이 사라집니다. 최소한 아래와 같이 토스트를 복구하세요:

-            ShowToast -> {}
+            ShowToast -> Toast.makeText(
+                context,
+                "문제가 발생했습니다. 잠시 후 다시 시도해 주세요.",
+                Toast.LENGTH_SHORT
+            ).show()

파일 상단에 import android.widget.Toast 추가
추후 메시지를 동적으로 처리하려면 UiEffect.ShowToast에 메시지(payload) 필드를 포함시키는 리팩토링을 권장합니다.

📝 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
ShowToast -> {}
++ b/feature/signin/src/main/java/com/into/websoso/feature/signin/SignInScreen.kt
@@ -53,7 +53,12 @@
}
when (effect) {
ShowToast -> Toast.makeText(
context,
"문제가 발생했습니다. 잠시 후 다시 시도해 주세요.",
Toast.LENGTH_SHORT
).show()
NavigateBack -> onNavigateBack()
NavigateToHome -> onNavigateToHome()
🤖 Prompt for AI Agents
In feature/signin/src/main/java/com/into/websoso/feature/signin/SignInScreen.kt
around line 56, the ShowToast UiEffect is currently a no-op which suppresses
user feedback; restore toast behavior by importing android.widget.Toast at the
top of the file and, inside the ShowToast handling branch, obtain a Context
(e.g., val context = LocalContext.current or a passed-in context) and call
Toast.makeText(context, "<message>" or effect.message,
Toast.LENGTH_SHORT).show(); if UiEffect.ShowToast does not carry a message, add
a message payload to UiEffect.ShowToast for dynamic messages as a follow-up
refactor.


NavigateToHome -> websosoNavigator.navigateToMainActivity(context::startActivity)

Expand Down
4 changes: 2 additions & 2 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[versions]
# App Versioning
versionCode = "10015"
versionName = "1.2.0"
versionCode = "10022"
versionName = "1.3.1"

# Gradle Plugin & Kotlin
android-gradle-plugin = "8.1.3"
Expand Down