*/
bool ThunderBirdPresenter::HandleFuncKey(uint16_t keyState, int16_t currentView, int16_t currentSubView, int screenState)
{
- // 处理设备列表功能
- if (keyState == InputDevice::STATE_RELEASE && screenState == 0 )
+ // 处理设备列表功能(仅蓝牙界面松开时在此处理并 return)
+ if (keyState == InputDevice::STATE_RELEASE && screenState == 0 && currentView == THUNDERBIRD_BLUEVIEW)
{
- if(currentView == THUNDERBIRD_BLUEVIEW )
+ funcKeyPressedForRelease = false;
+ if(currentSubView == ThunderBirdBlueView::THUNDERBIRD_BULEVIEW_DEVICE_LIST)
{
- if(currentSubView == ThunderBirdBlueView::THUNDERBIRD_BULEVIEW_DEVICE_LIST)
- {
- // 处理设备列表功能
- if(ThunderBirdBlueView::GetInstance())
- ThunderBirdBlueView::GetInstance()->OnKeyConfirm();// 点击确认键:确认选择当前设备
- }
- else if(currentSubView == ThunderBirdBlueView::THUNDERBIRD_BULEVIEW_CONNECT_SUCCESS)
- {
- //跳转到断连询问界面
- ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_BLUEVIEW, ThunderBirdBlueView::THUNDERBIRD_BULEVIEW_DISCONNECT_CONFIRM);
- }
- else if(currentSubView == ThunderBirdBlueView::THUNDERBIRD_BULEVIEW_DISCONNECT_CONFIRM)
- {
- //执行断连操作
- ThunderBirdBlueView::GetInstance()->ExecuteDisconnect();
- }
+ if(ThunderBirdBlueView::GetInstance())
+ ThunderBirdBlueView::GetInstance()->OnKeyConfirm();
+ }
+ else if(currentSubView == ThunderBirdBlueView::THUNDERBIRD_BULEVIEW_CONNECT_SUCCESS)
+ {
+ ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_BLUEVIEW, ThunderBirdBlueView::THUNDERBIRD_BULEVIEW_DISCONNECT_CONFIRM);
+ }
+ else if(currentSubView == ThunderBirdBlueView::THUNDERBIRD_BULEVIEW_DISCONNECT_CONFIRM)
+ {
+ ThunderBirdBlueView::GetInstance()->ExecuteDisconnect();
}
return true;
}
- // 短按FUNC键(息屏状态下)
- if (keyState == InputDevice::STATE_PRESS && screenState == 0 ) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HandleFuncKey: KEY_TYPE_FUNC press");
-
- if(currentView == THUNDERBIRD_LULLABYVIEW && currentSubView == ThunderBirdLullabyView::THUNDERBIRD_LULLABYVIEW_3)
- {
- // HandleLullabyFunction(currentView, currentSubView);
- // ln_ws_start_audio_chat(LN_AUDIO_CHAT_CHOOSE_STORY_REQUEST);
- // ThunderBirdLullabyView::GetInstance()->listenAnimator->Start();
+ // 对话模式下 FUNC 短按:按下记录,松开触发(按下然后松开才触发)
+ if (currentView == THUNDERBIRD_DIALOGUEVIEW &&
+ (currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_LISTENING ||
+ currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_SPEAKING)) {
+ if (keyState == InputDevice::STATE_PRESS && screenState == 0) {
+ funcKeyPressedForRelease = true;
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "HandleFuncKey: KEY_TYPE_FUNC pressed in dialogue, wait release");
+ return true;
}
- else if(currentView == THUNDERBIRD_DIALOGUEVIEW &&
- (currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_LISTENING || currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_SPEAKING))
- {
- // 处理对话功能
+ if (keyState == InputDevice::STATE_RELEASE && screenState == 0 && funcKeyPressedForRelease) {
+ funcKeyPressedForRelease = false;
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HandleFuncKey: KEY_TYPE_FUNC press+release in dialogue");
HandleDialogueFunction(currentView, currentSubView);
+ return true;
}
- else
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HandleFuncKey: KEY_TYPE_FUNC press, but not in dialogue mode");
+ if (keyState == InputDevice::STATE_RELEASE) {
+ // 其它松开场景(例如屏幕状态变化),仅清除标志
+ funcKeyPressedForRelease = false;
+ return true;
+ }
+ } else {
+ // 非对话界面,任何松开都清除标志,避免残留对对话逻辑的影响
+ if (keyState == InputDevice::STATE_RELEASE) {
+ funcKeyPressedForRelease = false;
}
}
mainView->listenIcon->SetVisible(false);
}
ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_SPEAKING);
+ ThunderBirdModel::GetInstance()->SetNormalEnterListening(true); // 按键从 listening -> speaking,视为“正常”speaking
} else if(currentView == THUNDERBIRD_DIALOGUEVIEW && currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_SPEAKING) {
// 检查 WebSocket 连接状态,如果正在重连,等待重连完成
// int wsState = ln_ws_get_connection_state();
if (mainView && mainView->listenIcon) {
mainView->listenIcon->SetVisible(true);
}
+ // 按键进入聆听界面时打开 VAD 识别
+ ln_ws_set_vad_recognition_enabled(true);
// 开始录音
ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_LISTENING);
- ln_ws_start_audio_chat(LN_AUDIO_CHAT_VOICE_CHAT_REQUEST);
+ // ln_ws_start_audio_chat(LN_AUDIO_CHAT_VOICE_CHAT_REQUEST);
}
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "语音键处理完成");
}
}
if (reminderView) {
+ // 在对话界面时,将 ReminderView 的 group 置于最上层,避免被 DialogueView 的 RemindButton 遮挡导致看起来按键无反应
+ if (currentView == THUNDERBIRD_DIALOGUEVIEW) {
+ ThunderBirdMainView::GetInstance()->BringGroupToFront(THUNDERBIRD_REMINDERVIEW);
+ }
// 检查音量界面是否已经显示
if (reminderView->IsVolumeViewVisible()) {
// 界面已经显示,只更新音量并重新启动定时器(再延时1秒),不切换界面