From 93f71e8559a10becc42fb2af0ca1f308aef456e7 Mon Sep 17 00:00:00 2001 From: luozheng <1732036298@qq.com> Date: Sat, 22 Jun 2024 18:49:46 +0800 Subject: [PATCH] =?utf8?q?AiVoice=E8=A7=86=E5=9B=BE=E6=B7=BB=E5=8A=A0?= =?utf8?q?=E4=B8=8E=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../wearable/fd230app/CMakeLists.txt | 6 +- .../include/AiVoiceBluetoothFailedStartView.h | 74 +++++ .../nativeui/aivoice/include/AiVoiceModel.h | 5 +- .../aivoice/include/AiVoicePresenter.h | 2 +- .../nativeui/aivoice/include/AiVoiceView.h | 17 +- .../include/AivoiceConnectTimeoutView.h | 74 +++++ .../aivoice/include/AivoiceListeningView.h | 73 +++++ .../AivoiceMobileDataFailedStartView.h | 74 +++++ .../src/AiVoiceBluetoothFailedStartView.cpp | 264 ++++++++++++++++++ .../nativeui/aivoice/src/AiVoiceModel.cpp | 18 +- .../nativeui/aivoice/src/AiVoicePresenter.cpp | 61 +++- .../nativeui/aivoice/src/AiVoiceView.cpp | 146 +++++++++- .../aivoice/src/AivoiceConnectTimeoutView.cpp | 264 ++++++++++++++++++ .../aivoice/src/AivoiceListeningView.cpp | 245 ++++++++++++++++ .../src/AivoiceMobileDataFailedStartView.cpp | 264 ++++++++++++++++++ 15 files changed, 1563 insertions(+), 24 deletions(-) create mode 100644 code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AivoiceConnectTimeoutView.h create mode 100644 code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AivoiceListeningView.h create mode 100644 code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AivoiceMobileDataFailedStartView.h create mode 100644 code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AivoiceConnectTimeoutView.cpp create mode 100644 code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AivoiceListeningView.cpp create mode 100644 code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AivoiceMobileDataFailedStartView.cpp diff --git a/code/sdk/application/wearable/fd230app/CMakeLists.txt b/code/sdk/application/wearable/fd230app/CMakeLists.txt index 880e46803..d38afa134 100644 --- a/code/sdk/application/wearable/fd230app/CMakeLists.txt +++ b/code/sdk/application/wearable/fd230app/CMakeLists.txt @@ -385,7 +385,11 @@ set(SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/aivoice/src/AiVoiceModel.cpp ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/aivoice/src/AiVoicePresenter.cpp ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/aivoice/src/AiVoiceView.cpp - + ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/aivoice/src/AiVoiceBluetoothFailedStartView.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/aivoice/src/AivoiceMobileDataFailedStartView.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/aivoice/src/AivoiceConnectTimeoutView.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/aivoice/src/AivoiceListeningView.cpp + #声音与震动 ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/soundandvibration/src/SoundAndVibrationPresenter.cpp ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/soundandvibration/src/SoundAndVibrationView.cpp diff --git a/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AiVoiceBluetoothFailedStartView.h b/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AiVoiceBluetoothFailedStartView.h index e69de29bb..141f15b55 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AiVoiceBluetoothFailedStartView.h +++ b/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AiVoiceBluetoothFailedStartView.h @@ -0,0 +1,74 @@ +/* + * @Author: luozheng 1732036298@qq.com + * @Date: 2024-06-21 17:07:07 + * @LastEditors: luozheng 1732036298@qq.com + * @LastEditTime: 2024-06-22 16:59:20 + * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AiVoiceBluetoothFailedStartView.h + */ + +#ifndef AI_VOICE_BLUETOOTH_FAILEDSTART_VIEW_H +#define AI_VOICE_BLUETOOTH_FAILEDSTART_VIEW_H + +#include "components/ui_scroll_view.h" +#include "components/ui_label_ext.h" +#include "components/ui_button.h" +#include "components/ui_image_view.h" + +namespace OHOS +{ + static constexpr const char *BLUETOOTHFAILEDSTART_ENSURE_BUTTON_VIEW_ID = "BluetoothFailedStartEnsureButton";//蓝牙未开启界面的确定按钮 + + class AiVoiceBluetoothFailedStartView + { + public: + struct LabelConfig + { + int16_t left; + int16_t top; + int16_t width; + int16_t height; + int16_t fontSize; + int16_t lineHeigh; + uint16_t textId; + uint8_t lineBreakMode; + }; + struct ButtonConfig + { + int16_t x; + int16_t y; + int16_t w; + int16_t h; + const char *ViewId; + }; + + struct ImageConfig + { + int16_t x; + int16_t y; + int16_t w; + int16_t h; + }; + + AiVoiceBluetoothFailedStartView(); + ~AiVoiceBluetoothFailedStartView(); + static AiVoiceBluetoothFailedStartView *GetInstance(void); + UIScrollView *CreateAiVoiceBluetoothFailedStartView(void); + + private: + void ClearAll(void); + UILabelExt *AiVoiceBluetoothFailedStartLabelInit(LabelConfig &labelconfig); + UIButton *AiVoiceBluetoothFailedStartButtonInit(ButtonConfig &buttonconfig); + UIImageView *AiVoiceBluetoothFailedStartImageInit(ImageConfig &imageconfig); + bool CreateAiVoiceBluetoothFailedStartLabel(void); + bool CreateAiVoiceBluetoothFailedStartButton(void); + bool CreateAiVoiceBluetoothFailedStartImage(void); + bool CreateAiVoiceBluetoothFailedStartScrollView(void); + UIScrollView *scrollView{nullptr}; + UILabelExt *title{nullptr}; + UIImageView *attentionImage{nullptr}; + UILabelExt *label[2]{nullptr}; + UILabelExt *ensure{nullptr}; + UIButton *ensureButton{nullptr}; + }; +} +#endif \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AiVoiceModel.h b/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AiVoiceModel.h index 9c40b548a..2a79907af 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AiVoiceModel.h +++ b/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AiVoiceModel.h @@ -2,7 +2,7 @@ * @Author: luozheng 1732036298@qq.com * @Date: 2024-06-20 15:14:43 * @LastEditors: luozheng 1732036298@qq.com - * @LastEditTime: 2024-06-20 20:13:47 + * @LastEditTime: 2024-06-22 17:55:53 * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AiVoiceModel.h */ #ifndef AI_VOICE_MODEL_H @@ -14,6 +14,9 @@ namespace OHOS { public: static AiVoiceModel &GetInstance(void); + bool GetBluetoothIsOpen(void); + bool GetMobileDataIsOpen(void); + bool GetAiVoiceConnectStatus(void); private: AiVoiceModel(); 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 615d7fdd6..d509ac45e 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AiVoicePresenter.h +++ b/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AiVoicePresenter.h @@ -2,7 +2,7 @@ * @Author: luozheng 1732036298@qq.com * @Date: 2024-06-20 14:44:22 * @LastEditors: luozheng 1732036298@qq.com - * @LastEditTime: 2024-06-21 21:07:37 + * @LastEditTime: 2024-06-22 09:51:24 * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AiVoicePresenter.h */ #ifndef AI_VOICE_PRESENTER_H diff --git a/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AiVoiceView.h b/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AiVoiceView.h index 901588968..3a2012448 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AiVoiceView.h +++ b/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AiVoiceView.h @@ -2,7 +2,7 @@ * @Author: luozheng 1732036298@qq.com * @Date: 2024-06-08 09:36:01 * @LastEditors: luozheng 1732036298@qq.com - * @LastEditTime: 2024-06-21 21:07:45 + * @LastEditTime: 2024-06-22 17:48:56 * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/include/AiVoiceView.h */ #ifndef AI_VOICE_VIEW_H @@ -14,6 +14,11 @@ #include "components/ui_button.h" #include "components/ui_scroll_view.h" #include "components/ui_image_view.h" +#include "aivoice/include/AiVoiceBluetoothFailedStartView.h" +#include "aivoice/include/AivoiceMobileDataFailedStartView.h" +#include "aivoice/include/AivoiceConnectTimeoutView.h" +#include "aivoice/include/AivoiceListeningView.h" + namespace OHOS { static constexpr const char *START_CHAT_BUTTON_VIEW_ID = "StartChatButton"; // 开始对话 @@ -67,6 +72,7 @@ namespace OHOS AiVoiceView(); ~AiVoiceView(); static AiVoiceView *GetInstance(void); + UIScrollView *GetAiVoiceScrollView(int16_t index); bool ClickFunc(int16_t interface); void ChangeView(int16_t hideView, int16_t showView); bool ChangeAiVoiceStartChatView(int16_t thisView); @@ -82,13 +88,20 @@ namespace OHOS void OnTearDownView() override; void OnStop() override; + private: + AiVoiceBluetoothFailedStartView *p_AiVoiceBluetoothFailedStartView{nullptr}; + AivoiceMobileDataFailedStartView *p_AivoiceMobileDataFailedStartView{nullptr}; + AivoiceConnectTimeoutView *p_AivoiceConnectTimeoutView{nullptr}; + AivoiceListeningView *p_AivoiceListeningView{nullptr}; + private: UILabelExt *AiVoiceViewLabelInit(LabelConfig &labelconfig); UIImageView *AiVoiceViewImageView(ImageConfig &imageconfig); - UIButton *AiVoiceViewLabelButtonInit(ButtonConfig &buttonconfig); + UIButton *AiVoiceViewButtonInit(ButtonConfig &buttonconfig); bool CreateAiVoiceViewLabel(void); bool CreateAiVoiceViewImageView(void); bool CreateAiVoiceViewButton(void); + bool CreateAiVoiceScrollView(void); void CreateAiVoiceView(void); void ClearAll(void); UILabelExt *title{nullptr}; diff --git a/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AivoiceConnectTimeoutView.h b/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AivoiceConnectTimeoutView.h new file mode 100644 index 000000000..25d25e4ff --- /dev/null +++ b/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AivoiceConnectTimeoutView.h @@ -0,0 +1,74 @@ +/* + * @Author: luozheng 1732036298@qq.com + * @Date: 2024-06-22 16:46:26 + * @LastEditors: luozheng 1732036298@qq.com + * @LastEditTime: 2024-06-22 17:00:33 + * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AivoiceConnectTimeoutView.h + */ + +#ifndef AIVOICE_CONNECT_TIMEOUT_VIEW_H +#define AIVOICE_CONNECT_TIMEOUT_VIEW_H + +#include "components/ui_scroll_view.h" +#include "components/ui_label_ext.h" +#include "components/ui_button.h" +#include "components/ui_image_view.h" + +namespace OHOS +{ + static constexpr const char *AIVOICECONNECTTIMEOUT_ENSURE_BUTTON_VIEW_ID = "AivoiceConnectTimeoutEnsureButton"; // 连接超时界面确定按钮 + + class AivoiceConnectTimeoutView + { + public: + struct LabelConfig + { + int16_t left; + int16_t top; + int16_t width; + int16_t height; + int16_t fontSize; + int16_t lineHeigh; + uint16_t textId; + uint8_t lineBreakMode; + }; + struct ButtonConfig + { + int16_t x; + int16_t y; + int16_t w; + int16_t h; + const char *ViewId; + }; + + struct ImageConfig + { + int16_t x; + int16_t y; + int16_t w; + int16_t h; + }; + + AivoiceConnectTimeoutView(); + ~AivoiceConnectTimeoutView(); + static AivoiceConnectTimeoutView *GetInstance(void); + UIScrollView *CreateAivoiceConnectTimeoutView(void); + + private: + void ClearAll(void); + UILabelExt *AivoiceConnectTimeoutLabelInit(LabelConfig &labelconfig); + UIButton *AivoiceConnectTimeoutButtonInit(ButtonConfig &buttonconfig); + UIImageView *AivoiceConnectTimeoutImageInit(ImageConfig &imageconfig); + bool CreateAivoiceConnectTimeoutLabel(void); + bool CreateAivoiceConnectTimeoutButton(void); + bool CreateAivoiceConnectTimeoutImage(void); + bool CreateAivoiceConnectTimeoutScrollView(void); + UIScrollView *scrollView{nullptr}; + UILabelExt *title{nullptr}; + UIImageView *attentionImage{nullptr}; + UILabelExt *label[2]{nullptr}; + UILabelExt *ensure{nullptr}; + UIButton *ensureButton{nullptr}; + }; +} +#endif diff --git a/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AivoiceListeningView.h b/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AivoiceListeningView.h new file mode 100644 index 000000000..522b6ec14 --- /dev/null +++ b/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AivoiceListeningView.h @@ -0,0 +1,73 @@ +/* + * @Author: luozheng 1732036298@qq.com + * @Date: 2024-06-22 16:46:26 + * @LastEditors: luozheng 1732036298@qq.com + * @LastEditTime: 2024-06-22 17:41:04 + * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AivoiceListeningView.h + */ + +#ifndef AIVOICE_LISTENING_VIEW_H +#define AIVOICE_LISTENING_VIEW_H + +#include "components/ui_scroll_view.h" +#include "components/ui_label_ext.h" +#include "components/ui_button.h" +#include "components/ui_image_view.h" + +namespace OHOS +{ + static constexpr const char *FINISH_SPEAKING_BUTTON_VIEW_ID = "FinishSpeakingButton"; // 聆听中界面说话完毕按钮 + + class AivoiceListeningView + { + public: + struct LabelConfig + { + int16_t left; + int16_t top; + int16_t width; + int16_t height; + int16_t fontSize; + int16_t lineHeigh; + uint16_t textId; + uint8_t lineBreakMode; + }; + struct ButtonConfig + { + int16_t x; + int16_t y; + int16_t w; + int16_t h; + const char *ViewId; + }; + + struct ImageConfig + { + int16_t x; + int16_t y; + int16_t w; + int16_t h; + }; + + AivoiceListeningView(); + ~AivoiceListeningView(); + static AivoiceListeningView *GetInstance(void); + UIScrollView *CreateAivoiceListeningView(void); + + private: + void ClearAll(void); + UILabelExt *AivoiceListeningLabelInit(LabelConfig &labelconfig); + UIButton *AivoiceListeningButtonInit(ButtonConfig &buttonconfig); + UIImageView *AivoiceListeningImageInit(ImageConfig &imageconfig); + bool CreateAivoiceListeningLabel(void); + bool CreateAivoiceListeningButton(void); + bool CreateAivoiceListeningImage(void); + bool CreateAivoiceListeningScrollView(void); + UIScrollView *scrollView{nullptr}; + UILabelExt *title{nullptr}; + UIImageView *attentionImage{nullptr}; + UILabelExt *finishSpeak{nullptr}; + UIButton *finishSpeakButton{nullptr}; + }; +} +#endif diff --git a/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AivoiceMobileDataFailedStartView.h b/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AivoiceMobileDataFailedStartView.h new file mode 100644 index 000000000..8a1c056aa --- /dev/null +++ b/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AivoiceMobileDataFailedStartView.h @@ -0,0 +1,74 @@ +/* + * @Author: luozheng 1732036298@qq.com + * @Date: 2024-06-22 15:22:56 + * @LastEditors: luozheng 1732036298@qq.com + * @LastEditTime: 2024-06-22 16:59:59 + * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AivoiceMobileDataFailedStartView.h + */ + +#ifndef AIVOICE_MOBILEDATA_FAILEDSTART_VIEW_H +#define AIVOICE_MOBILEDATA_FAILEDSTART_VIEW_H + +#include "components/ui_scroll_view.h" +#include "components/ui_label_ext.h" +#include "components/ui_button.h" +#include "components/ui_image_view.h" + +namespace OHOS +{ + static constexpr const char *MOBILEDATAFAILEDSTART_ENSURE_BUTTON_VIEW_ID = "MobiledatafailedStartEnsureButton"; // 移动数据未开启界面的确定按钮 + + class AivoiceMobileDataFailedStartView + { + public: + struct LabelConfig + { + int16_t left; + int16_t top; + int16_t width; + int16_t height; + int16_t fontSize; + int16_t lineHeigh; + uint16_t textId; + uint8_t lineBreakMode; + }; + struct ButtonConfig + { + int16_t x; + int16_t y; + int16_t w; + int16_t h; + const char *ViewId; + }; + + struct ImageConfig + { + int16_t x; + int16_t y; + int16_t w; + int16_t h; + }; + + AivoiceMobileDataFailedStartView(); + ~AivoiceMobileDataFailedStartView(); + static AivoiceMobileDataFailedStartView *GetInstance(void); + UIScrollView *CreateAivoiceMobileDataFailedStartView(void); + + private: + void ClearAll(void); + UILabelExt *AivoiceMobileDataFailedStartLabelInit(LabelConfig &labelconfig); + UIButton *AivoiceMobileDataFailedStartButtonInit(ButtonConfig &buttonconfig); + UIImageView *AivoiceMobileDataFailedStartImageInit(ImageConfig &imageconfig); + bool CreateAivoiceMobileDataFailedStartLabel(void); + bool CreateAivoiceMobileDataFailedStartButton(void); + bool CreateAivoiceMobileDataFailedStartImage(void); + bool CreateAivoiceMobileDataFailedStartScrollView(void); + UIScrollView *scrollView{nullptr}; + UILabelExt *title{nullptr}; + UIImageView *attentionImage{nullptr}; + UILabelExt *label[2]{nullptr}; + UILabelExt *ensure{nullptr}; + UIButton *ensureButton{nullptr}; + }; +} +#endif \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AiVoiceBluetoothFailedStartView.cpp b/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AiVoiceBluetoothFailedStartView.cpp index e69de29bb..fc8bf34ca 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AiVoiceBluetoothFailedStartView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AiVoiceBluetoothFailedStartView.cpp @@ -0,0 +1,264 @@ +/* + * @Author: luozheng 1732036298@qq.com + * @Date: 2024-05-07 11:25:58 + * @LastEditors: luozheng 1732036298@qq.com + * @LastEditTime: 2024-06-22 15:34:59 + * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/AiVoice/src/AiVoiceBluetoothFailedStartView.cpp + */ +#include "aivoice/include/AiVoicePresenter.h" +#include "aivoice/include/AiVoiceBluetoothFailedStartView.h" +#include "wearable_log.h" +#include "language/font/ui_resource_string.h" +#include +namespace OHOS +{ + + static AiVoiceBluetoothFailedStartView *g_pAiVoiceBluetoothFailedStartView{nullptr}; + + AiVoiceBluetoothFailedStartView::AiVoiceBluetoothFailedStartView() + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AiVoiceBluetoothFailedStartView::AiVoiceBluetoothFailedStartView"); + g_pAiVoiceBluetoothFailedStartView = this; + } + + AiVoiceBluetoothFailedStartView::~AiVoiceBluetoothFailedStartView() + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AiVoiceBluetoothFailedStartView::~AiVoiceBluetoothFailedStartView"); + g_pAiVoiceBluetoothFailedStartView = nullptr; + } + + AiVoiceBluetoothFailedStartView *AiVoiceBluetoothFailedStartView::GetInstance() + { + return g_pAiVoiceBluetoothFailedStartView; + } + + void AiVoiceBluetoothFailedStartView::ClearAll(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AiVoiceBluetoothFailedStartView::ClearAll"); + if (scrollView != nullptr) + { + scrollView->RemoveAll(); + + if (title != nullptr) + { + delete title; + title = nullptr; + } + + if (attentionImage != nullptr) + { + delete attentionImage; + attentionImage = nullptr; + } + + for (int i = 0; i < 2; i++) + { + if (label[i] != nullptr) + { + delete label[i]; + label[i]; + } + } + + if (ensure != nullptr) + { + delete ensure; + ensure = nullptr; + } + + if (ensureButton != nullptr) + { + delete ensureButton; + ensureButton = nullptr; + } + + delete scrollView; + scrollView = nullptr; + } + } + + UILabelExt *AiVoiceBluetoothFailedStartView::AiVoiceBluetoothFailedStartLabelInit(LabelConfig &labelconfig) + { + UILabelExt *label = new UILabelExt(); + if (label == nullptr) + { + return nullptr; + } + label->SetPosition(labelconfig.left, labelconfig.top, labelconfig.width, labelconfig.height); + label->SetStyle(STYLE_TEXT_FONT, labelconfig.fontSize); + label->SetStyle(STYLE_LINE_HEIGHT, labelconfig.lineHeigh); + label->SetTextId(labelconfig.textId); + label->SetLineBreakMode(labelconfig.lineBreakMode); + label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); + label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, labelconfig.fontSize); + return label; + } + + UIButton *AiVoiceBluetoothFailedStartView::AiVoiceBluetoothFailedStartButtonInit(ButtonConfig &buttonconfig) + { + UIButton *button = new UIButton(); + if (button == nullptr) + { + return nullptr; + } + button->SetPosition(buttonconfig.x, buttonconfig.y, buttonconfig.w, buttonconfig.h); + button->SetViewId(buttonconfig.ViewId); + button->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919); + button->SetStyle(STYLE_BACKGROUND_OPA, 0xff); + button->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff383838, UIButton::PRESSED); + + return button; + } + + UIImageView *AiVoiceBluetoothFailedStartView::AiVoiceBluetoothFailedStartImageInit(ImageConfig &imageconfig) + { + UIImageView *Image = new UIImageView(); + if (Image == nullptr) + { + return nullptr; + } + Image->SetPosition(imageconfig.x, imageconfig.y, imageconfig.w, imageconfig.h); + return Image; + } + + bool AiVoiceBluetoothFailedStartView::CreateAiVoiceBluetoothFailedStartScrollView(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AiVoiceBluetoothFailedStartView::CreateAiVoiceBluetoothFailedStartScrollView"); + scrollView = new UIScrollView(); + if (scrollView == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AiVoiceBluetoothFailedStartView::scrollView new fail!"); + return false; + } + scrollView->SetPosition(0, 0, 466, 466); + scrollView->SetTouchable(true); + scrollView->SetDraggable(true); + + return true; + } + + bool AiVoiceBluetoothFailedStartView::CreateAiVoiceBluetoothFailedStartLabel(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AiVoiceBluetoothFailedStartView::CreateAiVoiceBluetoothFailedStartLabel"); + LabelConfig labelconfig = { + .left = 83, + .top = 52, + .width = 300, + .height = 35, + .fontSize = 30, + .lineHeigh = 35, + .textId = STR_AI_INTELLIGENT_ASSISTANT, + .lineBreakMode = UILabel::LINE_BREAK_MARQUEE, + }; + title = AiVoiceBluetoothFailedStartLabelInit(labelconfig); + if (title == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AiVoiceBluetoothFailedStartView::title is nullptr!"); + return false; + } + /* -------------------------------------------------------------------------- */ + labelconfig.left = 53; + labelconfig.width = 360; + int textId[] = {STR_BOOT_FAILED, STR_ENABLE_BLUETOOTH_FIRST}; + for (int i = 0; i < sizeof(textId) / sizeof(textId[0]); i++) + { + labelconfig.top = 222 + i * labelconfig.height; + labelconfig.textId = textId[i]; + label[i] = AiVoiceBluetoothFailedStartLabelInit(labelconfig); + if (label[i] == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AiVoiceBluetoothFailedStartView::label[%d] is nullptr!", i); + return false; + } + } + /* -------------------------------------------------------------------------- */ + labelconfig = { + .left = 133, + .top = 368, + .width = 200, + .height = 35, + .fontSize = 30, + .lineHeigh = 35, + .textId = STR_OK, + .lineBreakMode = UILabel::LINE_BREAK_MARQUEE, + }; + ensure = AiVoiceBluetoothFailedStartLabelInit(labelconfig); + if (ensure == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AiVoiceBluetoothFailedStartView::ensure is nullptr!"); + return false; + } + + return true; + } + + bool AiVoiceBluetoothFailedStartView::CreateAiVoiceBluetoothFailedStartButton(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AiVoiceBluetoothFailedStartView::CreateAiVoiceBluetoothFailedStartButton"); + ButtonConfig buttonconfig = { + .x = 93, + .y = 340, + .w = 280, + .h = 90, + .ViewId = BLUETOOTHFAILEDSTART_ENSURE_BUTTON_VIEW_ID, + }; + ensureButton = AiVoiceBluetoothFailedStartButtonInit(buttonconfig); + if (ensureButton == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ensureButton new fail!"); + return false; + } + UIView::OnClickListener *clickListener = static_cast(AiVoicePresenter::GetInstance()); + if (clickListener == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AiVoiceBluetoothFailedStartView::draglistener can not be nullptr!"); + return false; + } + ensureButton->SetOnClickListener(clickListener); + + return true; + } + + bool AiVoiceBluetoothFailedStartView::CreateAiVoiceBluetoothFailedStartImage(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AiVoiceBluetoothFailedStartView::CreateAiVoiceBluetoothFailedStartImage"); + ImageConfig imageconfig = { + .x = 193, + .y = 120, + .w = 80, + .h = 80, + }; + attentionImage = AiVoiceBluetoothFailedStartImageInit(imageconfig); + if (attentionImage == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "attentionImage new fail!"); + return false; + } + attentionImage->SetStyle(STYLE_BORDER_RADIUS, 100); + attentionImage->SetSrc(PNG_ATTENTION_IMAGE); + + return true; + } + + UIScrollView *AiVoiceBluetoothFailedStartView::CreateAiVoiceBluetoothFailedStartView(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AiVoiceBluetoothFailedStartView::CreateAiVoiceBluetoothFailedStartView"); + if (scrollView == nullptr) + { + if (!CreateAiVoiceBluetoothFailedStartScrollView() || !CreateAiVoiceBluetoothFailedStartLabel() || + !CreateAiVoiceBluetoothFailedStartButton() || !CreateAiVoiceBluetoothFailedStartImage()) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AiVoiceBluetoothFailedStartView::CreateAiVoiceBluetoothFailedStartView fail!!"); + return nullptr; + } + scrollView->Add(title); + scrollView->Add(attentionImage); + scrollView->Add(label[0]); + scrollView->Add(label[1]); + scrollView->Add(ensureButton); + scrollView->Add(ensure); + } + return scrollView; + } + +} \ No newline at end of file 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 7de4eb606..8f0db6529 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AiVoiceModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AiVoiceModel.cpp @@ -2,7 +2,7 @@ * @Author: luozheng 1732036298@qq.com * @Date: 2024-06-20 15:14:50 * @LastEditors: luozheng 1732036298@qq.com - * @LastEditTime: 2024-06-20 15:25:15 + * @LastEditTime: 2024-06-22 17:56:04 * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AiVoiceModel.cpp */ #include "aivoice/include/AiVoiceModel.h" @@ -20,4 +20,20 @@ namespace OHOS return instance; } + bool AiVoiceModel::GetBluetoothIsOpen(void) + { + return true; + } + + bool AiVoiceModel::GetMobileDataIsOpen(void) + { + return true; + } + + // 获取与AI模型的连接状态 + bool AiVoiceModel::GetAiVoiceConnectStatus(void) + { + return false; + } + } 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 ec2634410..8621d4d48 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AiVoicePresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AiVoicePresenter.cpp @@ -2,7 +2,7 @@ * @Author: luozheng 1732036298@qq.com * @Date: 2024-06-20 15:11:17 * @LastEditors: luozheng 1732036298@qq.com - * @LastEditTime: 2024-06-21 21:07:51 + * @LastEditTime: 2024-06-22 18:42:34 * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AiVoicePresenter.cpp */ #include "AppViewIDs.h" @@ -14,6 +14,8 @@ #include #include "UiConfig.h" #include "iostream" +#include // For std::string +#include // For std::unordered_map namespace OHOS { @@ -75,12 +77,48 @@ namespace OHOS WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AiVoicePresenter::OnClick"); std::string viewId = view.GetViewId(); - if (viewId == START_CHAT_BUTTON_VIEW_ID) + if (viewId == START_CHAT_BUTTON_VIEW_ID) // 如果点击的是开始对话按钮 { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AiVoicePresenter::START_CHAT_BUTTON_VIEW_ID"); + if (model->GetMobileDataIsOpen() == false) // 判断移动数据是否开启 + { + view_->ChangeView(AIVOICE_STARTCHAT_VIEWID, AIVOICE_MOBILEDATA_FAILEDSTART_VIEWID); // 开始对话->移动数据未开启界面 + } + else + { + view_->ChangeView(AIVOICE_STARTCHAT_VIEWID, AIVOICE_LISTENING_VIEWID); // 开始对话->聆听中界面 + } + return true; } - return true; + if (viewId == FINISH_SPEAKING_BUTTON_VIEW_ID) // 如果点击的是说话完毕按钮 + { + if (model->GetAiVoiceConnectStatus() == false) // 判断与AI模型的连接状态 + { + view_->ChangeView(AIVOICE_LISTENING_VIEWID, AIVOICE_CONNECT_TIMEOUT_VIEWID); // 聆听中->连接超时界面 + } + else + { + view_->ChangeView(AIVOICE_LISTENING_VIEWID, AIVOICE_THINKING_VIEWID); // 聆听中->思考中界面 + } + return true; + } + + std::unordered_map> viewIdMap = { + {BLUETOOTHFAILEDSTART_ENSURE_BUTTON_VIEW_ID, {AIVOICE_BLUETOOTH_FAILEDSTART_VIEWID, AIVOICE_STARTCHAT_VIEWID}}, + {MOBILEDATAFAILEDSTART_ENSURE_BUTTON_VIEW_ID, {AIVOICE_MOBILEDATA_FAILEDSTART_VIEWID, AIVOICE_STARTCHAT_VIEWID}}, + {AIVOICECONNECTTIMEOUT_ENSURE_BUTTON_VIEW_ID, {AIVOICE_CONNECT_TIMEOUT_VIEWID, AIVOICE_LISTENING_VIEWID}}, + }; + auto it = viewIdMap.find(viewId); + if (it != viewIdMap.end()) + { + view_->ChangeView(it->second.first, it->second.second); + return true; + } + else + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Return false if viewId doesn't match any entry in the map"); + return false; + } } bool AiVoicePresenter::OnDrag(UIView &view, const DragEvent &event) @@ -98,9 +136,22 @@ namespace OHOS { UNUSED(view); WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AiVoicePresenter::OnDragEnd"); + UIScrollView *scrollView = dynamic_cast(&view); + if (scrollView == nullptr) + { + return false; + } + if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT && AiVoicePresenter::X_DRAG_FLAG) { - NativeAbility::GetInstance().Back(TransitionType::TRANSITION_BACK_TO_HEXAGONS); + if (scrollView == view_->GetAiVoiceScrollView(AIVOICE_STARTCHAT_VIEWID)) + { + NativeAbility::GetInstance().Back(TransitionType::TRANSITION_BACK_TO_HEXAGONS); + } + else if (scrollView == view_->GetAiVoiceScrollView(AIVOICE_LISTENING_VIEWID)) + { + view_->ChangeView(AIVOICE_LISTENING_VIEWID, AIVOICE_STARTCHAT_VIEWID); // 聆听中->开始对话界面 + } AiVoicePresenter::X_DRAG_FLAG = false; } return true; 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 c224ea9cc..60b37dcc0 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AiVoiceView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AiVoiceView.cpp @@ -2,7 +2,7 @@ * @Author: luozheng 1732036298@qq.com * @Date: 2024-05-07 11:25:58 * @LastEditors: luozheng 1732036298@qq.com - * @LastEditTime: 2024-06-21 21:07:56 + * @LastEditTime: 2024-06-22 17:49:44 * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/AiVoice/src/AiVoiceView.cpp */ #include "aivoice/include/AiVoicePresenter.h" @@ -42,6 +42,50 @@ namespace OHOS delete container_; container_ = nullptr; } + + if (AiVoiceScrollView[AIVOICE_STARTCHAT_VIEWID] != nullptr) + { + AiVoiceScrollView[AIVOICE_STARTCHAT_VIEWID]->RemoveAll(); + + delete title; + title = nullptr; + + delete startChatImage; + startChatImage = nullptr; + + delete startChatButton; + startChatButton = nullptr; + + delete startChatLabel; + startChatLabel = nullptr; + + delete AiVoiceScrollView[AIVOICE_STARTCHAT_VIEWID]; + AiVoiceScrollView[AIVOICE_STARTCHAT_VIEWID] = nullptr; + } + + if (p_AiVoiceBluetoothFailedStartView != nullptr) + { + delete p_AiVoiceBluetoothFailedStartView; + p_AiVoiceBluetoothFailedStartView = nullptr; + } + + if (p_AivoiceMobileDataFailedStartView != nullptr) + { + delete p_AivoiceMobileDataFailedStartView; + p_AivoiceMobileDataFailedStartView = nullptr; + } + + if (p_AivoiceConnectTimeoutView != nullptr) + { + delete p_AivoiceConnectTimeoutView; + p_AivoiceConnectTimeoutView = nullptr; + } + + if (p_AivoiceListeningView != nullptr) + { + delete p_AivoiceListeningView; + p_AivoiceListeningView = nullptr; + } } } @@ -73,7 +117,7 @@ namespace OHOS return Image; } - UIButton *AiVoiceView::AiVoiceViewLabelButtonInit(ButtonConfig &buttonconfig) + UIButton *AiVoiceView::AiVoiceViewButtonInit(ButtonConfig &buttonconfig) { UIButton *button = new UIButton(); if (button == nullptr) @@ -84,7 +128,7 @@ namespace OHOS button->SetViewId(buttonconfig.ViewId); button->SetStyle(STYLE_BACKGROUND_COLOR, 0xff4fc34c); button->SetStyle(STYLE_BACKGROUND_OPA, 0xff); - button->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff191919, UIButton::PRESSED); + button->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff383838, UIButton::PRESSED); button->SetOnClickListener(presenter_); return button; @@ -92,6 +136,7 @@ namespace OHOS bool AiVoiceView::CreateAiVoiceViewLabel(void) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AiVoiceView::CreateAiVoiceViewLabel"); LabelConfig labelConfig = { .left = 83, .top = 52, @@ -131,6 +176,7 @@ namespace OHOS bool AiVoiceView::CreateAiVoiceViewImageView(void) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AiVoiceView::CreateAiVoiceViewImageView"); ImageConfig imagecinfig = { .x = 207, .y = 182, @@ -152,6 +198,7 @@ namespace OHOS bool AiVoiceView::CreateAiVoiceViewButton(void) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AiVoiceView::CreateAiVoiceViewButton"); ButtonConfig buttonconfig = { .x = 93, .y = 340, @@ -159,7 +206,7 @@ namespace OHOS .h = 90, .ViewId = START_CHAT_BUTTON_VIEW_ID, }; - startChatButton = AiVoiceViewLabelButtonInit(buttonconfig); + startChatButton = AiVoiceViewButtonInit(buttonconfig); if (startChatButton == nullptr) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "startChatButton new fail!"); @@ -169,18 +216,37 @@ namespace OHOS return true; } + bool AiVoiceView::CreateAiVoiceScrollView(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AiVoiceView::CreateAiVoiceScrollView"); + AiVoiceScrollView[AIVOICE_STARTCHAT_VIEWID] = new UIScrollView(); + if (AiVoiceScrollView[AIVOICE_STARTCHAT_VIEWID] == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AiVoiceView::CreateAiVoiceScrollView[AIVOICE_STARTCHAT_VIEWID] new fail!"); + return false; + } + AiVoiceScrollView[AIVOICE_STARTCHAT_VIEWID]->SetPosition(0, 0, 466, 466); + AiVoiceScrollView[AIVOICE_STARTCHAT_VIEWID]->SetTouchable(true); + AiVoiceScrollView[AIVOICE_STARTCHAT_VIEWID]->SetDraggable(true); + AiVoiceScrollView[AIVOICE_STARTCHAT_VIEWID]->SetOnDragListener(presenter_); + container_->Add(AiVoiceScrollView[AIVOICE_STARTCHAT_VIEWID]); + + return true; + } + void AiVoiceView::CreateAiVoiceView(void) { WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AiVoiceView::CreateAiVoiceView"); - if (!CreateAiVoiceViewLabel() || !CreateAiVoiceViewImageView() || !CreateAiVoiceViewButton()) + if (!CreateAiVoiceScrollView() || !CreateAiVoiceViewLabel() || + !CreateAiVoiceViewImageView() || !CreateAiVoiceViewButton()) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AiVoiceView::CreateAiVoiceView fail!"); return; } - container_->Add(title); - container_->Add(startChatImage); - container_->Add(startChatButton); - container_->Add(startChatLabel); + AiVoiceScrollView[AIVOICE_STARTCHAT_VIEWID]->Add(title); + AiVoiceScrollView[AIVOICE_STARTCHAT_VIEWID]->Add(startChatImage); + AiVoiceScrollView[AIVOICE_STARTCHAT_VIEWID]->Add(startChatButton); + AiVoiceScrollView[AIVOICE_STARTCHAT_VIEWID]->Add(startChatLabel); } void AiVoiceView::OnStart() @@ -194,7 +260,6 @@ namespace OHOS return; } container_->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight()); - container_->SetOnDragListener(presenter_); container_->SetTouchable(true); container_->SetDraggable(true); @@ -247,7 +312,17 @@ namespace OHOS bool AiVoiceView::ChangeAiVoiceBluetoothFailedStartView(int16_t thisView) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AiVoiceView::ChangeAiVoiceBluetoothFailedStartView"); - + if (AiVoiceScrollView[thisView] == nullptr) + { + p_AiVoiceBluetoothFailedStartView = new AiVoiceBluetoothFailedStartView(); + if (p_AiVoiceBluetoothFailedStartView == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "new AiVoiceScrollView[AIVOICE_STARTCHAT_VIEWID][%d] fail", thisView); + return false; + } + AiVoiceScrollView[thisView] = p_AiVoiceBluetoothFailedStartView->CreateAiVoiceBluetoothFailedStartView(); + container_->Add(AiVoiceScrollView[thisView]); + } return true; } @@ -255,7 +330,17 @@ namespace OHOS bool AiVoiceView::ChangeAiVoiceMobileDataFailedStartView(int16_t thisView) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AiVoiceView::ChangeAiVoiceMobileDataFailedStartView"); - + if (AiVoiceScrollView[thisView] == nullptr) + { + p_AivoiceMobileDataFailedStartView = new AivoiceMobileDataFailedStartView(); + if (p_AivoiceMobileDataFailedStartView == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "new AiVoiceScrollView[AIVOICE_STARTCHAT_VIEWID][%d] fail", thisView); + return false; + } + AiVoiceScrollView[thisView] = p_AivoiceMobileDataFailedStartView->CreateAivoiceMobileDataFailedStartView(); + container_->Add(AiVoiceScrollView[thisView]); + } return true; } @@ -263,6 +348,17 @@ namespace OHOS bool AiVoiceView::ChangeAiVoicConnectTimeoutView(int16_t thisView) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AiVoiceView::ChangeAiVoicConnectTimeoutView"); + if (AiVoiceScrollView[thisView] == nullptr) + { + p_AivoiceConnectTimeoutView = new AivoiceConnectTimeoutView(); + if (p_AivoiceConnectTimeoutView == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "new AiVoiceScrollView[AIVOICE_STARTCHAT_VIEWID][%d] fail", thisView); + return false; + } + AiVoiceScrollView[thisView] = p_AivoiceConnectTimeoutView->CreateAivoiceConnectTimeoutView(); + container_->Add(AiVoiceScrollView[thisView]); + } return true; } @@ -271,7 +367,17 @@ namespace OHOS bool AiVoiceView::ChangeAiVoicListeningView(int16_t thisView) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AiVoiceView::ChangeAiVoicListeningView"); - + if (AiVoiceScrollView[thisView] == nullptr) + { + p_AivoiceListeningView = new AivoiceListeningView(); + if (p_AivoiceListeningView == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "new AiVoiceScrollView[AIVOICE_STARTCHAT_VIEWID][%d] fail", thisView); + return false; + } + AiVoiceScrollView[thisView] = p_AivoiceListeningView->CreateAivoiceListeningView(); + container_->Add(AiVoiceScrollView[thisView]); + } return true; } @@ -339,4 +445,18 @@ namespace OHOS AiVoiceScrollView[showView]->SetVisible(true); Draw(); } + + UIScrollView *AiVoiceView::GetAiVoiceScrollView(int16_t index) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AiVoiceView::GetAiVoiceScrollView"); + if (AIVOICE_STARTCHAT_VIEWID <= index < MAX_AIVOICE_VIEWID) + { + return AiVoiceScrollView[index]; + } + else + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Overstep ones bounds"); + return nullptr; + } + } } \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AivoiceConnectTimeoutView.cpp b/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AivoiceConnectTimeoutView.cpp new file mode 100644 index 000000000..5ed58f95a --- /dev/null +++ b/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AivoiceConnectTimeoutView.cpp @@ -0,0 +1,264 @@ +/* + * @Author: luozheng 1732036298@qq.com + * @Date: 2024-05-07 11:25:58 + * @LastEditors: luozheng 1732036298@qq.com + * @LastEditTime: 2024-06-22 16:49:46 + * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/AiVoice/src/AivoiceConnectTimeoutView.cpp + */ +#include "aivoice/include/AiVoicePresenter.h" +#include "aivoice/include/AivoiceConnectTimeoutView.h" +#include "wearable_log.h" +#include "language/font/ui_resource_string.h" +#include +namespace OHOS +{ + + static AivoiceConnectTimeoutView *g_pAivoiceConnectTimeoutView{nullptr}; + + AivoiceConnectTimeoutView::AivoiceConnectTimeoutView() + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceConnectTimeoutView::AivoiceConnectTimeoutView"); + g_pAivoiceConnectTimeoutView = this; + } + + AivoiceConnectTimeoutView::~AivoiceConnectTimeoutView() + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceConnectTimeoutView::~AivoiceConnectTimeoutView"); + g_pAivoiceConnectTimeoutView = nullptr; + } + + AivoiceConnectTimeoutView *AivoiceConnectTimeoutView::GetInstance() + { + return g_pAivoiceConnectTimeoutView; + } + + void AivoiceConnectTimeoutView::ClearAll(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AivoiceConnectTimeoutView::ClearAll"); + if (scrollView != nullptr) + { + scrollView->RemoveAll(); + + if (title != nullptr) + { + delete title; + title = nullptr; + } + + if (attentionImage != nullptr) + { + delete attentionImage; + attentionImage = nullptr; + } + + for (int i = 0; i < 2; i++) + { + if (label[i] != nullptr) + { + delete label[i]; + label[i]; + } + } + + if (ensure != nullptr) + { + delete ensure; + ensure = nullptr; + } + + if (ensureButton != nullptr) + { + delete ensureButton; + ensureButton = nullptr; + } + + delete scrollView; + scrollView = nullptr; + } + } + + UILabelExt *AivoiceConnectTimeoutView::AivoiceConnectTimeoutLabelInit(LabelConfig &labelconfig) + { + UILabelExt *label = new UILabelExt(); + if (label == nullptr) + { + return nullptr; + } + label->SetPosition(labelconfig.left, labelconfig.top, labelconfig.width, labelconfig.height); + label->SetStyle(STYLE_TEXT_FONT, labelconfig.fontSize); + label->SetStyle(STYLE_LINE_HEIGHT, labelconfig.lineHeigh); + label->SetTextId(labelconfig.textId); + label->SetLineBreakMode(labelconfig.lineBreakMode); + label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); + label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, labelconfig.fontSize); + return label; + } + + UIButton *AivoiceConnectTimeoutView::AivoiceConnectTimeoutButtonInit(ButtonConfig &buttonconfig) + { + UIButton *button = new UIButton(); + if (button == nullptr) + { + return nullptr; + } + button->SetPosition(buttonconfig.x, buttonconfig.y, buttonconfig.w, buttonconfig.h); + button->SetViewId(buttonconfig.ViewId); + button->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919); + button->SetStyle(STYLE_BACKGROUND_OPA, 0xff); + button->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff383838, UIButton::PRESSED); + + return button; + } + + UIImageView *AivoiceConnectTimeoutView::AivoiceConnectTimeoutImageInit(ImageConfig &imageconfig) + { + UIImageView *Image = new UIImageView(); + if (Image == nullptr) + { + return nullptr; + } + Image->SetPosition(imageconfig.x, imageconfig.y, imageconfig.w, imageconfig.h); + return Image; + } + + bool AivoiceConnectTimeoutView::CreateAivoiceConnectTimeoutScrollView(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AivoiceConnectTimeoutView::CreateAivoiceConnectTimeoutScrollView"); + scrollView = new UIScrollView(); + if (scrollView == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceConnectTimeoutView::scrollView new fail!"); + return false; + } + scrollView->SetPosition(0, 0, 466, 466); + scrollView->SetTouchable(true); + scrollView->SetDraggable(true); + + return true; + } + + bool AivoiceConnectTimeoutView::CreateAivoiceConnectTimeoutLabel(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AivoiceConnectTimeoutView::CreateAivoiceConnectTimeoutLabel"); + LabelConfig labelconfig = { + .left = 83, + .top = 52, + .width = 300, + .height = 35, + .fontSize = 30, + .lineHeigh = 35, + .textId = STR_AI_INTELLIGENT_ASSISTANT, + .lineBreakMode = UILabel::LINE_BREAK_MARQUEE, + }; + title = AivoiceConnectTimeoutLabelInit(labelconfig); + if (title == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceConnectTimeoutView::title is nullptr!"); + return false; + } + /* -------------------------------------------------------------------------- */ + labelconfig.left = 53; + labelconfig.width = 360; + int textId[] = {STR_CONNECT_TIMEOUT, STR_PLEASE_RESTART_CHAT}; + for (int i = 0; i < sizeof(textId) / sizeof(textId[0]); i++) + { + labelconfig.top = 222 + i * labelconfig.height; + labelconfig.textId = textId[i]; + label[i] = AivoiceConnectTimeoutLabelInit(labelconfig); + if (label[i] == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceConnectTimeoutView::label[%d] is nullptr!", i); + return false; + } + } + /* -------------------------------------------------------------------------- */ + labelconfig = { + .left = 133, + .top = 368, + .width = 200, + .height = 35, + .fontSize = 30, + .lineHeigh = 35, + .textId = STR_OK, + .lineBreakMode = UILabel::LINE_BREAK_MARQUEE, + }; + ensure = AivoiceConnectTimeoutLabelInit(labelconfig); + if (ensure == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceConnectTimeoutView::ensure is nullptr!"); + return false; + } + + return true; + } + + bool AivoiceConnectTimeoutView::CreateAivoiceConnectTimeoutButton(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AivoiceConnectTimeoutView::CreateAivoiceConnectTimeoutButton"); + ButtonConfig buttonconfig = { + .x = 93, + .y = 340, + .w = 280, + .h = 90, + .ViewId = AIVOICECONNECTTIMEOUT_ENSURE_BUTTON_VIEW_ID, + }; + ensureButton = AivoiceConnectTimeoutButtonInit(buttonconfig); + if (ensureButton == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ensureButton new fail!"); + return false; + } + UIView::OnClickListener *clickListener = static_cast(AiVoicePresenter::GetInstance()); + if (clickListener == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceConnectTimeoutView::draglistener can not be nullptr!"); + return false; + } + ensureButton->SetOnClickListener(clickListener); + + return true; + } + + bool AivoiceConnectTimeoutView::CreateAivoiceConnectTimeoutImage(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AivoiceConnectTimeoutView::CreateAivoiceConnectTimeoutImage"); + ImageConfig imageconfig = { + .x = 193, + .y = 120, + .w = 80, + .h = 80, + }; + attentionImage = AivoiceConnectTimeoutImageInit(imageconfig); + if (attentionImage == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "attentionImage new fail!"); + return false; + } + attentionImage->SetStyle(STYLE_BORDER_RADIUS, 100); + attentionImage->SetSrc(PNG_ATTENTION_IMAGE); + + return true; + } + + UIScrollView *AivoiceConnectTimeoutView::CreateAivoiceConnectTimeoutView(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AivoiceConnectTimeoutView::CreateAivoiceConnectTimeoutView"); + if (scrollView == nullptr) + { + if (!CreateAivoiceConnectTimeoutScrollView() || !CreateAivoiceConnectTimeoutLabel() || + !CreateAivoiceConnectTimeoutButton() || !CreateAivoiceConnectTimeoutImage()) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceConnectTimeoutView::CreateAivoiceConnectTimeoutView fail!!"); + return nullptr; + } + scrollView->Add(title); + scrollView->Add(attentionImage); + scrollView->Add(label[0]); + scrollView->Add(label[1]); + scrollView->Add(ensureButton); + scrollView->Add(ensure); + } + return scrollView; + } + +} \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AivoiceListeningView.cpp b/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AivoiceListeningView.cpp new file mode 100644 index 000000000..0472c5720 --- /dev/null +++ b/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AivoiceListeningView.cpp @@ -0,0 +1,245 @@ +/* + * @Author: luozheng 1732036298@qq.com + * @Date: 2024-05-07 11:25:58 + * @LastEditors: luozheng 1732036298@qq.com + * @LastEditTime: 2024-06-22 17:47:58 + * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/AiVoice/src/AivoiceListeningView.cpp + */ +#include "aivoice/include/AiVoicePresenter.h" +#include "aivoice/include/AivoiceListeningView.h" +#include "wearable_log.h" +#include "language/font/ui_resource_string.h" +#include +namespace OHOS +{ + + static AivoiceListeningView *g_pAivoiceListeningView{nullptr}; + + AivoiceListeningView::AivoiceListeningView() + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceListeningView::AivoiceListeningView"); + g_pAivoiceListeningView = this; + } + + AivoiceListeningView::~AivoiceListeningView() + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceListeningView::~AivoiceListeningView"); + g_pAivoiceListeningView = nullptr; + } + + AivoiceListeningView *AivoiceListeningView::GetInstance() + { + return g_pAivoiceListeningView; + } + + void AivoiceListeningView::ClearAll(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AivoiceListeningView::ClearAll"); + if (scrollView != nullptr) + { + scrollView->RemoveAll(); + + if (title != nullptr) + { + delete title; + title = nullptr; + } + + if (attentionImage != nullptr) + { + delete attentionImage; + attentionImage = nullptr; + } + + if (finishSpeak != nullptr) + { + delete finishSpeak; + finishSpeak = nullptr; + } + + if (finishSpeakButton != nullptr) + { + delete finishSpeakButton; + finishSpeakButton = nullptr; + } + + delete scrollView; + scrollView = nullptr; + } + } + + UILabelExt *AivoiceListeningView::AivoiceListeningLabelInit(LabelConfig &labelconfig) + { + UILabelExt *label = new UILabelExt(); + if (label == nullptr) + { + return nullptr; + } + label->SetPosition(labelconfig.left, labelconfig.top, labelconfig.width, labelconfig.height); + label->SetStyle(STYLE_TEXT_FONT, labelconfig.fontSize); + label->SetStyle(STYLE_LINE_HEIGHT, labelconfig.lineHeigh); + label->SetTextId(labelconfig.textId); + label->SetLineBreakMode(labelconfig.lineBreakMode); + label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); + label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, labelconfig.fontSize); + return label; + } + + UIButton *AivoiceListeningView::AivoiceListeningButtonInit(ButtonConfig &buttonconfig) + { + UIButton *button = new UIButton(); + if (button == nullptr) + { + return nullptr; + } + button->SetPosition(buttonconfig.x, buttonconfig.y, buttonconfig.w, buttonconfig.h); + button->SetViewId(buttonconfig.ViewId); + button->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919); + button->SetStyle(STYLE_BACKGROUND_OPA, 0xff); + button->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff383838, UIButton::PRESSED); + + return button; + } + + UIImageView *AivoiceListeningView::AivoiceListeningImageInit(ImageConfig &imageconfig) + { + UIImageView *Image = new UIImageView(); + if (Image == nullptr) + { + return nullptr; + } + Image->SetPosition(imageconfig.x, imageconfig.y, imageconfig.w, imageconfig.h); + return Image; + } + + bool AivoiceListeningView::CreateAivoiceListeningScrollView(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AivoiceListeningView::CreateAivoiceListeningScrollView"); + scrollView = new UIScrollView(); + if (scrollView == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceListeningView::scrollView new fail!"); + return false; + } + scrollView->SetPosition(0, 0, 466, 466); + UIView::OnDragListener *dragListener = static_cast(AiVoicePresenter::GetInstance()); + if (dragListener == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceListeningView::dragListener new fail!"); + return false; + } + scrollView->SetOnDragListener(dragListener); + scrollView->SetTouchable(true); + scrollView->SetDraggable(true); + + return true; + } + + bool AivoiceListeningView::CreateAivoiceListeningLabel(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AivoiceListeningView::CreateAivoiceListeningLabel"); + LabelConfig labelconfig = { + .left = 83, + .top = 52, + .width = 300, + .height = 35, + .fontSize = 30, + .lineHeigh = 35, + .textId = STR_LISTENING, + .lineBreakMode = UILabel::LINE_BREAK_MARQUEE, + }; + title = AivoiceListeningLabelInit(labelconfig); + if (title == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceListeningView::title is nullptr!"); + return false; + } + /* -------------------------------------------------------------------------- */ + labelconfig = { + .left = 133, + .top = 368, + .width = 200, + .height = 35, + .fontSize = 30, + .lineHeigh = 35, + .textId = STR_FINISH_SPEAKING, + .lineBreakMode = UILabel::LINE_BREAK_MARQUEE, + }; + finishSpeak = AivoiceListeningLabelInit(labelconfig); + if (finishSpeak == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceListeningView::finishSpeak is nullptr!"); + return false; + } + + return true; + } + + bool AivoiceListeningView::CreateAivoiceListeningButton(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AivoiceListeningView::CreateAivoiceListeningButton"); + ButtonConfig buttonconfig = { + .x = 93, + .y = 340, + .w = 280, + .h = 90, + .ViewId = FINISH_SPEAKING_BUTTON_VIEW_ID, + }; + finishSpeakButton = AivoiceListeningButtonInit(buttonconfig); + if (finishSpeakButton == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "finishSpeakButton new fail!"); + return false; + } + UIView::OnClickListener *clickListener = static_cast(AiVoicePresenter::GetInstance()); + if (clickListener == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceListeningView::draglistener can not be nullptr!"); + return false; + } + finishSpeakButton->SetOnClickListener(clickListener); + + return true; + } + + bool AivoiceListeningView::CreateAivoiceListeningImage(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AivoiceListeningView::CreateAivoiceListeningImage"); + ImageConfig imageconfig = { + .x = 193, + .y = 120, + .w = 80, + .h = 80, + }; + attentionImage = AivoiceListeningImageInit(imageconfig); + if (attentionImage == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "attentionImage new fail!"); + return false; + } + attentionImage->SetStyle(STYLE_BORDER_RADIUS, 100); + attentionImage->SetSrc(PNG_ATTENTION_IMAGE); + + return true; + } + + UIScrollView *AivoiceListeningView::CreateAivoiceListeningView(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AivoiceListeningView::CreateAivoiceListeningView"); + if (scrollView == nullptr) + { + if (!CreateAivoiceListeningScrollView() || !CreateAivoiceListeningLabel() || + !CreateAivoiceListeningButton() || !CreateAivoiceListeningImage()) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceListeningView::CreateAivoiceListeningView fail!!"); + return nullptr; + } + scrollView->Add(title); + scrollView->Add(attentionImage); + scrollView->Add(finishSpeakButton); + scrollView->Add(finishSpeak); + } + return scrollView; + } + +} \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AivoiceMobileDataFailedStartView.cpp b/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AivoiceMobileDataFailedStartView.cpp new file mode 100644 index 000000000..02f8719a6 --- /dev/null +++ b/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AivoiceMobileDataFailedStartView.cpp @@ -0,0 +1,264 @@ +/* + * @Author: luozheng 1732036298@qq.com + * @Date: 2024-05-07 11:25:58 + * @LastEditors: luozheng 1732036298@qq.com + * @LastEditTime: 2024-06-22 15:38:12 + * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/AiVoice/src/AivoiceMobileDataFailedStartView.cpp + */ +#include "aivoice/include/AiVoicePresenter.h" +#include "aivoice/include/AivoiceMobileDataFailedStartView.h" +#include "wearable_log.h" +#include "language/font/ui_resource_string.h" +#include +namespace OHOS +{ + + static AivoiceMobileDataFailedStartView *g_pAivoiceMobileDataFailedStartView{nullptr}; + + AivoiceMobileDataFailedStartView::AivoiceMobileDataFailedStartView() + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceMobileDataFailedStartView::AivoiceMobileDataFailedStartView"); + g_pAivoiceMobileDataFailedStartView = this; + } + + AivoiceMobileDataFailedStartView::~AivoiceMobileDataFailedStartView() + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceMobileDataFailedStartView::~AivoiceMobileDataFailedStartView"); + g_pAivoiceMobileDataFailedStartView = nullptr; + } + + AivoiceMobileDataFailedStartView *AivoiceMobileDataFailedStartView::GetInstance() + { + return g_pAivoiceMobileDataFailedStartView; + } + + void AivoiceMobileDataFailedStartView::ClearAll(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AivoiceMobileDataFailedStartView::ClearAll"); + if (scrollView != nullptr) + { + scrollView->RemoveAll(); + + if (title != nullptr) + { + delete title; + title = nullptr; + } + + if (attentionImage != nullptr) + { + delete attentionImage; + attentionImage = nullptr; + } + + for (int i = 0; i < 2; i++) + { + if (label[i] != nullptr) + { + delete label[i]; + label[i]; + } + } + + if (ensure != nullptr) + { + delete ensure; + ensure = nullptr; + } + + if (ensureButton != nullptr) + { + delete ensureButton; + ensureButton = nullptr; + } + + delete scrollView; + scrollView = nullptr; + } + } + + UILabelExt *AivoiceMobileDataFailedStartView::AivoiceMobileDataFailedStartLabelInit(LabelConfig &labelconfig) + { + UILabelExt *label = new UILabelExt(); + if (label == nullptr) + { + return nullptr; + } + label->SetPosition(labelconfig.left, labelconfig.top, labelconfig.width, labelconfig.height); + label->SetStyle(STYLE_TEXT_FONT, labelconfig.fontSize); + label->SetStyle(STYLE_LINE_HEIGHT, labelconfig.lineHeigh); + label->SetTextId(labelconfig.textId); + label->SetLineBreakMode(labelconfig.lineBreakMode); + label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); + label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, labelconfig.fontSize); + return label; + } + + UIButton *AivoiceMobileDataFailedStartView::AivoiceMobileDataFailedStartButtonInit(ButtonConfig &buttonconfig) + { + UIButton *button = new UIButton(); + if (button == nullptr) + { + return nullptr; + } + button->SetPosition(buttonconfig.x, buttonconfig.y, buttonconfig.w, buttonconfig.h); + button->SetViewId(buttonconfig.ViewId); + button->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919); + button->SetStyle(STYLE_BACKGROUND_OPA, 0xff); + button->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff383838, UIButton::PRESSED); + + return button; + } + + UIImageView *AivoiceMobileDataFailedStartView::AivoiceMobileDataFailedStartImageInit(ImageConfig &imageconfig) + { + UIImageView *Image = new UIImageView(); + if (Image == nullptr) + { + return nullptr; + } + Image->SetPosition(imageconfig.x, imageconfig.y, imageconfig.w, imageconfig.h); + return Image; + } + + bool AivoiceMobileDataFailedStartView::CreateAivoiceMobileDataFailedStartScrollView(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AivoiceMobileDataFailedStartView::CreateAivoiceMobileDataFailedStartScrollView"); + scrollView = new UIScrollView(); + if (scrollView == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceMobileDataFailedStartView::scrollView new fail!"); + return false; + } + scrollView->SetPosition(0, 0, 466, 466); + scrollView->SetTouchable(true); + scrollView->SetDraggable(true); + + return true; + } + + bool AivoiceMobileDataFailedStartView::CreateAivoiceMobileDataFailedStartLabel(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AivoiceMobileDataFailedStartView::CreateAivoiceMobileDataFailedStartLabel"); + LabelConfig labelconfig = { + .left = 83, + .top = 52, + .width = 300, + .height = 35, + .fontSize = 30, + .lineHeigh = 35, + .textId = STR_AI_INTELLIGENT_ASSISTANT, + .lineBreakMode = UILabel::LINE_BREAK_MARQUEE, + }; + title = AivoiceMobileDataFailedStartLabelInit(labelconfig); + if (title == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceMobileDataFailedStartView::title is nullptr!"); + return false; + } + /* -------------------------------------------------------------------------- */ + labelconfig.left = 53; + labelconfig.width = 360; + int textId[] = {STR_BOOT_FAILED, STR_ENABLE_MOBILE_DATA_FIRST}; + for (int i = 0; i < sizeof(textId) / sizeof(textId[0]); i++) + { + labelconfig.top = 222 + i * labelconfig.height; + labelconfig.textId = textId[i]; + label[i] = AivoiceMobileDataFailedStartLabelInit(labelconfig); + if (label[i] == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceMobileDataFailedStartView::label[%d] is nullptr!", i); + return false; + } + } + /* -------------------------------------------------------------------------- */ + labelconfig = { + .left = 133, + .top = 368, + .width = 200, + .height = 35, + .fontSize = 30, + .lineHeigh = 35, + .textId = STR_OK, + .lineBreakMode = UILabel::LINE_BREAK_MARQUEE, + }; + ensure = AivoiceMobileDataFailedStartLabelInit(labelconfig); + if (ensure == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceMobileDataFailedStartView::ensure is nullptr!"); + return false; + } + + return true; + } + + bool AivoiceMobileDataFailedStartView::CreateAivoiceMobileDataFailedStartButton(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AivoiceMobileDataFailedStartView::CreateAivoiceMobileDataFailedStartButton"); + ButtonConfig buttonconfig = { + .x = 93, + .y = 340, + .w = 280, + .h = 90, + .ViewId = MOBILEDATAFAILEDSTART_ENSURE_BUTTON_VIEW_ID, + }; + ensureButton = AivoiceMobileDataFailedStartButtonInit(buttonconfig); + if (ensureButton == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ensureButton new fail!"); + return false; + } + UIView::OnClickListener *clickListener = static_cast(AiVoicePresenter::GetInstance()); + if (clickListener == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceMobileDataFailedStartView::draglistener can not be nullptr!"); + return false; + } + ensureButton->SetOnClickListener(clickListener); + + return true; + } + + bool AivoiceMobileDataFailedStartView::CreateAivoiceMobileDataFailedStartImage(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AivoiceMobileDataFailedStartView::CreateAivoiceMobileDataFailedStartImage"); + ImageConfig imageconfig = { + .x = 193, + .y = 120, + .w = 80, + .h = 80, + }; + attentionImage = AivoiceMobileDataFailedStartImageInit(imageconfig); + if (attentionImage == nullptr) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "attentionImage new fail!"); + return false; + } + attentionImage->SetStyle(STYLE_BORDER_RADIUS, 100); + attentionImage->SetSrc(PNG_ATTENTION_IMAGE); + + return true; + } + + UIScrollView *AivoiceMobileDataFailedStartView::CreateAivoiceMobileDataFailedStartView(void) + { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AivoiceMobileDataFailedStartView::CreateAivoiceMobileDataFailedStartView"); + if (scrollView == nullptr) + { + if (!CreateAivoiceMobileDataFailedStartScrollView() || !CreateAivoiceMobileDataFailedStartLabel() || + !CreateAivoiceMobileDataFailedStartButton() || !CreateAivoiceMobileDataFailedStartImage()) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceMobileDataFailedStartView::CreateAivoiceMobileDataFailedStartView fail!!"); + return nullptr; + } + scrollView->Add(title); + scrollView->Add(attentionImage); + scrollView->Add(label[0]); + scrollView->Add(label[1]); + scrollView->Add(ensureButton); + scrollView->Add(ensure); + } + return scrollView; + } + +} \ No newline at end of file -- 2.17.1