fix: 修复 WebRTC 控制稳定性与输入事件重复问题

- 修复安卓端 401 拦截器线程问题,确保 Toast 在主线程执行
- 修复 Web 端按键/触摸重复触发:增加按下状态跟踪,防止悬停触发动作和长按重复
- 修复 Web 端指针取消时未释放触摸状态导致被控端卡死
- 修复 TURN 未启用时返回 401 导致客户端异常登出,改为返回 enabled=false
- 修复后台管理端 401 后路由守卫跳转失败
- 增加控制指令调试日志用于排查问题
This commit is contained in:
TongTongStudio
2026-08-04 02:40:23 +08:00
parent 1bd0318d35
commit 9b0e105647
7 changed files with 86 additions and 13 deletions

View File

@@ -214,10 +214,11 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, ActivityMainBi
@Override
protected void initData() {
// 任意 REST 接口 401 -> 直接回登录页(与 WebSocket 4001/4003 行为一致)。
UnauthorizedInterceptor.setHandler(msg -> {
// 注意:该回调运行在 OkHttp 拦截器线程,必须切回主线程再操作 Toast / UI。
UnauthorizedInterceptor.setHandler(msg -> runOnUiThread(() -> {
Toast.makeText(MainActivity.this, msg, Toast.LENGTH_LONG).show();
logoutAndReset();
});
}));
// 令牌就绪 -> 建立信令 WebSocket
viewModel.getAccessToken().observe(this, token -> {
@@ -303,7 +304,9 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, ActivityMainBi
loadDevices();
}
/** 合并设备列表(在线设备优先置于顶部),用于列表展示。 */
/**
* 合并设备列表(在线设备优先置于顶部),用于列表展示。
*/
private void mergeDevices(List<BindingItem> items) {
for (BindingItem item : items) {
int idx = -1;
@@ -323,7 +326,9 @@ public class MainActivity extends BaseMvvmActivity<MainViewModel, ActivityMainBi
deviceList.sort((a, b) -> Boolean.compare(b.isOnline(), a.isOnline()));
}
/** 设备列表为空时显示占位提示。 */
/**
* 设备列表为空时显示占位提示。
*/
private void updateDeviceEmpty() {
boolean empty = deviceList.isEmpty();
binding.tvDeviceEmpty.setVisibility(empty ? View.VISIBLE : View.GONE);