fix: 长按阈值从会话开始计时,扣除 ASR 握手耗时

arm_voice_agent_long_press 之前在 begin_session(含 ASR 握手)之后才睡 550ms,
握手慢时实际长按阈值被拉长、判定不稳。改为从 state.started_at(≈按下时刻)算起
睡剩余时间,阈值稳定。
This commit is contained in:
吕柏青 committed 2026-06-05 10:47:55 +08:00
1 parent ee50665278
commit e9e7ba50c4
1 file changed
+8 -2
@@ -556,10 +556,16 @@ pub(super) async fn handle_released(inner: &Arc<Inner>) {
/// 长按计时器:begin_session 后武装。到点时若热键仍按住、仍是同一会话、且尚未升级,
/// 就把当前会话标记为语音 Agent。短按(计时器到点前已松手)不受影响。
fn arm_voice_agent_long_press(inner: &Arc<Inner>) {
let session_id = inner.state.lock().session_id;
// 阈值从会话开始(≈按下时刻)算起,扣掉 begin_session(含 ASR 握手)已耗时间,
// 否则握手慢时实际阈值会被拉长、长按判定不稳定。
let (session_id, started_at) = {
let st = inner.state.lock();
(st.session_id, st.started_at)
};
let remaining = VOICE_AGENT_LONG_PRESS.saturating_sub(started_at.elapsed());
let inner = Arc::clone(inner);
async_runtime::spawn(async move {
tokio::time::sleep(VOICE_AGENT_LONG_PRESS).await;
tokio::time::sleep(remaining).await;
// 已松手 → 这是一次普通点按(听写),不升级。
if !inner.hotkey_trigger_held.load(Ordering::SeqCst) {
return;