# 临时呼叫页面语音提示与确认功能设计规约 (Design Spec)

## 1. 需求概述
在 `TempCallActivity` 弹出页面（临时呼叫页面）时，需要播放一段本地语音提示。
* **语音播报文本**："您有一条拉动，请注意确认"。
* **播报循环规则**：若用户不操作，默认播放并重复 3 次。
* **交互设计**：
  * 页面中央的信息卡片中新增一个“确认”按钮。
  * 用户点击“确认”按钮时，能够立即静音/停止当前正在播放的语音，且该按钮在静音后隐藏。
  * 点击“确认”按钮时仅关闭语音播放，暂时不需要关闭页面。

## 2. 方案设计

### 2.1 语音资源准备
* **文件名**：`pull_alert.wav`
* **保存路径**：`app/src/main/res/raw/pull_alert.wav`（若没有 `raw` 文件夹，将自动创建）
* **生成方式**：使用 Python 脚本调用 Edge TTS 等免费 TTS 接口，在线合成带有“您有一条拉动，请注意确认”文本的高质量 WAV 音频，并自动保存到对应目录下。

### 2.2 布局修改
* **目标文件**：`app/src/main/res/layout/activity_temp_call.xml`
* **修改位置**：在包含 `tv_talk_status` 的内部 `LinearLayout` 容器下方，添加“确认”按钮。
* **按钮样式**：
  * 文字："确认"
  * 默认可见性：`android:visibility="gone"`（开始播放时显示，停止播放/确认后隐藏）
  * 背景：复用现有 `@drawable/btn_minimize_bg`。

```xml
        <!-- 用于确认并静音语音的按钮 -->
        <Button
            android:id="@+id/btn_confirm_alert"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="16dp"
            android:background="@drawable/btn_minimize_bg"
            android:text="确认"
            android:textColor="#FFFFFF"
            android:textSize="14sp"
            android:visibility="gone" />
```

### 2.3 业务逻辑实现
* **目标文件**：`app/src/main/java/com/stand/standapp/TempCallActivity.kt`
* **主要逻辑**：
  1. 定义 `MediaPlayer` 实例 `private var alertPlayer: MediaPlayer? = null` 及播放计数器 `private var alertPlayCount = 0`。
  2. 实现播放方法 `private fun startVoiceAlert()`：
     - 如果 `alertPlayer` 尚未初始化，利用 `MediaPlayer.create(this, R.raw.pull_alert)` 初始化。
     - 显示“确认”按钮：`btnConfirmAlert.visibility = View.VISIBLE`。
     - 监听播放完成事件：
       ```kotlin
       alertPlayer?.setOnCompletionListener {
           alertPlayCount++
           if (alertPlayCount < 3) {
               alertPlayer?.start()
           } else {
               stopVoiceAlert()
           }
       }
       ```
     - 开始播放并设置 `alertPlayCount = 0`。
  3. 实现停止方法 `private fun stopVoiceAlert()`：
     - 安全释放 `MediaPlayer` 资源：
       ```kotlin
       alertPlayer?.let { player ->
           try {
               if (player.isPlaying) {
                   player.stop()
               }
           } catch (e: Exception) {
               // 忽略错误
           } finally {
               player.release()
           }
       }
       alertPlayer = null
       ```
     - 隐藏“确认”按钮：`btnConfirmAlert.visibility = View.GONE`。
  4. 设置“确认”按钮的点击事件：
     - 点击时调用 `stopVoiceAlert()`。
  5. 页面销毁生命周期：
     - 在 `onDestroy()` 中，必须调用 `stopVoiceAlert()` 以防止内存泄漏和页面销毁后后台仍在播放的情况。

## 3. 测试与自审规范
* **测试用例 1**：启动临时呼叫页面，验证语音提示是否以正常音量播放，且重复播放 3 次后自动停止，同时“确认”按钮自动隐藏。
* **测试用例 2**：语音播放期间点击“确认”按钮，验证语音是否立刻停止播放，且“确认”按钮是否立即隐藏。
* **测试用例 3**：语音播放期间直接关闭或最小化页面，验证后台音乐播放器是否正确释放，不存在背景音残留。
