61 lines
2.8 KiB
Markdown
61 lines
2.8 KiB
Markdown
# 临时群组界面状态缓存与前端接口回调设计规约 (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 || "无"));
|
||
}
|
||
```
|