-keep public class com.amplitude.android.sessionreplay.** { *; }
-keep public class com.amplitude.android.sessionreplay.internal.** { *; }
-keep class kotlin.Metadata
-keep public class com.amplitude.android.sessionreplay.compose.ModifiersKt { *; }

-keepclassmembers,allowobfuscation class * {
    @com.google.gson.annotations.SerializedName <fields>;
}

-keep class androidx.compose.ui.platform.AndroidComposeView { *; }
-keep class androidx.compose.ui.platform.ComposeView { *; }
-keep class androidx.compose.ui.graphics.Canvas { *; }
-keep class androidx.core.graphics.Insets { *; }
-keep class androidx.compose.ui.node.LayoutNode { *; }
-keep class androidx.compose.ui.node.NodeChain { *; }
-keep class androidx.compose.ui.node.BackwardsCompatNode { *; }
-keep class androidx.compose.ui.node.DelegatingNode { *; }

# Keep fields accessed via reflection: child, kindSet
-keep class androidx.compose.ui.Modifier$Node { *; }

# Keep LogcatLogger implementation for session replay
-keep class com.amplitude.android.sessionreplay.LogcatLogger { *; }
-keep class com.amplitude.android.sessionreplay.LogcatLogger$Companion { *; }

# Keep CoreTextFieldSemanticsModifier and its imeOptions property
-keep class androidx.compose.foundation.text.input.internal.CoreTextFieldSemanticsModifier {
    androidx.compose.ui.text.input.ImeOptions imeOptions;
}

# Keep the ImeOptions class that imeOptions references
-keep class androidx.compose.ui.text.input.ImeOptions { *; }

# Keep Owner class, used by AndroidComposeViewUtils
-keep class androidx.compose.ui.node.Owner { *; }

-keep class dev.chrisbanes.haze.HazeEffectNode
-keep class dev.chrisbanes.haze.HazeSourceNode

# Keep EmbeddedEvent class and its no-argument constructor
-keep class com.amplitude.android.sessionreplay.internal.embedded.EmbeddedEvent { *; }

# Keep EmbeddedView classes for better error messages
# Keep only the EmbeddedView communication callback function
-keepclassmembers class com.amplitude.android.sessionreplay.internal.embedded.EmbeddedViewData {
    # Callback method referenced via ::handleEmbeddedViewEvent in setMessageCallback
    public void handleEmbeddedViewEvent(java.lang.String);
}

# Suppress warning for Java 9+ string concatenation optimization class
-dontwarn java.lang.invoke.StringConcatFactory

# Keep Flutter classes for session replay Flutter integration
-keep class io.flutter.embedding.android.FlutterImageView { *; }
-keep class io.flutter.embedding.android.FlutterSurfaceView { *; }
-keep class io.flutter.embedding.android.FlutterTextureView { *; }
-keep class io.flutter.embedding.android.FlutterView { *; }
-keep class io.flutter.embedding.engine.FlutterEngine { *; }
-keep class io.flutter.embedding.engine.dart.DartExecutor { *; }
-keep class io.flutter.plugin.common.BinaryMessenger { *; }
-keep class io.flutter.plugin.common.BinaryMessenger$BinaryMessageHandler { *; }

-dontwarn io.flutter.embedding.android.FlutterImageView
-dontwarn io.flutter.embedding.android.FlutterSurfaceView
-dontwarn io.flutter.embedding.android.FlutterTextureView
-dontwarn io.flutter.embedding.android.FlutterView
-dontwarn io.flutter.embedding.engine.FlutterEngine
-dontwarn io.flutter.embedding.engine.dart.DartExecutor
-dontwarn io.flutter.plugin.common.BinaryMessenger$BinaryMessageHandler
-dontwarn io.flutter.plugin.common.BinaryMessenger
