# screencast 库消费者 ProGuard 规则
# 这些规则会在应用构建时被合并到主项目的 ProGuard 配置中

# ========== 对外暴露的公共 API（必须保留）==========

# 保留 RTP 屏幕流传输管理器 - 主项目需要使用的入口类
-keep public class cn.devtech.dmp.screencast.streaming.rtp.RtpScreenStreaming {
    public <methods>;
}

# 保留屏幕录制服务 - 需要在 AndroidManifest.xml 中声明
-keep public class cn.devtech.dmp.screencast.streaming.rtp.RtpScreenCastService {
    public <methods>;
}

# 保留 MediaProjection 服务 - 需要在 AndroidManifest.xml 中声明
-keep public class cn.devtech.dmp.screencast.streaming.rtp.mediaprojection.MediaProjectionService {
    public <methods>;
}

# 保留触摸模拟服务 - 需要在 AndroidManifest.xml 中声明
-keep public class cn.devtech.dmp.screencast.touch.TouchSimulationService {
    public <methods>;
}

# 保留触摸服务管理器 - 主项目需要使用的入口类
-keep public class cn.devtech.dmp.screencast.touch.TouchServiceManager {
    public <methods>;
}

# 保留手势模拟类 - 主项目需要使用的入口类
-keep public class cn.devtech.dmp.screencast.gesture.RemoteGestureSimulation {
    public <methods>;
}

# 保留数据模型类 - 用于 JSON 序列化/反序列化
-keep public class cn.devtech.dmp.screencast.model.** {
    public <fields>;
    public <methods>;
}

# 保留 WebSocket 消息类 - 用于 JSON 序列化/反序列化
-keep public class cn.devtech.dmp.screencast.model.websocket.** {
    public <fields>;
    public <methods>;
}

# ========== Hilt/Dagger 依赖注入相关（必须保留）==========

# 保留被 @Inject 注解的构造函数
-keepclassmembers @javax.inject.Inject class * {
    <init>(...);
}

# 保留被 @Singleton 注解的类
-keep @javax.inject.Singleton class * { *; }

# 保留 Service 类（Hilt 需要）
-keep public class * extends android.app.Service { *; }

# ========== Kotlin 协程相关（必须保留）==========

# 保留协程相关类名和方法名
-keepnames class kotlinx.coroutines.** { *; }
-keepclassmembernames class kotlinx.coroutines.** { *; }

# 保留 Flow 相关的方法签名
-keepclassmembernames class cn.devtech.dmp.screencast.** {
    kotlinx.coroutines.flow.Flow *;
}

# ========== Android 系统类（必须保留）==========

# 保留 MediaCodec 相关方法签名（JNI/反射可能用到）
-keepclassmembernames class android.media.MediaCodec {
    public <methods>;
}

-keepclassmembernames class android.media.MediaFormat {
    public <methods>;
}

# 保留 VirtualDisplay 相关方法签名
-keepclassmembernames class android.hardware.display.VirtualDisplay {
    public <methods>;
}

# 保留 MediaProjection 相关方法签名
-keepclassmembernames class android.media.projection.MediaProjection {
    public <methods>;
}

# 保留 Surface 相关方法签名
-keepclassmembernames class android.view.Surface {
    public <methods>;
}

# 保留 DatagramSocket 相关方法签名
-keepclassmembernames class java.net.DatagramSocket {
    public <methods>;
}

-keepclassmembernames class java.net.DatagramPacket {
    public <methods>;
}
