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

2.8 KiB
Raw Permalink Blame History

临时群组界面状态缓存与前端接口回调设计规约 (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。
    • 调用:
      MainActivity.executeJs("if(window.startPullGroupLock){ window.startPullGroupLock('$currentTempGroupId'); }")
      
  • 销毁逻辑 (onDestroy / clearMinimizedState)
    • 销毁时如果 !isMinimized,则清除 currentTempGroupId = ""
    • 发生真实销毁时调用:
      MainActivity.executeJs("if(window.endPullGroupLock){ window.endPullGroupLock(); }")
      

2.2 原生桥接接口增加 (AndroidInterface.kt)

  • dispatch 方法的 when(method) 分支中增加:
    • "getTempGroupId" -> getTempGroupId()
  • 实现 getTempGroupId 接口:
    fun getTempGroupId(): String {
        return TempCallActivity.currentTempGroupId
    }
    

2.3 演示页面修改 (print_demo.html)

  • 注册回调方法
    window.startPullGroupLock = function(gid) {
        showPttResult("收到临时群锁定回调 startPullGroupLock, GID: " + gid);
    };
    window.endPullGroupLock = function() {
        showPttResult("收到临时群解锁回调 endPullGroupLock");
    };
    
  • 新增主动查询按钮
    • 在 PTT 功能区域内添加一个按钮 “查询临时群 GID”
      <button onclick="queryTempGroupId()" class="ws-btn">查询当前临时群 GID</button>
      
    • JS 触发逻辑:
      function queryTempGroupId() {
          var gid = window.android.getTempGroupId();
          showPttResult("当前在临时群的 GID: " + (gid || "无"));
      }