
# 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
#-libraryjars libs
#-keepdirectories libs

#-classobfuscationdictionary oidc-obfuscated-names.txt

-keep class kotlin.* { *;}
-keep class kotlin.Metadata { *; }
-dontwarn kotlin.**
-keepclassmembers class **$WhenMappings {
    <fields>;
}
-keepclassmembers class kotlin.Metadata {
    public <methods>;
}

-assumenosideeffects class kotlin.jvm.internal.Intrinsics {
    static void checkParameterIsNotNull(java.lang.Object, java.lang.String);
}

-dontwarn androidx.**
-keep class androidx.* { *; }
-keep interface androidx.** { *; }

-keepclassmembers class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator CREATOR;
}

-keepclassmembers class **.R$* {
    public static <fields>;
}

# 어노테이션 보존
-keepattributes *Annotation*,EnclosingMethod

# 제너릭 타입 정보 보존
-keepattributes Signature

-keepattributes SoureFile,LineNumberTable   #소스파일, 라인 정보 유지
#-ignorewarnings

-keepattributes InnerClasses
-keepattributes MethodParameters

-dontwarn com.guardsquare.dexguard.**

-dontusemixedcaseclassnames
-keeppackagenames

-keep class com.skt.tid.TidAuthLib { *;}
-keep class com.skt.tid.view.vo.WebProcessResult { *;}
-keep class com.skt.tid.network.AuthRepository { *; }
-keep class com.skt.tid.network.remote.PrepareResultCallBack { *;}

-keep class com.skt.tid.network.response.* { *;}
-keep class com.skt.tid.network.response.Authenticators { *;}
-keep class com.skt.tid.network.response.AccessTokenInfo.* { *;}
-keep class com.skt.tid.network.response.ErrorResponse { *;}
-keep enum com.skt.tid.network.response.ErrorResponse$Code { *;}

-keep class com.skt.tid.view.vo.AuthenticatorInfo { *;}
-keep class com.skt.tid.constants.* { *;}
-keep class com.skt.tid.constants.AuthorizeConstants { *;}

-keep class com.skt.tid.view.AppToAppBridgeActivity { *;}
-keep class com.skt.tid.network.builder.AuthorizeRequestBuilder { *;}
-keep class com.skt.tid.constants.OIDCConstants { *;}
-keep class com.skt.tid.network.request.LoginRequestData { *;}
-keep class com.skt.tid.network.AuthRepository$** {
    **[] $VALUES;
    *;
}

-keep class com.skt.tid.utils.* { *; }

-keep public class com.skt.tid.view.custom.TidAuthWebView { public *; }

-keep public interface com.skt.tid.network.LoginResultCallBack { *;}
-keep public interface com.skt.tid.network.ResultCallback { *;}
-keep public interface com.skt.tid.view.IAppToAppFailure { *; }
-keep public interface com.skt.tid.view.IAppToAppLoginResult { *; }
-keep public interface com.skt.tid.view.ILoginResult { *; }
-keep public interface com.skt.tid.view.IRecertificationResult { *; }
-keep public interface com.skt.tid.view.ITidLoginProcessResult { *; }
-keep public interface com.skt.tid.view.AuthLoginResult { *; }
-keep public interface com.skt.tid.view.AuthLogoutResult { *; }
-keep public interface com.skt.tid.view.AuthInfoResult { *; }
-keep public interface com.skt.tid.view.TokenInfoResult { *; }
-keep public interface com.skt.tid.view.UserInfoResult { *; }
-keep public interface com.skt.tid.view.ResourceResult { *; }
-keep public interface com.skt.tid.view.WebResult { *; }
-keep public interface com.skt.tid.view.AuthFailResult { *; }
-keep public interface com.skt.tid.view.IEventLogResult { *; }
-keep public interface com.skt.tid.view.custom.UrlLoadInterface { *; }

-keepnames class com.skt.tid.exception.**

# enumeration classes.
-keepclassmembers class * extends java.lang.Enum {
    <fields>;
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
#-assumenosideeffects class android.util.Log {
#    public static *** d(...);
#    public static *** v(...);
#    public static *** i(...);
#    public static *** w(...);
#    public static *** e(...);
#    public static *** wtf(...);
#}


##---------------Begin: proguard configuration for Common  ----------

-dontnote android.support.**
-dontnote androidx.**
-dontwarn android.support.**

-dontwarn javax.annotation.**
-dontwarn org.jetbrains.annotations.**
-dontwarn kotlinx.coroutines.**

# 파라미터명을 난독화하지 않는다.
#-keepparameternames class com.skt.tid.common.** {
#    *;
#}

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keepclassmembers class * implements android.os.Parcelable {
    public static final ** CREATOR;
}

-keepclassmembers class **.R$* {
    public static <fields>;
}

-keep class androidx.annotation.Keep
-keep @androidx.annotation.Keep class * {*;}

-keepclasseswithmembers class * {
    @androidx.annotation.Keep <methods>;
}

-keepclasseswithmembers class * {
    @androidx.annotation.Keep <fields>;
}

-keepclasseswithmembers class * {
    @androidx.annotation.Keep <init>(...);
}

-keep class com.skt.tid.log.TidAppEvents$Companion { *; }
-keep class com.skt.tid.log.TidAppEvents { *; }
-keep class com.skt.tid.log.TidAppEvents$Builder { *; }
-keep class com.skt.tid.log.repository.ErrorLogManager { *; }
-keep class com.skt.tid.log.repository.ErrorLogManager$DatabaseHelper { *; }

# BlockStore optional module — 채널 미통합 시 GMS 클래스 부재 경고 억제
-dontwarn com.google.android.gms.auth.blockstore.**
-dontwarn com.google.android.gms.common.**
-dontwarn com.google.android.gms.tasks.**

##---------------End: proguard configuration for Common  ----------


##---------------Begin: proguard configuration for Gson  ----------

-dontwarn com.skplanet.fido.uaf.tidclient.combolib.client.asm.**
-dontwarn com.skplanet.fido.uaf.tidclient.combolib.client.**
# Gson specific classes
-dontwarn sun.misc.**
#-keep class com.google.gson.stream.** { *; }
-keep class com.google.gson.* { *; }

# Application classes that will be serialized/deserialized over Gson
-keep class com.google.gson.examples.android.model.* { <fields>; }

# Prevent proguard from stripping interface information from TypeAdapterFactory,
# JsonSerializer, JsonDeserializer instances (so they can be used in @JsonAdapter)
-keep class * extends com.google.gson.TypeAdapter
-keep class * implements com.google.gson.TypeAdapterFactory
-keep class * implements com.google.gson.JsonSerializer
-keep class * implements com.google.gson.JsonDeserializer

# Prevent R8 from leaving Data object members always null
-keepclassmembers,allowobfuscation class * {
  @com.google.gson.annotations.SerializedName <fields>;
}

# Retain generic signatures of TypeToken and its subclasses with R8 version 3.0 and higher.
-keep,allowobfuscation,allowshrinking class com.google.gson.reflect.TypeToken
-keep,allowobfuscation,allowshrinking class * extends com.google.gson.reflect.TypeToken

##---------------End: proguard configuration for Gson  ----------


##---------------Begin: proguard configuration for Retrofit / OkHttp  ----------

# OkHttpCompat 는 static initializer 에서 okhttp3.MediaType 등을 참조함.
# SDK AAR 난독화 후에도 호스트 앱에서 OkHttp 클래스를 정상 로드할 수 있도록 보존.
-keep class com.skt.tid.network.client.OkHttpCompat { *; }
-keep class com.skt.tid.network.client.NetworkClient { *; }
-keep class com.skt.tid.network.client.OkHttpRequestFactory { *; }
-keep class com.skt.tid.network.client.RetrofitResponseMapper { *; }

-dontwarn okhttp3.**
-dontwarn okio.**
-dontwarn retrofit2.**

-keepattributes Exceptions

-keepclassmembers,allowshrinking,allowobfuscation interface * {
    @retrofit2.http.* <methods>;
}

-if interface * { @retrofit2.http.* <methods>; }
-keep,allowobfuscation interface <1>

-keep,allowobfuscation,allowshrinking class kotlin.coroutines.Continuation

# 호스트 앱 R8 단계에서 OkHttp/Okio 가 제거되지 않도록 보존 (consumerProguardFile 로 전달)
-keep class okhttp3.** { *; }
-keep interface okhttp3.** { *; }
-keep class okio.** { *; }
-keep interface okio.** { *; }
-dontwarn okio.**

##---------------End: proguard configuration for Retrofit / OkHttp  ----------


##---------------Begin: proguard configuration for IVI SDK  ----------

-keep interface com.skt.tid.TidAuthLibExt { *; }
-keep class com.skt.tid.ivi.utils.TidContentResolver { *; }
-keep class com.skt.tid.**$DefaultImpls { *; }
##---------------End: proguard configuration for IVI SDK  ----------

# 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
#-libraryjars libs
#-keepdirectories libs

#-classobfuscationdictionary oidc-obfuscated-names.txt

-keep class kotlin.* { *;}
-keep class kotlin.Metadata { *; }
-dontwarn kotlin.**
-keepclassmembers class **$WhenMappings {
    <fields>;
}
-keepclassmembers class kotlin.Metadata {
    public <methods>;
}

-assumenosideeffects class kotlin.jvm.internal.Intrinsics {
    static void checkParameterIsNotNull(java.lang.Object, java.lang.String);
}

-dontwarn androidx.**
-keep class androidx.* { *; }
-keep interface androidx.** { *; }

-keepclassmembers class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator CREATOR;
}

-keepclassmembers class **.R$* {
    public static <fields>;
}

# 어노테이션 보존
-keepattributes *Annotation*,EnclosingMethod

# 제너릭 타입 정보 보존
-keepattributes Signature

-keepattributes SoureFile,LineNumberTable   #소스파일, 라인 정보 유지
#-ignorewarnings

-keepattributes InnerClasses
-keepattributes MethodParameters

-dontwarn com.guardsquare.dexguard.**

-dontusemixedcaseclassnames
-keeppackagenames

-keep class com.skt.tid.TidAuthLib { *;}
-keep class com.skt.tid.view.vo.WebProcessResult { *;}
-keep class com.skt.tid.network.AuthRepository { *; }
-keep class com.skt.tid.network.remote.PrepareResultCallBack { *;}

-keep class com.skt.tid.network.response.* { *;}
-keep class com.skt.tid.network.response.Authenticators { *;}
-keep class com.skt.tid.network.response.AccessTokenInfo.* { *;}
-keep class com.skt.tid.network.response.ErrorResponse { *;}
-keep enum com.skt.tid.network.response.ErrorResponse$Code { *;}

-keep class com.skt.tid.view.vo.AuthenticatorInfo { *;}
-keep class com.skt.tid.constants.* { *;}
-keep class com.skt.tid.constants.AuthorizeConstants { *;}

-keep class com.skt.tid.view.AppToAppBridgeActivity { *;}
-keep class com.skt.tid.network.builder.AuthorizeRequestBuilder { *;}
-keep class com.skt.tid.constants.OIDCConstants { *;}
-keep class com.skt.tid.network.request.LoginRequestData { *;}
-keep class com.skt.tid.network.AuthRepository$** {
    **[] $VALUES;
    *;
}

-keep class com.skt.tid.utils.* { *; }

-keep public class com.skt.tid.view.custom.TidAuthWebView { public *; }

-keep public interface com.skt.tid.network.LoginResultCallBack { *;}
-keep public interface com.skt.tid.network.ResultCallback { *;}
-keep public interface com.skt.tid.view.IAppToAppFailure { *; }
-keep public interface com.skt.tid.view.IAppToAppLoginResult { *; }
-keep public interface com.skt.tid.view.ILoginResult { *; }
-keep public interface com.skt.tid.view.IRecertificationResult { *; }
-keep public interface com.skt.tid.view.ITidLoginProcessResult { *; }
-keep public interface com.skt.tid.view.AuthLoginResult { *; }
-keep public interface com.skt.tid.view.AuthLogoutResult { *; }
-keep public interface com.skt.tid.view.AuthInfoResult { *; }
-keep public interface com.skt.tid.view.TokenInfoResult { *; }
-keep public interface com.skt.tid.view.UserInfoResult { *; }
-keep public interface com.skt.tid.view.ResourceResult { *; }
-keep public interface com.skt.tid.view.WebResult { *; }
-keep public interface com.skt.tid.view.AuthFailResult { *; }
-keep public interface com.skt.tid.view.IEventLogResult { *; }
-keep public interface com.skt.tid.view.custom.UrlLoadInterface { *; }

-keepnames class com.skt.tid.exception.**

# enumeration classes.
-keepclassmembers class * extends java.lang.Enum {
    <fields>;
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
#-assumenosideeffects class android.util.Log {
#    public static *** d(...);
#    public static *** v(...);
#    public static *** i(...);
#    public static *** w(...);
#    public static *** e(...);
#    public static *** wtf(...);
#}


##---------------Begin: proguard configuration for Common  ----------

-dontnote android.support.**
-dontnote androidx.**
-dontwarn android.support.**

-dontwarn javax.annotation.**
-dontwarn org.jetbrains.annotations.**
-dontwarn kotlinx.coroutines.**

# 파라미터명을 난독화하지 않는다.
#-keepparameternames class com.skt.tid.common.** {
#    *;
#}

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keepclassmembers class * implements android.os.Parcelable {
    public static final ** CREATOR;
}

-keepclassmembers class **.R$* {
    public static <fields>;
}

-keep class androidx.annotation.Keep
-keep @androidx.annotation.Keep class * {*;}

-keepclasseswithmembers class * {
    @androidx.annotation.Keep <methods>;
}

-keepclasseswithmembers class * {
    @androidx.annotation.Keep <fields>;
}

-keepclasseswithmembers class * {
    @androidx.annotation.Keep <init>(...);
}

-keep class com.skt.tid.log.TidAppEvents$Companion { *; }
-keep class com.skt.tid.log.TidAppEvents { *; }
-keep class com.skt.tid.log.TidAppEvents$Builder { *; }
-keep class com.skt.tid.log.repository.ErrorLogManager { *; }
-keep class com.skt.tid.log.repository.ErrorLogManager$DatabaseHelper { *; }

# BlockStore optional module — 채널 미통합 시 GMS 클래스 부재 경고 억제
-dontwarn com.google.android.gms.auth.blockstore.**
-dontwarn com.google.android.gms.common.**
-dontwarn com.google.android.gms.tasks.**

##---------------End: proguard configuration for Common  ----------


##---------------Begin: proguard configuration for Gson  ----------

-dontwarn com.skplanet.fido.uaf.tidclient.combolib.client.asm.**
-dontwarn com.skplanet.fido.uaf.tidclient.combolib.client.**
# Gson specific classes
-dontwarn sun.misc.**
#-keep class com.google.gson.stream.** { *; }
-keep class com.google.gson.* { *; }

# Application classes that will be serialized/deserialized over Gson
-keep class com.google.gson.examples.android.model.* { <fields>; }

# Prevent proguard from stripping interface information from TypeAdapterFactory,
# JsonSerializer, JsonDeserializer instances (so they can be used in @JsonAdapter)
-keep class * extends com.google.gson.TypeAdapter
-keep class * implements com.google.gson.TypeAdapterFactory
-keep class * implements com.google.gson.JsonSerializer
-keep class * implements com.google.gson.JsonDeserializer

# Prevent R8 from leaving Data object members always null
-keepclassmembers,allowobfuscation class * {
  @com.google.gson.annotations.SerializedName <fields>;
}

# Retain generic signatures of TypeToken and its subclasses with R8 version 3.0 and higher.
-keep,allowobfuscation,allowshrinking class com.google.gson.reflect.TypeToken
-keep,allowobfuscation,allowshrinking class * extends com.google.gson.reflect.TypeToken

##---------------End: proguard configuration for Gson  ----------


##---------------Begin: proguard configuration for Retrofit / OkHttp  ----------

# OkHttpCompat 는 static initializer 에서 okhttp3.MediaType 등을 참조함.
# SDK AAR 난독화 후에도 호스트 앱에서 OkHttp 클래스를 정상 로드할 수 있도록 보존.
-keep class com.skt.tid.network.client.OkHttpCompat { *; }
-keep class com.skt.tid.network.client.NetworkClient { *; }
-keep class com.skt.tid.network.client.OkHttpRequestFactory { *; }
-keep class com.skt.tid.network.client.RetrofitResponseMapper { *; }

-dontwarn okhttp3.**
-dontwarn okio.**
-dontwarn retrofit2.**

-keepattributes Exceptions

-keepclassmembers,allowshrinking,allowobfuscation interface * {
    @retrofit2.http.* <methods>;
}

-if interface * { @retrofit2.http.* <methods>; }
-keep,allowobfuscation interface <1>

-keep,allowobfuscation,allowshrinking class kotlin.coroutines.Continuation

# 호스트 앱 R8 단계에서 OkHttp/Okio 가 제거되지 않도록 보존 (consumerProguardFile 로 전달)
-keep class okhttp3.** { *; }
-keep interface okhttp3.** { *; }
-keep class okio.** { *; }
-keep interface okio.** { *; }
-dontwarn okio.**

##---------------End: proguard configuration for Retrofit / OkHttp  ----------


##---------------Begin: proguard configuration for IVI SDK  ----------

-keep interface com.skt.tid.TidAuthLibExt { *; }
-keep class com.skt.tid.ivi.utils.TidContentResolver { *; }
-keep class com.skt.tid.**$DefaultImpls { *; }
##---------------End: proguard configuration for IVI SDK  ----------
