feat(android): add device activation flow and update dependencies

重构项目架构,引入启动页(SplashActivity)检查激活状态,未激活设备引导至激活页(ActivationActivity)完成provision+token流程。集成Retrofit+RxJava3网络层、Room数据库、Lifecycle组件、MMKV等依赖,升级OkHttp/Gson版本,并将构建配置从旧项目全面迁移至新项目结构。
This commit is contained in:
TongTongStudio
2026-08-03 00:25:51 +08:00
parent 61398ff4ff
commit ded6fe5ab7
105 changed files with 5363 additions and 1503 deletions

View File

@@ -1,212 +1,199 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".activity.main.MainActivity">
<!-- 设置面板 -->
<LinearLayout
android:id="@+id/setup_panel"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:orientation="vertical"
android:padding="24dp">
<data>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="24dp"
android:text="WebRTC 控制端"
android:textSize="24sp"
android:textStyle="bold" />
</data>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="信令服务器地址:"
android:textSize="14sp" />
<EditText
android:id="@+id/et_server_url"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:hint="wss://www.ttstd.com/signal"
android:inputType="textUri" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="本机设备ID:"
android:textSize="14sp" />
<EditText
android:id="@+id/et_device_id"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:hint="设备ID"
android:inputType="text" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="目标被控设备ID:"
android:textSize="14sp" />
<EditText
android:id="@+id/et_target_device_id"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="24dp"
android:hint="被控端设备ID"
android:inputType="text"
android:text="981964879" />
<TextView
android:id="@+id/tv_status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="24dp"
android:text="状态: 已停止"
android:textSize="16sp"
android:textStyle="bold" />
<Button
android:id="@+id/btn_connect"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:text="连接被控设备" />
<Button
android:id="@+id/btn_disconnect"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:enabled="false"
android:text="断开连接" />
</LinearLayout>
<!-- 控制面板(连接后显示) -->
<FrameLayout
android:id="@+id/control_panel"
android:background="#000000"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone">
android:layout_height="match_parent">
<!-- 远端视频渲染 -->
<org.webrtc.SurfaceViewRenderer
android:id="@+id/remote_video_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center" />
<!-- 自编码(自建 MediaCodec屏幕串流渲染层默认隐藏切到自编码模式时显示 -->
<SurfaceView
android:id="@+id/self_codec_surface"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:visibility="gone" />
<!-- 触摸控制层(覆盖在视频上方) -->
<com.ttstd.controller.view.RemoteTouchView
android:id="@+id/touch_overlay"
<!-- 设置面板 -->
<LinearLayout
android:id="@+id/setup_panel"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:background="@android:color/transparent" />
<!-- 顶部状态栏 -->
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|start"
android:background="#80000000"
android:gravity="center_vertical"
android:orientation="vertical"
android:padding="8dp">
android:padding="24dp">
<TextView
android:id="@+id/tv_status_control"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="远程控制中"
android:textColor="@android:color/white"
android:text="本机设备ID:"
android:textSize="14sp" />
<EditText
android:id="@+id/et_device_id"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:hint="设备ID"
android:inputType="text" />
<TextView
android:id="@+id/tv_stats"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="分辨率: - 帧率: - 延迟: -"
android:textColor="@android:color/white"
android:textSize="12sp" />
android:text="目标被控设备ID:"
android:textSize="14sp" />
<Spinner
android:id="@+id/spinner_resolution"
android:layout_width="wrap_content"
<EditText
android:id="@+id/et_target_device_id"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:backgroundTint="#80FFFFFF" />
android:layout_marginBottom="24dp"
android:hint="被控端设备ID"
android:inputType="text"
android:text="981964879" />
<Spinner
android:id="@+id/spinner_fps"
<TextView
android:id="@+id/tv_status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:backgroundTint="#80FFFFFF" />
android:layout_marginBottom="24dp"
android:text="状态: 已停止"
android:textSize="16sp"
android:textStyle="bold" />
<Button
android:id="@+id/btn_disconnect_control"
android:layout_width="wrap_content"
android:id="@+id/btn_connect"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:backgroundTint="#E53935"
android:text="断开连接"
android:textColor="@android:color/white" />
android:layout_marginBottom="8dp"
android:text="连接被控设备" />
<Switch
android:id="@+id/switch_stream_mode"
android:layout_width="wrap_content"
<Button
android:id="@+id/btn_disconnect"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:text="自编码串流"
android:textColor="@android:color/white"
android:textSize="12sp" />
<TextView
android:id="@+id/tv_stream_mode"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:text="串流: WebRTC"
android:textColor="@android:color/white"
android:textSize="12sp" />
<Switch
android:id="@+id/switch_record"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:enabled="false"
android:text="录制屏幕"
android:textColor="@android:color/white"
android:textSize="12sp" />
<TextView
android:id="@+id/tv_record_status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:text="未录制"
android:textColor="@android:color/white"
android:textSize="12sp" />
android:text="断开连接" />
</LinearLayout>
</FrameLayout>
<!-- 控制面板(连接后显示) -->
<FrameLayout
android:id="@+id/control_panel"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000"
android:visibility="gone">
</FrameLayout>
<!-- 远端视频渲染 -->
<org.webrtc.SurfaceViewRenderer
android:id="@+id/remote_video_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center" />
<!-- 自编码(自建 MediaCodec屏幕串流渲染层默认隐藏切到自编码模式时显示 -->
<SurfaceView
android:id="@+id/self_codec_surface"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:visibility="gone" />
<!-- 触摸控制层(覆盖在视频上方) -->
<com.ttstd.controller.view.RemoteTouchView
android:id="@+id/touch_overlay"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:background="@android:color/transparent" />
<!-- 顶部状态栏 -->
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|start"
android:background="#80000000"
android:orientation="vertical"
android:padding="8dp">
<TextView
android:id="@+id/tv_status_control"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="远程控制中"
android:textColor="@android:color/white"
android:textSize="14sp" />
<TextView
android:id="@+id/tv_stats"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="分辨率: - 帧率: - 延迟: -"
android:textColor="@android:color/white"
android:textSize="12sp" />
<Spinner
android:id="@+id/spinner_resolution"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:backgroundTint="#80FFFFFF" />
<Spinner
android:id="@+id/spinner_fps"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:backgroundTint="#80FFFFFF" />
<Button
android:id="@+id/btn_disconnect_control"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:backgroundTint="#E53935"
android:text="断开连接"
android:textColor="@android:color/white" />
<Switch
android:id="@+id/switch_stream_mode"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:text="自编码串流"
android:textColor="@android:color/white"
android:textSize="12sp" />
<TextView
android:id="@+id/tv_stream_mode"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:text="串流: WebRTC"
android:textColor="@android:color/white"
android:textSize="12sp" />
<Switch
android:id="@+id/switch_record"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:enabled="false"
android:text="录制屏幕"
android:textColor="@android:color/white"
android:textSize="12sp" />
<TextView
android:id="@+id/tv_record_status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:text="未录制"
android:textColor="@android:color/white"
android:textSize="12sp" />
</LinearLayout>
</FrameLayout>
</FrameLayout>
</layout>