From dca0ca3c457fcd190867a2f68da10b4fcd90f646 Mon Sep 17 00:00:00 2001 From: luozheng <1732036298@qq.com> Date: Mon, 16 Jun 2025 16:28:58 +0800 Subject: [PATCH] =?utf8?q?AI=E7=95=8C=E9=9D=A2=E5=8F=96=E6=B6=88notify?= =?utf8?q?=E6=9B=B4=E6=96=B0=E7=95=8C=E9=9D=A2=EF=BC=8C=E8=81=86=E5=90=AC?= =?utf8?q?=E5=92=8C=E6=80=9D=E8=80=83=E7=95=8C=E9=9D=A2=E9=9A=90=E8=97=8F?= =?utf8?q?=E7=95=8C=E9=9D=A2=E6=97=B6=E5=81=9C=E6=AD=A2=E5=8A=A8=E7=94=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../aivoice/include/AiVoicePresenter.h | 6 +- .../aivoice/include/AivoiceListeningView.h | 1 + .../aivoice/include/AivoiceThinkingView.h | 1 + .../nativeui/aivoice/src/AiVoiceModel.cpp | 18 +++-- .../nativeui/aivoice/src/AiVoicePresenter.cpp | 69 ++++++++++++------- .../nativeui/aivoice/src/AiVoiceView.cpp | 23 +++++++ .../aivoice/src/AivoiceListeningView.cpp | 13 +++- .../aivoice/src/AivoiceThinkingView.cpp | 13 +++- 8 files changed, 106 insertions(+), 38 deletions(-) diff --git a/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AiVoicePresenter.h b/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AiVoicePresenter.h index ede8f78ba..805f00a30 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AiVoicePresenter.h +++ b/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AiVoicePresenter.h @@ -22,8 +22,8 @@ namespace OHOS public UIView::OnDragListener, public RootView::OnKeyActListener, public UIPicker::SelectedListener, - public UIView::OnTouchListener, - public ModelListenerSample + public UIView::OnTouchListener + // public ModelListenerSample { public: typedef enum : uint8_t @@ -44,7 +44,7 @@ namespace OHOS void OnResume() override; void OnPause() override; void OnStop() override; - void Notify() override; + // void Notify() override; void calculateChatContentItemViewHeight(std::string text, bool flag); bool JumpToReturnResultTextView(void); diff --git a/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AivoiceListeningView.h b/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AivoiceListeningView.h index d6819659b..8c35c3b11 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AivoiceListeningView.h +++ b/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AivoiceListeningView.h @@ -71,6 +71,7 @@ namespace OHOS static AivoiceListeningView *GetInstance(void); UIScrollView *CreateAivoiceListeningView(void); UILabelExt *GetShowtimeoutLabel(void); + void StartOrStopAivoiceListeningImageAnimatorView(bool val); private: void ClearAll(void); diff --git a/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AivoiceThinkingView.h b/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AivoiceThinkingView.h index d5b7c3487..9f4bbd920 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AivoiceThinkingView.h +++ b/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AivoiceThinkingView.h @@ -64,6 +64,7 @@ namespace OHOS ~AivoiceThinkingView(); static AivoiceThinkingView *GetInstance(void); UIScrollView *CreateAivoiceThinkingView(void); + void StartOrStopAiVoiceThinkingImageAnimatorView(bool val); private: void ClearAll(void); diff --git a/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AiVoiceModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AiVoiceModel.cpp index d68303fd4..9ffb8cbc3 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AiVoiceModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AiVoiceModel.cpp @@ -550,7 +550,7 @@ namespace OHOS { if (view_ != nullptr) { - start_ai4g_tts_play_timer();//开启一个定时器,用于播放tts音频 + start_ai4g_tts_play_timer(); // 开启一个定时器,用于播放tts音频 if (view_->GetAiVoiceScrollView(AIVOICE_RETURN_RESULT_TEXT_VIEWID) && view_->GetAiVoiceScrollView(AIVOICE_RETURN_RESULT_TEXT_VIEWID)->IsVisible()) { if (!OHOS::AiVoiceModel::GetInstance().GetIsLimitDisplayed()) // 如果ai答案没有显示到极限了,就更新ai答案字符串 @@ -638,12 +638,12 @@ namespace OHOS #if IS_SUPPORT_REALTIME_RECORD_SEND_AI int type = GetCurUsingAiModelType(); WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "type = %d", type); - if(AiVoiceModel::GetInstance().GetSelect4gorbt() == AI_SELECT_BT) + if (AiVoiceModel::GetInstance().GetSelect4gorbt() == AI_SELECT_BT) { streamingRecordAndSend_AI(type); // 实时发送录音数据 } - else if(AiVoiceModel::GetInstance().GetSelect4gorbt() == AI_SELECT_4G) - { + else if (AiVoiceModel::GetInstance().GetSelect4gorbt() == AI_SELECT_4G) + { startAudioCaptureTask(); } #else @@ -679,7 +679,7 @@ namespace OHOS uapi_stop_asr(); stop_AudioCaptureProcess_AI(); } - else if(GetSelect4gorbt() == AI_SELECT_BT) + else if (GetSelect4gorbt() == AI_SELECT_BT) { int32_t argc = 1; uint8_t *argv = (uint8_t *)"stop"; @@ -885,7 +885,7 @@ namespace OHOS { // 60s后息屏停止定时 AiVoiceModel::GetInstance().ai_stop_screen60s_timer(); - if(AiVoiceModel::GetInstance().GetSelect4gorbt() == AI_SELECT_BT) + if (AiVoiceModel::GetInstance().GetSelect4gorbt() == AI_SELECT_BT) { ScreenAlwaysOnCtr(CANCEL_SCREEN_ALWAYS_ON); // 取消常亮屏 } @@ -1242,12 +1242,10 @@ namespace OHOS // 移除所有换行符(包括 '\n' 和 '\r') str.erase( std::remove(str.begin(), str.end(), '\n'), - str.end() - ); + str.end()); str.erase( std::remove(str.begin(), str.end(), '\r'), - str.end() - ); + str.end()); uapi_start_tts_single_txt((char *)str.c_str()); } } diff --git a/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AiVoicePresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AiVoicePresenter.cpp index f7572ea3d..33f1135c4 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AiVoicePresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AiVoicePresenter.cpp @@ -94,7 +94,7 @@ namespace OHOS ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON); // 开启一个60s取消长亮屏timer model->ai_start_screen60s_timer(); - add_4GAI_vote();//4g投票 + add_4GAI_vote(); // 4g投票 uapi_ble_connect_param_update(BLE_CONNECT_INTERVAL_HIGH_AI); } @@ -130,7 +130,7 @@ namespace OHOS model->stop_ai_isready_timer(); model->stop_ai4g_connect_timer(); model->stop_ai4g_tts_play_timer(); - remove_4GAI_vote();//移除4g投票 + remove_4GAI_vote(); // 移除4g投票 uapi_ble_connect_param_update(BLE_CONNECT_INTERVAL_SLOW); } @@ -139,16 +139,24 @@ namespace OHOS bool AiVoicePresenter::JumpToReturnResultTextView(void) { WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AiVoicePresenter::JumpToReturnResultTextView"); - if (view_->GetAiVoiceScrollView(AIVOICE_THINKING_VIEWID) != nullptr && - view_->GetAiVoiceScrollView(AIVOICE_THINKING_VIEWID)->IsVisible()) + if (model->GetSelect4gorbt() == AI_SELECT_4G) { preHeight = 0; ChangeViewAndLogicOperator(model->GetCurView(), AIVOICE_RETURN_RESULT_TEXT_VIEWID); } - else + else if (model->GetSelect4gorbt() == AI_SELECT_BT) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AiVoicePresenter::JumpToReturnResultTextView fail"); - return false; + if (view_->GetAiVoiceScrollView(AIVOICE_THINKING_VIEWID) != nullptr && + view_->GetAiVoiceScrollView(AIVOICE_THINKING_VIEWID)->IsVisible()) + { + preHeight = 0; + ChangeViewAndLogicOperator(AIVOICE_THINKING_VIEWID, AIVOICE_RETURN_RESULT_TEXT_VIEWID); + } + else + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AiVoicePresenter::JumpToReturnResultTextView fail"); + return false; + } } return true; } @@ -290,7 +298,10 @@ namespace OHOS switch (hideView) { case AIVOICE_STARTCHAT_VIEWID: - model->QuerySelectedAiModelIsConnect(); /*查询用户选择的AI模型是否已经连接*/ + if (model->GetAI_4G_state() == true || model->GetAI_BT_state() == true) + { + model->QuerySelectedAiModelIsConnect(); /*查询用户选择的AI模型是否已经连接*/ + } if (showView == AIVOICE_LISTENING_VIEWID) { model->StartListenAndRecordingUserQuestion(); @@ -393,7 +404,7 @@ namespace OHOS { uapi_start_asr(); usleep(50000); - ChangeViewAndLogicOperator(AIVOICE_RETURN_RESULT_TEXT_VIEWID,AIVOICE_AIMODE_CONNECTING); + ChangeViewAndLogicOperator(AIVOICE_RETURN_RESULT_TEXT_VIEWID, AIVOICE_AIMODE_CONNECTING); return true; } else if (model->GetSelect4gorbt() == AI_SELECT_BT) @@ -496,6 +507,7 @@ namespace OHOS } else { + model->QuerySelectedAiModelIsConnect(); /*查询用户选择的AI模型是否已经连接*/ ChangeViewAndLogicOperator(AIVOICE_STARTCHAT_VIEWID, AIVOICE_AIMODE_CONNECTING); // LOADING } return true; @@ -503,6 +515,7 @@ namespace OHOS else if (viewId == AIVOICE_SELECT_VIEW_BUTTONBT_VIEW_ID) // 如果点击的是蓝牙连接方式 { model->SetSelect4gorbt(AI_SELECT_BT); + model->QuerySelectedAiModelIsConnect(); /*查询用户选择的AI模型是否已经连接*/ ChangeViewAndLogicOperator(model->GetCurView(), AIVOICE_AIMODE_CONNECTING); } @@ -653,23 +666,33 @@ namespace OHOS { preHeight = label.GetTextHeight(); isScroll = true; - } - return; - } - - // 监听高度是否变化 - void AiVoicePresenter::Notify() - { - if ((view_->GetAiVoiceScrollView(AIVOICE_RETURN_RESULT_TEXT_VIEWID) != nullptr) && - (view_->GetAiVoiceScrollView(AIVOICE_RETURN_RESULT_TEXT_VIEWID)->IsVisible())) - { - if (isScroll) + if ((view_->GetAiVoiceScrollView(AIVOICE_RETURN_RESULT_TEXT_VIEWID) != nullptr) && + (view_->GetAiVoiceScrollView(AIVOICE_RETURN_RESULT_TEXT_VIEWID)->IsVisible())) { - // 监听,让List实现滚动 - AivoiceReturnResultTextView::GetInstance()->GetChatContentList()->ScrollBy(-120); - isScroll = false; + if (isScroll) + { + // 监听,让List实现滚动 + AivoiceReturnResultTextView::GetInstance()->GetChatContentList()->ScrollBy(-120); + isScroll = false; + } } } return; } + + // 监听高度是否变化 + // void AiVoicePresenter::Notify() + // { + // if ((view_->GetAiVoiceScrollView(AIVOICE_RETURN_RESULT_TEXT_VIEWID) != nullptr) && + // (view_->GetAiVoiceScrollView(AIVOICE_RETURN_RESULT_TEXT_VIEWID)->IsVisible())) + // { + // if (isScroll) + // { + // // 监听,让List实现滚动 + // AivoiceReturnResultTextView::GetInstance()->GetChatContentList()->ScrollBy(-120); + // isScroll = false; + // } + // } + // return; + // } } \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AiVoiceView.cpp b/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AiVoiceView.cpp index 2359ad55a..f7aa2a0e3 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AiVoiceView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AiVoiceView.cpp @@ -636,6 +636,7 @@ namespace OHOS } if (p_AivoiceListeningView) { + p_AivoiceListeningView->StartOrStopAivoiceListeningImageAnimatorView(true); p_AivoiceListeningView->GetShowtimeoutLabel()->SetText("10"); p_AivoiceListeningView->GetShowtimeoutLabel()->Invalidate(); } @@ -665,6 +666,10 @@ namespace OHOS AiVoiceScrollView[thisView] = scrollview; container_->Add(AiVoiceScrollView[thisView]); } + if (p_AivoiceThinkingView) + { + p_AivoiceThinkingView->StartOrStopAiVoiceThinkingImageAnimatorView(true); + } return true; } @@ -901,6 +906,8 @@ namespace OHOS static const int16 AiVoiceDestroyMapper[] = { AIVOICE_AIMODE_CONNECTING, AIVOICE_4GSERVICECON_VIEW, + // AIVOICE_LISTENING_VIEWID, + // AIVOICE_THINKING_VIEWID, }; void AiVoiceView::DestroyTempView(int16_t hideView) @@ -934,6 +941,22 @@ namespace OHOS p_Aivoice4gServiceConView = nullptr; } break; + case AIVOICE_LISTENING_VIEWID: + if (p_AivoiceListeningView) + { + // delete p_AivoiceListeningView; + // p_AivoiceListeningView = nullptr; + p_AivoiceListeningView->StartOrStopAivoiceListeningImageAnimatorView(false); + } + break; + case AIVOICE_THINKING_VIEWID: + if (p_AivoiceThinkingView) + { + // delete p_AivoiceThinkingView; + // p_AivoiceThinkingView = nullptr; + p_AivoiceThinkingView->StartOrStopAiVoiceThinkingImageAnimatorView(false); + } + break; default: break; } diff --git a/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AivoiceListeningView.cpp b/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AivoiceListeningView.cpp index 050d4522d..f1d1b340e 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AivoiceListeningView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AivoiceListeningView.cpp @@ -141,7 +141,7 @@ namespace OHOS animatorView->SetSizeFixed(true); // animatorView->SetAutoEnable(false); // animatorView->SetResizeMode(UIImageAnimatorView::FILL); - animatorView->Start(); + // animatorView->Start(); return animatorView; } @@ -279,6 +279,17 @@ namespace OHOS return true; } + void AivoiceListeningView::StartOrStopAivoiceListeningImageAnimatorView(bool val) + { + if (AiVoiceListeningImageAnimatorView) + { + if (val) + AiVoiceListeningImageAnimatorView->Start(); + else + AiVoiceListeningImageAnimatorView->Stop(); + } + } + UIScrollView *AivoiceListeningView::CreateAivoiceListeningView(void) { WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AivoiceListeningView::CreateAivoiceListeningView"); diff --git a/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AivoiceThinkingView.cpp b/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AivoiceThinkingView.cpp index 6e7db531a..f77f124de 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AivoiceThinkingView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AivoiceThinkingView.cpp @@ -136,7 +136,7 @@ namespace OHOS animatorView->SetSizeFixed(true); // animatorView->SetAutoEnable(false); // animatorView->SetResizeMode(UIImageAnimatorView::FILL); - animatorView->Start(); + // animatorView->Start(); return animatorView; } @@ -262,6 +262,17 @@ namespace OHOS return true; } + void AivoiceThinkingView::StartOrStopAiVoiceThinkingImageAnimatorView(bool val) + { + if (AiVoiceThinkingImageAnimatorView != nullptr) + { + if (val) + AiVoiceThinkingImageAnimatorView->Start(); + else + AiVoiceThinkingImageAnimatorView->Stop(); + } + } + UIScrollView *AivoiceThinkingView::CreateAivoiceThinkingView(void) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceThinkingView::CreateAivoiceThinkingView"); -- 2.17.1