StandAPP/docs/superpowers/specs/2026-07-06-temp-call-gid-ca...

61 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 临时群组界面状态缓存与前端接口回调设计规约 (Design Spec)
## 1. 需求概述
为 StandAPP 临时呼叫功能增加群组锁定状态的缓存与回调机制:
1. **创建界面**:缓存当前的临时群十六进制 GID并通知前端页面调用 JS 接口 `startPullGroupLock(gid)`
2. **销毁界面**:清除缓存的临时群 GID并通知前端页面调用 JS 接口 `endPullGroupLock()`
3. **查询接口**:提供一个新的原生桥接方法 `getTempGroupId` 供前端 JS 主动查询当前在临时群的十六进制 GID。
4. **演示页面**:修改 `print_demo.html` 演示接收回调通知,并添加按钮演示查询当前临时群 GID。
## 2. 方案设计
### 2.1 临时群 GID 缓存逻辑 (`TempCallActivity.kt`)
* **静态成员变量**:在 `TempCallActivity.Companion` 中定义 `@Volatile var currentTempGroupId: String = ""`
* **创建逻辑 (`onCreate`)**
* 获取 `intent.getStringExtra("group_name")`(即临时群组名称,如 "临时群组1" )。
* 将名称使用 `SendAtUtil.str2HexStr(name)` 转为十六进制字符串(如 `"D5E1CAE6..."`),并存入 `currentTempGroupId`
* 如果 `intent` 直接传了 `group_id`,可以直接使用;如果没有,则使用上述十六进制 GID 作为 fallback。
* 调用:
```kotlin
MainActivity.executeJs("if(window.startPullGroupLock){ window.startPullGroupLock('$currentTempGroupId'); }")
```
* **销毁逻辑 (`onDestroy` / `clearMinimizedState`)**
* 销毁时如果 `!isMinimized`,则清除 `currentTempGroupId = ""`
* 发生真实销毁时调用:
```kotlin
MainActivity.executeJs("if(window.endPullGroupLock){ window.endPullGroupLock(); }")
```
### 2.2 原生桥接接口增加 (`AndroidInterface.kt`)
*`dispatch` 方法的 `when(method)` 分支中增加:
* `"getTempGroupId" -> getTempGroupId()`
* 实现 `getTempGroupId` 接口:
```kotlin
fun getTempGroupId(): String {
return TempCallActivity.currentTempGroupId
}
```
### 2.3 演示页面修改 (`print_demo.html`)
* **注册回调方法**
```javascript
window.startPullGroupLock = function(gid) {
showPttResult("收到临时群锁定回调 startPullGroupLock, GID: " + gid);
};
window.endPullGroupLock = function() {
showPttResult("收到临时群解锁回调 endPullGroupLock");
};
```
* **新增主动查询按钮**
* 在 PTT 功能区域内添加一个按钮 “查询临时群 GID”
```html
<button onclick="queryTempGroupId()" class="ws-btn">查询当前临时群 GID</button>
```
* JS 触发逻辑:
```javascript
function queryTempGroupId() {
var gid = window.android.getTempGroupId();
showPttResult("当前在临时群的 GID: " + (gid || "无"));
}
```