Merge #378 into sdk602patch0521 from refs/changes/378/head 380/target/2 381/target/1
author罗正 <1732036298@qq.com>
Wed, 26 Jun 2024 08:50:54 +0000 (08:50 +0000)
committersnickersun@163.com <accounts_62b90f7fcf51ade33b6f628e@mail.teambition.com>
Wed, 26 Jun 2024 08:50:54 +0000 (08:50 +0000)
Code review from 罗正

* refs/changes/378/head: (7 commits squashed)

  - 添加app设置手表震动强度,手表能感受设置的强度

  - AiVoice视图添加与修改

  - Merge branch &#39;sdk602patch0521&#39; of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk602patch0521

  - Merge branch &#39;sdk602patch0521&#39; of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk602patch0521

  - Ai语音UI基本上完成,更细节的部分待优化

  - Merge branch &#39;sdk602patch0521&#39; of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk602patch0521

  - 闹钟界面添加按键监听

Signed-off-by: 罗正 <1732036298@qq.com>
Commented-by: 罗正 <1732036298@qq.com>
Commented-by: snickersun@163.com <accounts_62b90f7fcf51ade33b6f628e@mail.teambition.com>
Reviewed-by: snickersun@163.com <accounts_62b90f7fcf51ade33b6f628e@mail.teambition.com>
Merged-by: snickersun@163.com <accounts_62b90f7fcf51ade33b6f628e@mail.teambition.com>
link: https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230/change/378
77 files changed:
code/sdk/application/wearable/fd230app/CMakeLists.txt
code/sdk/application/wearable/fd230app/nativelauncher/src/NativeLauncher.cpp
code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AiVoiceBluetoothFailedStartView.h
code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AiVoiceModel.h
code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AiVoicePresenter.h
code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AiVoiceView.h
code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AivoiceConnectTimeoutView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AivoiceListeningView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AivoiceMobileDataFailedStartView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AivoiceReturnResultTextView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AivoiceThinkingView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AiVoiceBluetoothFailedStartView.cpp
code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AiVoiceModel.cpp
code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AiVoicePresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AiVoiceView.cpp
code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AivoiceConnectTimeoutView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AivoiceListeningView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AivoiceMobileDataFailedStartView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AivoiceReturnResultTextView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AivoiceThinkingView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/alarm/src/AlarmPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/soundandvibration/src/SoundAndVibrationPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/uiservice/include/ui_service.h
code/sdk/application/wearable/fd230app/nativeui/uiservice/src/ui_service.cpp
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIRecBlack.bin [deleted file]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIRecGreen.bin [deleted file]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIUnion.bin [deleted file]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_1.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_10.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_11.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_12.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_13.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_14.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_15.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_16.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_17.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_18.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_19.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_2.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_20.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_3.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_4.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_5.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_6.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_7.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_8.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_9.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_1.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_10.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_11.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_12.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_13.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_14.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_15.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_16.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_17.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_18.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_19.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_2.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_20.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_21.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_22.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_23.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_24.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_25.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_26.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_27.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_28.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_29.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_3.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_4.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_5.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_6.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_7.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_8.bin [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_9.bin [new file with mode: 0644]
code/sdk/drivers/peripheral/config/src/ConfigModel.cpp

index 33ca91d..cc4343e 100644 (file)
@@ -385,7 +385,13 @@ 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/aivoice/src/AivoiceThinkingView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/aivoice/src/AivoiceReturnResultTextView.cpp
+    
     #声音与震动
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/soundandvibration/src/SoundAndVibrationPresenter.cpp 
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/soundandvibration/src/SoundAndVibrationView.cpp
index 17ffb62..49a8290 100644 (file)
@@ -37,8 +37,8 @@
 #include "MainCallingView.h"
 #include "MainCallingPresenter.h"
 #include "ActivityPresenter.h"
-#include "MainAlarmView.h"
-#include "AlarmPresenter.h"
+#include "alarm/include/MainAlarmView.h"
+#include "alarm/include/AlarmPresenter.h"
 #include "AlarmPopUpPresenter.h"
 #include "AlarmPopUpView.h"
 #include "MainBluetoothView.h"
index e69de29..141f15b 100644 (file)
@@ -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
index 9c40b54..d5c14a6 100644 (file)
@@ -2,25 +2,44 @@
  * @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-25 17:50:45
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AiVoiceModel.h
  */
 #ifndef AI_VOICE_MODEL_H
 #define AI_VOICE_MODEL_H
 
+#include "iostream"
+#include "string"
 namespace OHOS
 {
     class AiVoiceModel
     {
     public:
         static AiVoiceModel &GetInstance(void);
+        bool ChangeToReturnResultTextView(void);
+
+        bool GetBluetoothIsOpen(void);
+        bool GetMobileDataIsOpen(void);
+        bool GetAiVoiceConnectStatus(void);
+
+        std::string GetUserQuestionStr(void);
+        void SetUserQuestionStr(std::string str);
+
+        std::string GetAiAnswerStrStr(void);
+        void SetaiAnswerStrStr(std::string str);
+
+        std::string GetAIAudioPath(void);
 
     private:
         AiVoiceModel();
         ~AiVoiceModel();
         AiVoiceModel(const AiVoiceModel &) = delete;
         AiVoiceModel &operator=(const AiVoiceModel &) = delete;
+        std::string AIAIAudioPath = "/user/userdata/AiRecording/AIAudio.pcm"; // ai录音的文件名
+
+        std::string userQuestionStr; // 存储用户提出的问题
+        std::string aiAnswerStr;     // 存储ai回答的问题
     };
 }
 
-#endif 
\ No newline at end of file
+#endif
\ No newline at end of file
index 615d7fd..bddff30 100644 (file)
@@ -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-25 17:39:55
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AiVoicePresenter.h
  */
 #ifndef AI_VOICE_PRESENTER_H
@@ -30,6 +30,7 @@ namespace OHOS
         void OnPause() override;
         void OnStop() override;
 
+        bool JumpToReturnResultTextView(void);
 
     private:
         bool OnClick(UIView &view, const ClickEvent &event) override;
index 9015889..a8012c7 100644 (file)
@@ -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-25 14:53:47
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/include/AiVoiceView.h
  */
 #ifndef AI_VOICE_VIEW_H
 #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"
+#include "aivoice/include/AivoiceThinkingView.h"
+#include "aivoice/include/AivoiceReturnResultTextView.h"
 namespace OHOS
 {
     static constexpr const char *START_CHAT_BUTTON_VIEW_ID = "StartChatButton"; // 开始对话
@@ -67,6 +73,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 +89,22 @@ 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};
+        AivoiceThinkingView *p_AivoiceThinkingView{nullptr};
+        AivoiceReturnResultTextView *p_AivoiceReturnResultTextView{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 (file)
index 0000000..25d25e4
--- /dev/null
@@ -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 (file)
index 0000000..9b02ffd
--- /dev/null
@@ -0,0 +1,88 @@
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-06-22 16:46:26
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-06-25 15:39:07
+ * @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"
+#include "components/ui_image_animator.h"
+namespace OHOS
+{
+    static constexpr const char *FINISH_SPEAKING_BUTTON_VIEW_ID = "FinishSpeakingButton"; // 聆听中界面说话完毕按钮
+
+    static constexpr int16_t AIVOICE_LISTENING_IMAGE_ANIMATOR_VIEW_X = 113;
+    static constexpr int16_t AIVOICE_LISTENING_IMAGE_ANIMATOR_VIEW_Y = 182;
+    static constexpr int16_t AIVOICE_LISTENING_IMAGE_ANIMATOR_VIEW_W = 240;
+    static constexpr int16_t AIVOICE_LISTENING_IMAGE_ANIMATOR_VIEW_H = 60;
+    static constexpr int16_t AIVOICE_LISTENING_IMAGE_ANIMATOR_VIEW_NUM_FRAMES = 20; // 图片帧数
+    static constexpr int16_t AIVOICE_LISTENING_IMAGE_ANIMATOR_DELAY = 150;          // 图片更新间隔
+    static constexpr char *AIVoiceListeningImagePaths = "/user/res/AIVoice/AIVoiceListening/Ai_Listening_";
+    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 ImageAnimatorConfig
+        {
+            int16_t x;
+            int16_t y;
+            int16_t width;
+            int16_t height;
+            ImageAnimatorInfo* imageInfoArray;
+            const char* const* pathsArray;
+            uint8_t numFrames;
+            int delay;
+        };
+
+        AivoiceListeningView();
+        ~AivoiceListeningView();
+        static AivoiceListeningView *GetInstance(void);
+        UIScrollView *CreateAivoiceListeningView(void);
+
+    private:
+        void ClearAll(void);
+        const char **CreateImagePathsArray(const char *basePath, const int numImages, const char *fileExtension = "bin");
+        void FreeImagePathsArray(const char **imagePaths, const int numImages);
+        UILabelExt *AivoiceListeningLabelInit(LabelConfig &labelconfig);
+        UIButton *AivoiceListeningButtonInit(ButtonConfig &buttonconfig);
+        UIImageAnimatorView *AivoiceListeningImageAnimatorInit(ImageAnimatorConfig &imageanimatorconfig);
+        bool CreateAivoiceListeningLabel(void);
+        bool CreateAivoiceListeningButton(void);
+        bool CreateAivoiceListeningImageAnimator(void);
+        bool CreateAivoiceListeningScrollView(void);
+        UIScrollView *scrollView{nullptr};
+        UILabelExt *title{nullptr};
+        UILabelExt *finishSpeak{nullptr};
+        UIButton *finishSpeakButton{nullptr};
+        UIImageAnimatorView *AiVoiceListeningImageAnimatorView{nullptr};
+        ImageAnimatorInfo AiVoiceListeningImageInfo[AIVOICE_LISTENING_IMAGE_ANIMATOR_VIEW_NUM_FRAMES];
+        const char **AiVoiceListeningPathsArray{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 (file)
index 0000000..8a1c056
--- /dev/null
@@ -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/include/AivoiceReturnResultTextView.h b/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AivoiceReturnResultTextView.h
new file mode 100644 (file)
index 0000000..74fc328
--- /dev/null
@@ -0,0 +1,86 @@
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-06-22 16:46:26
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-06-25 17:40:57
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AivoiceReturnResultTextView.h
+ */
+
+#ifndef AIVOICE_RETURN_RESULT_TEXT_VIEW_H
+#define AIVOICE_RETURN_RESULT_TEXT_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 *AIVOICERETURNRESULTTEXT_RETURN_BUTTON_VIEW_ID = "AivoiceReturnResultTextReturnButton";             // 返回对话内容界面的返回按钮
+    static constexpr const char *AIVOICERETURNRESULTTEXT_CONTINUECHAT_BUTTON_VIEW_ID = "AivoiceReturnResultTextContinueChatButton"; // 返回对话内容界面的继续对话按钮
+
+    class AivoiceReturnResultTextView
+    {
+    public:
+        struct LabelConfig
+        {
+            int16_t left;
+            int16_t top;
+            int16_t width;
+            int16_t height;
+            int16_t fontSize;
+            int16_t lineHeight;
+            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;
+            const char *src;
+        };
+
+        AivoiceReturnResultTextView();
+        ~AivoiceReturnResultTextView();
+        static AivoiceReturnResultTextView *GetInstance(void);
+        UIScrollView *CreateAivoiceReturnResultTextView(void);
+
+    private:
+        void ClearAll(void);
+        UILabelExt *AivoiceReturnResultTextLabelInit(LabelConfig &labelconfig);
+        UIButton *AivoiceReturnResultTextButtonInit(ButtonConfig &buttonconfig);
+        UIImageView *AivoiceReturnResultTextImageInit(ImageConfig &imageconfig);
+        bool CreateAivoiceReturnResultTextLabel(void);
+        bool CreateAivoiceReturnResultTextUserQuestionLabel(void);
+        bool CreateAivoiceReturnResultTextAIAnswerLabel(void);
+        bool CreateAivoiceReturnResultTextLImage(void);
+        bool CreateAivoiceReturnResultTextButton(void);
+        bool CreateAivoiceReturnResultTextScrollView(void);
+        UIScrollView *scrollView{nullptr};
+        UILabelExt *title{nullptr};
+
+        UILabelExt *question{nullptr}; // 提出的问题
+        UIScrollView *questionScrollView{nullptr};
+        UIImageView *recGreenImage{nullptr};
+
+        UILabelExt *answer{nullptr}; // AI回答的答案
+        UIScrollView *answerScrollView{nullptr};
+        UIImageView *recBlackImage{nullptr};
+
+        UIButton *returnButton{nullptr};
+
+        UIButton *continueChatButton{nullptr};
+        UILabelExt *continueChat{nullptr};
+    };
+}
+#endif
diff --git a/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AivoiceThinkingView.h b/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AivoiceThinkingView.h
new file mode 100644 (file)
index 0000000..d225ed7
--- /dev/null
@@ -0,0 +1,88 @@
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-06-22 16:46:26
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-06-24 16:18:51
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AivoiceThinkingView.h
+ */
+
+#ifndef AIVOICE_THINKING_VIEW_H
+#define AIVOICE_THINKING_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"
+#include "components/ui_image_animator.h"
+namespace OHOS
+{
+    static constexpr const char *CANCEL_THINKING_BUTTON_VIEW_ID = "CancelThinkingButton"; // 思考中界面说话完毕按钮
+
+    static constexpr int16_t AIVOICE_THINKING_IMAGE_ANIMATOR_VIEW_X = 153;
+    static constexpr int16_t AIVOICE_THINKING_IMAGE_ANIMATOR_VIEW_Y = 120;
+    static constexpr int16_t AIVOICE_THINKING_IMAGE_ANIMATOR_VIEW_W = 160;
+    static constexpr int16_t AIVOICE_THINKING_IMAGE_ANIMATOR_VIEW_H = 160;
+    static constexpr int16_t AIVOICE_THINKING_IMAGE_ANIMATOR_VIEW_NUM_FRAMES = 29; // 图片帧数
+    static constexpr int16_t AIVOICE_THINKING_IMAGE_ANIMATOR_DELAY = 200;          // 图片更新间隔
+    static constexpr char *AIVoiceThinkingImagePaths = "/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_";
+    class AivoiceThinkingView
+    {
+    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 ImageAnimatorConfig
+        {
+            int16_t x;
+            int16_t y;
+            int16_t width;
+            int16_t height;
+            ImageAnimatorInfo *imageInfoArray;
+            const char *const *pathsArray;
+            uint8_t numFrames;
+            int delay;
+        };
+
+        AivoiceThinkingView();
+        ~AivoiceThinkingView();
+        static AivoiceThinkingView *GetInstance(void);
+        UIScrollView *CreateAivoiceThinkingView(void);
+
+    private:
+        void ClearAll(void);
+        const char **CreateImagePathsArray(const char *basePath, const int numImages, const char *fileExtension = "bin");
+        void FreeImagePathsArray(const char **imagePaths, const int numImages);
+        UILabelExt *AivoiceThinkingLabelInit(LabelConfig &labelconfig);
+        UIButton *AivoiceThinkingButtonInit(ButtonConfig &buttonconfig);
+        UIImageAnimatorView *AivoiceThinkingImageAnimatorInit(ImageAnimatorConfig &imageanimatorconfig);
+        bool CreateAivoiceThinkingLabel(void);
+        bool CreateAivoiceThinkingButton(void);
+        bool CreateAivoiceThinkingImageAnimator(void);
+        bool CreateAivoiceThinkingScrollView(void);
+        UIScrollView *scrollView{nullptr};
+        UILabelExt *title{nullptr};
+        UILabelExt *cancelThink{nullptr};
+        UIButton *cancelThinkButton{nullptr};
+        UIImageAnimatorView *AiVoiceThinkingImageAnimatorView{nullptr};
+        ImageAnimatorInfo AiVoiceThinkingImageInfo[AIVOICE_THINKING_IMAGE_ANIMATOR_VIEW_NUM_FRAMES];
+        const char **AiVoiceThinkingPathsArray{nullptr};
+    };
+}
+#endif
index e69de29..25b5ae8 100644 (file)
@@ -0,0 +1,265 @@
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-05-07 11:25:58
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-06-24 10:39:08
+ * @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 <UiConfig.h>
+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");
+        ClearAll();
+        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<UIView::OnClickListener *>(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
index 7de4eb6..0a6cb1f 100644 (file)
@@ -2,10 +2,11 @@
  * @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-25 17:50:59
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AiVoiceModel.cpp
  */
 #include "aivoice/include/AiVoiceModel.h"
+#include "aivoice/include/AiVoicePresenter.h"
 #include "wearable_log.h"
 
 namespace OHOS
@@ -20,4 +21,61 @@ namespace OHOS
         return instance;
     }
 
+    bool AiVoiceModel::ChangeToReturnResultTextView(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AiVoiceModel::ChangeToReturnResultTextView");
+        AiVoicePresenter *Aipresenter_ = AiVoicePresenter::GetInstance();
+        if (Aipresenter_ == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AiVoiceModel::ChangeToReturnResultTextView fail!!");
+            return false;
+        }
+        Aipresenter_->JumpToReturnResultTextView();
+        return true;
+    }
+
+    // 获取蓝牙是否打开
+    bool AiVoiceModel::GetBluetoothIsOpen(void)
+    {
+        return true;
+    }
+
+    // 获取移动数据是否打开
+    bool AiVoiceModel::GetMobileDataIsOpen(void)
+    {
+        return true;
+    }
+
+    // 获取与AI模型的连接状态
+    bool AiVoiceModel::GetAiVoiceConnectStatus(void)
+    {
+        return true;
+    }
+
+    std::string AiVoiceModel::GetUserQuestionStr(void)
+    {
+        userQuestionStr = "写一篇100字文章";
+        return userQuestionStr;
+    }
+
+    void AiVoiceModel::SetUserQuestionStr(std::string str)
+    {
+        userQuestionStr = str;
+    }
+
+    std::string AiVoiceModel::GetAiAnswerStrStr(void)
+    {
+        aiAnswerStr = "春风化雨,时光荏苒。百年之内,生命如白驹过隙,转瞬即逝。唯有心存善念,用爱化解芥蒂,用智慧建构未来,才是人生的真正意义。让我们携手共进,用每一分时光去关爱他人,用每一滴汗水去创造奇迹,用每一个眼神去传递温暖。让这个世界因我们的存在而变得更加美好。生命短暂,但只要我们怀着虔诚的心,坚韧前行,我们就一定能在有限的时光里留下无限的可能。";
+        return aiAnswerStr;
+    }
+
+    void AiVoiceModel::SetaiAnswerStrStr(std::string str)
+    {
+        aiAnswerStr = str;
+    }
+
+    std::string AiVoiceModel::GetAIAudioPath(void)
+    {
+        return AIAIAudioPath;
+    }
 }
index ec26344..be7a87a 100644 (file)
@@ -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-25 17:39:51
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AiVoicePresenter.cpp
  */
 #include "AppViewIDs.h"
@@ -14,6 +14,8 @@
 #include <custom_utils.h>
 #include "UiConfig.h"
 #include "iostream"
+#include <string>        // For std::string
+#include <unordered_map> // For std::unordered_map
 
 namespace OHOS
 {
@@ -42,6 +44,7 @@ namespace OHOS
     {
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AiVoicePresenter::OnStart");
         Presenter<AiVoiceView>::OnStart();
+        ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON);
     }
 
     // 页面已经展示后的调用逻辑
@@ -67,6 +70,27 @@ namespace OHOS
     {
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AiVoicePresenter::OnStop");
         Presenter<AiVoiceView>::OnStop();
+        ScreenAlwaysOnCtr(CANCEL_SCREEN_ALWAYS_ON);
+    }
+
+    bool AiVoicePresenter::JumpToReturnResultTextView(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AiVoicePresenter::JumpToReturnResultTextView");
+        if (view_ == nullptr)
+        {
+            return false;
+        }
+        if (view_->GetAiVoiceScrollView(AIVOICE_THINKING_VIEWID) != nullptr && view_->GetAiVoiceScrollView(AIVOICE_THINKING_VIEWID)->IsVisible())
+        {
+            view_->ChangeView(AIVOICE_THINKING_VIEWID, AIVOICE_RETURN_RESULT_TEXT_VIEWID); // 思考中界面->返回结果
+        }
+        else
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AiVoicePresenter::JumpToReturnResultTextView fail");
+            return false;
+        }
+
+        return true;
     }
 
     bool AiVoicePresenter::OnClick(UIView &view, const ClickEvent &event)
@@ -75,11 +99,51 @@ 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;
         }
 
+        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<std::string, std::pair<int16_t, int16_t>> 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}},            // 返回继续聆听
+            {CANCEL_THINKING_BUTTON_VIEW_ID, {AIVOICE_THINKING_VIEWID, AIVOICE_STARTCHAT_VIEWID}},                                // 返回一级界面
+            {AIVOICERETURNRESULTTEXT_RETURN_BUTTON_VIEW_ID, {AIVOICE_RETURN_RESULT_TEXT_VIEWID, AIVOICE_STARTCHAT_VIEWID}},       // 返回一级界面,并清除手表聊天记录
+            {AIVOICERETURNRESULTTEXT_CONTINUECHAT_BUTTON_VIEW_ID, {AIVOICE_RETURN_RESULT_TEXT_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;
+        }
         return true;
     }
 
@@ -98,9 +162,26 @@ namespace OHOS
     {
         UNUSED(view);
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AiVoicePresenter::OnDragEnd");
+        UIScrollView *scrollView = dynamic_cast<UIScrollView *>(&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); // 聆听中->开始对话界面
+            }
+            else if (scrollView == view_->GetAiVoiceScrollView(AIVOICE_THINKING_VIEWID))
+            {
+                view_->ChangeView(AIVOICE_THINKING_VIEWID, AIVOICE_STARTCHAT_VIEWID); // 思考中->开始对话界面
+            }
             AiVoicePresenter::X_DRAG_FLAG = false;
         }
         return true;
index c224ea9..f1e0843 100644 (file)
@@ -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-25 17:43:03
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/AiVoice/src/AiVoiceView.cpp
  */
 #include "aivoice/include/AiVoicePresenter.h"
@@ -42,6 +42,62 @@ 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;
+            }
+
+            if (p_AivoiceThinkingView != nullptr)
+            {
+                delete p_AivoiceThinkingView;
+                p_AivoiceThinkingView = nullptr;
+            }
+
+            if (p_AivoiceReturnResultTextView != nullptr)
+            {
+                delete p_AivoiceReturnResultTextView;
+                p_AivoiceReturnResultTextView = nullptr;
+            }
         }
     }
 
@@ -73,7 +129,7 @@ namespace OHOS
         return Image;
     }
 
-    UIButton *AiVoiceView::AiVoiceViewLabelButtonInit(ButtonConfig &buttonconfig)
+    UIButton *AiVoiceView::AiVoiceViewButtonInit(ButtonConfig &buttonconfig)
     {
         UIButton *button = new UIButton();
         if (button == nullptr)
@@ -84,7 +140,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 +148,7 @@ namespace OHOS
 
     bool AiVoiceView::CreateAiVoiceViewLabel(void)
     {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AiVoiceView::CreateAiVoiceViewLabel");
         LabelConfig labelConfig = {
             .left = 83,
             .top = 52,
@@ -131,6 +188,7 @@ namespace OHOS
 
     bool AiVoiceView::CreateAiVoiceViewImageView(void)
     {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AiVoiceView::CreateAiVoiceViewImageView");
         ImageConfig imagecinfig = {
             .x = 207,
             .y = 182,
@@ -152,6 +210,7 @@ namespace OHOS
 
     bool AiVoiceView::CreateAiVoiceViewButton(void)
     {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AiVoiceView::CreateAiVoiceViewButton");
         ButtonConfig buttonconfig = {
             .x = 93,
             .y = 340,
@@ -159,7 +218,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 +228,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 +272,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 +324,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[%d] fail", thisView);
+                return false;
+            }
+            AiVoiceScrollView[thisView] = p_AiVoiceBluetoothFailedStartView->CreateAiVoiceBluetoothFailedStartView();
+            container_->Add(AiVoiceScrollView[thisView]);
+        }
         return true;
     }
 
@@ -255,7 +342,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[%d] fail", thisView);
+                return false;
+            }
+            AiVoiceScrollView[thisView] = p_AivoiceMobileDataFailedStartView->CreateAivoiceMobileDataFailedStartView();
+            container_->Add(AiVoiceScrollView[thisView]);
+        }
         return true;
     }
 
@@ -263,6 +360,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[%d] fail", thisView);
+                return false;
+            }
+            AiVoiceScrollView[thisView] = p_AivoiceConnectTimeoutView->CreateAivoiceConnectTimeoutView();
+            container_->Add(AiVoiceScrollView[thisView]);
+        }
 
         return true;
     }
@@ -271,7 +379,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[%d] fail", thisView);
+                return false;
+            }
+            AiVoiceScrollView[thisView] = p_AivoiceListeningView->CreateAivoiceListeningView();
+            container_->Add(AiVoiceScrollView[thisView]);
+        }
         return true;
     }
 
@@ -279,7 +397,17 @@ namespace OHOS
     bool AiVoiceView::ChangeAiVoicThinkingView(int16_t thisView)
     {
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AiVoiceView::ChangeAiVoicThinkingView");
-
+        if (AiVoiceScrollView[thisView] == nullptr)
+        {
+            p_AivoiceThinkingView = new AivoiceThinkingView();
+            if (p_AivoiceThinkingView == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "new AiVoiceScrollView[%d] fail", thisView);
+                return false;
+            }
+            AiVoiceScrollView[thisView] = p_AivoiceThinkingView->CreateAivoiceThinkingView();
+            container_->Add(AiVoiceScrollView[thisView]);
+        }
         return true;
     }
 
@@ -287,7 +415,32 @@ namespace OHOS
     bool AiVoiceView::ChangeAiVoicReturnResultTextView(int16_t thisView)
     {
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AiVoiceView::ChangeAiVoicReturnResultTextView");
-
+        if (AiVoiceScrollView[thisView] == nullptr)
+        {
+            p_AivoiceReturnResultTextView = new AivoiceReturnResultTextView();
+            if (p_AivoiceReturnResultTextView == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "new AiVoiceScrollView[%d] fail", thisView);
+                return false;
+            }
+            AiVoiceScrollView[thisView] = p_AivoiceReturnResultTextView->CreateAivoiceReturnResultTextView();
+            container_->Add(AiVoiceScrollView[thisView]);
+        }
+        else
+        {
+            container_->Remove(AiVoiceScrollView[thisView]);
+            delete p_AivoiceReturnResultTextView;
+            p_AivoiceReturnResultTextView = nullptr;
+            
+            p_AivoiceReturnResultTextView = new AivoiceReturnResultTextView();
+            if (p_AivoiceReturnResultTextView == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "new AiVoiceScrollView[%d] fail", thisView);
+                return false;
+            }
+            AiVoiceScrollView[thisView] = p_AivoiceReturnResultTextView->CreateAivoiceReturnResultTextView();
+            container_->Add(AiVoiceScrollView[thisView]);
+        }
         return true;
     }
 
@@ -339,4 +492,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 (file)
index 0000000..9dbf012
--- /dev/null
@@ -0,0 +1,265 @@
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-05-07 11:25:58
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-06-24 10:38:42
+ * @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 <UiConfig.h>
+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");
+        ClearAll();
+        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<UIView::OnClickListener *>(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 (file)
index 0000000..010ff29
--- /dev/null
@@ -0,0 +1,305 @@
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-05-07 11:25:58
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-06-24 16:39:51
+ * @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 <UiConfig.h>
+// #include "common/image_cache_manager.h"
+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");
+        ClearAll();
+        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 (AiVoiceListeningImageAnimatorView != nullptr)
+            {
+                AiVoiceListeningImageAnimatorView->Stop();
+                delete AiVoiceListeningImageAnimatorView;
+                AiVoiceListeningImageAnimatorView = nullptr;
+
+                FreeImagePathsArray(AiVoiceListeningPathsArray, AIVOICE_LISTENING_IMAGE_ANIMATOR_VIEW_NUM_FRAMES);
+            }
+
+            if (finishSpeak != nullptr)
+            {
+                delete finishSpeak;
+                finishSpeak = nullptr;
+            }
+
+            if (finishSpeakButton != nullptr)
+            {
+                delete finishSpeakButton;
+                finishSpeakButton = nullptr;
+            }
+
+            delete scrollView;
+            scrollView = nullptr;
+        }
+    }
+
+    const char **AivoiceListeningView::CreateImagePathsArray(const char *basePath, const int numImages, const char *fileExtension)
+    {
+        const char **imagePaths = new const char *[numImages];
+        if (imagePaths == nullptr)
+        {
+            return nullptr;
+        }
+
+        char buffer[256];
+        for (int i = 0; i < numImages; i++)
+        {
+            snprintf(buffer, sizeof(buffer), "%s%d.%s", basePath, i + 1, fileExtension);
+            imagePaths[i] = strdup(buffer);
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, " imagePaths[%d] = %s", i, imagePaths[i]);
+        }
+        return imagePaths;
+    }
+
+    void AivoiceListeningView::FreeImagePathsArray(const char **imagePaths, const int numImages)
+    {
+        for (int i = 0; i < numImages; i++)
+        {
+            // ImageCacheManager::GetInstance().UnloadSingleRes(imagePaths[i]);
+            delete imagePaths[i];
+            imagePaths[i] = 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;
+    }
+
+    UIImageAnimatorView *AivoiceListeningView::AivoiceListeningImageAnimatorInit(ImageAnimatorConfig &imageanimatorconfig)
+    {
+        UIImageAnimatorView *animatorView = new UIImageAnimatorView();
+        if (animatorView == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AiVoiceListeningImageAnimatorView::AiVoiceListeningImageAnimatorView new fail");
+            return nullptr;
+        }
+
+        for (uint8_t i = 0; i < imageanimatorconfig.numFrames; i++)
+        {
+            // imageanimatorconfig.imageInfoArray[i].imageInfo = ImageCacheManager::GetInstance().LoadSingleRes(imageanimatorconfig.pathsArray[i]);
+            imageanimatorconfig.imageInfoArray[i].imagePath = (imageanimatorconfig.pathsArray[i]);
+            imageanimatorconfig.imageInfoArray[i].imageType = IMG_SRC_FILE_PATH;
+            imageanimatorconfig.imageInfoArray[i].pos.x = imageanimatorconfig.x;
+            imageanimatorconfig.imageInfoArray[i].pos.y = imageanimatorconfig.y;
+            imageanimatorconfig.imageInfoArray[i].width = imageanimatorconfig.width;
+            imageanimatorconfig.imageInfoArray[i].height = imageanimatorconfig.height;
+        }
+
+        animatorView->SetPosition(imageanimatorconfig.x, imageanimatorconfig.y, imageanimatorconfig.width, imageanimatorconfig.height);
+        animatorView->SetImageAnimatorSrc(imageanimatorconfig.imageInfoArray, imageanimatorconfig.numFrames, imageanimatorconfig.delay);
+        animatorView->SetRepeat(true);
+        animatorView->SetAutoEnable(false);
+        animatorView->SetResizeMode(UIImageAnimatorView::FILL);
+        animatorView->Start();
+
+        return animatorView;
+    }
+
+    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<UIView::OnDragListener *>(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<UIView::OnClickListener *>(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::CreateAivoiceListeningImageAnimator(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AivoiceListeningView::CreateAivoiceListeningImageAnimator");
+        AiVoiceListeningPathsArray = CreateImagePathsArray(AIVoiceListeningImagePaths, AIVOICE_LISTENING_IMAGE_ANIMATOR_VIEW_NUM_FRAMES);
+        if (AiVoiceListeningPathsArray == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceListeningView::AiVoiceListeningPathsArray  is nullptr!!");
+            return false;
+        }
+
+        ImageAnimatorConfig imageanimatorconfig = {
+            .x = AIVOICE_LISTENING_IMAGE_ANIMATOR_VIEW_X,
+            .y = AIVOICE_LISTENING_IMAGE_ANIMATOR_VIEW_Y,
+            .width = AIVOICE_LISTENING_IMAGE_ANIMATOR_VIEW_W,
+            .height = AIVOICE_LISTENING_IMAGE_ANIMATOR_VIEW_H,
+            .imageInfoArray = AiVoiceListeningImageInfo,
+            .pathsArray = AiVoiceListeningPathsArray,
+            .numFrames = AIVOICE_LISTENING_IMAGE_ANIMATOR_VIEW_NUM_FRAMES,
+            .delay = AIVOICE_LISTENING_IMAGE_ANIMATOR_DELAY,
+        };
+        AiVoiceListeningImageAnimatorView = AivoiceListeningImageAnimatorInit(imageanimatorconfig);
+        if (AiVoiceListeningImageAnimatorView == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AiVoiceListeningImageAnimatorView::AiVoiceListeningImageAnimatorView  new fail");
+            return false;
+        }
+
+        return true;
+    }
+
+    UIScrollView *AivoiceListeningView::CreateAivoiceListeningView(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AivoiceListeningView::CreateAivoiceListeningView");
+        if (scrollView == nullptr)
+        {
+            if (!CreateAivoiceListeningScrollView() || !CreateAivoiceListeningLabel() ||
+                !CreateAivoiceListeningButton() || !CreateAivoiceListeningImageAnimator())
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceListeningView::CreateAivoiceListeningView fail!!");
+                return nullptr;
+            }
+            scrollView->Add(title);
+            scrollView->Add(AiVoiceListeningImageAnimatorView);
+            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 (file)
index 0000000..b76f9e6
--- /dev/null
@@ -0,0 +1,265 @@
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-05-07 11:25:58
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-06-24 10:39:26
+ * @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 <UiConfig.h>
+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");
+        ClearAll();
+        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<UIView::OnClickListener *>(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
diff --git a/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AivoiceReturnResultTextView.cpp b/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AivoiceReturnResultTextView.cpp
new file mode 100644 (file)
index 0000000..1e6c112
--- /dev/null
@@ -0,0 +1,465 @@
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-05-07 11:25:58
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-06-25 17:45:39
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/AiVoice/src/AivoiceReturnResultTextView.cpp
+ */
+#include "aivoice/include/AiVoicePresenter.h"
+#include "aivoice/include/AivoiceReturnResultTextView.h"
+#include "wearable_log.h"
+#include "language/font/ui_resource_string.h"
+#include "aivoice/include/AiVoiceModel.h"
+#include <UiConfig.h>
+#include <iostream>
+#include "string"
+
+namespace OHOS
+{
+
+    /* -------------------------------------------------------------------------- */
+    static constexpr const int16_t QUESTION_SCROLLVIEW_X = 112;
+    static constexpr const int16_t QUESTION_SCROLLVIEW_Y = 120;
+    static constexpr const int16_t QUESTION_SCROLLVIEW_W = 280;
+    static constexpr const int16_t QUESTION_SCROLLVIEW_H = 80;
+    static constexpr const int64_t QUESTION_BACKGROUND_COLOR = 0xff4fc34c;
+
+    static constexpr const int16_t QUESTION_LABEL_W = 200;
+    static constexpr const int16_t QUESTION_LABEL_H = 30;
+    static constexpr const int16_t QUESTION_LABEL_FONTSIZE = 26;
+    static constexpr const int16_t QUESTION_LABEL_LINEHEIGHT = 30;
+    /* -------------------------------------------------------------------------- */
+
+    static constexpr const int16_t ANSWER_SCROLLVIEW_X = 53;
+    static constexpr const int16_t ANSWER_SCROLLVIEW_Y = QUESTION_SCROLLVIEW_Y + QUESTION_SCROLLVIEW_H + 30;
+    static constexpr const int16_t ANSWER_SCROLLVIEW_W = 360;
+    static constexpr const int16_t ANSWER_SCROLLVIEW_H = 250;
+    static constexpr const int64_t ANSWER_BACKGROUND_COLOR = 0xff191919;
+
+    static constexpr const int16_t ANSWER_LABEL_W = 270;
+    static constexpr const int16_t ANSWER_LABEL_H = 194;
+    static constexpr const int16_t ANSWER_LABEL_FONTSIZE = 26;
+    static constexpr const int16_t ANSWER_LABEL_LINEHEIGHT = 30;
+
+    /* -------------------------------------------------------------------------- */
+    static constexpr const int16_t RECGREEN_IMAGE_X = 342;
+    static constexpr const int16_t RECGREEN_IMAGE_Y = QUESTION_SCROLLVIEW_Y;
+    static constexpr const int16_t RECGREEN_IMAGE_W = 70;
+    static constexpr const int16_t RECGREEN_IMAGE_H = 30;
+    static constexpr const char *RECGREEN_IMAGE_PATH = "/user/res/AIVoice/AI_RecGreen.bin";
+
+    static constexpr const int16_t RECBLACK_IMAGE_X = 32;
+    static constexpr const int16_t RECBLACK_IMAGE_Y = ANSWER_SCROLLVIEW_Y;
+    static constexpr const int16_t RECBLACK_IMAGE_W = 70;
+    static constexpr const int16_t RECBLACK_IMAGE_H = 30;
+    static constexpr const char *RECBLACK_IMAGE_PATH = "/user/res/AIVoice/AI_RecBlack.bin";
+    /* -------------------------------------------------------------------------- */
+    static constexpr const int16_t RETURN_BUTTON_X = 73;
+    static constexpr const int16_t RETURN_BUTTON_Y = ANSWER_SCROLLVIEW_Y + ANSWER_SCROLLVIEW_H + 20;
+    static constexpr const int16_t RETURN_BUTTON_W = 100;
+    static constexpr const int16_t RETURN_BUTTON_H = 100;
+    static constexpr const char *RETURN_BUTTON_PATH = "/user/res/AIVoice/AI_Union.bin";
+
+    static constexpr const int16_t CONTINUECHAT_BUTTON_X = 183;
+    static constexpr const int16_t CONTINUECHAT_BUTTON_Y = ANSWER_SCROLLVIEW_Y + ANSWER_SCROLLVIEW_H + 20;
+    static constexpr const int16_t CONTINUECHAT_BUTTON_W = 210;
+    static constexpr const int16_t CONTINUECHAT_BUTTON_H = 100;
+    /* -------------------------------------------------------------------------- */
+    static constexpr const int16_t CONTINUECHAT_X = CONTINUECHAT_BUTTON_X + 45;
+    static constexpr const int16_t CONTINUECHAT_Y = CONTINUECHAT_BUTTON_Y + 33;
+    static constexpr const int16_t CONTINUECHAT_W = 120;
+    static constexpr const int16_t CONTINUECHAT_H = 35;
+
+    static constexpr const int16_t ONE_HALF_NUM = 2;
+
+    static AivoiceReturnResultTextView *g_pAivoiceReturnResultTextView{nullptr};
+
+    AivoiceReturnResultTextView::AivoiceReturnResultTextView()
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceReturnResultTextView::AivoiceReturnResultTextView");
+        g_pAivoiceReturnResultTextView = this;
+    }
+
+    AivoiceReturnResultTextView::~AivoiceReturnResultTextView()
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceReturnResultTextView::~AivoiceReturnResultTextView");
+        ClearAll();
+        g_pAivoiceReturnResultTextView = nullptr;
+    }
+
+    AivoiceReturnResultTextView *AivoiceReturnResultTextView::GetInstance()
+    {
+        return g_pAivoiceReturnResultTextView;
+    }
+
+    void AivoiceReturnResultTextView::ClearAll(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AivoiceReturnResultTextView::ClearAll");
+        if (scrollView != nullptr)
+        {
+            scrollView->RemoveAll();
+
+            if (title != nullptr)
+            {
+                delete title;
+                title = nullptr;
+            }
+
+            if (questionScrollView != nullptr)
+            {
+                questionScrollView->Remove(question);
+                if (question != nullptr)
+                {
+                    delete question;
+                    question = nullptr;
+                }
+                delete questionScrollView;
+                questionScrollView = nullptr;
+            }
+
+            if (recGreenImage != nullptr)
+            {
+                delete recGreenImage;
+                recGreenImage = nullptr;
+            }
+
+            if (answerScrollView != nullptr)
+            {
+                answerScrollView->Remove(answer);
+                if (answer != nullptr)
+                {
+                    delete answer;
+                    answer = nullptr;
+                }
+                delete answerScrollView;
+                answerScrollView = nullptr;
+            }
+
+            if (recBlackImage != nullptr)
+            {
+                delete recBlackImage;
+                recBlackImage = nullptr;
+            }
+
+            if (returnButton != nullptr)
+            {
+                delete returnButton;
+                returnButton = nullptr;
+            }
+
+            if (continueChatButton != nullptr)
+            {
+                delete continueChatButton;
+                continueChatButton = nullptr;
+            }
+
+            if (continueChat != nullptr)
+            {
+                delete continueChat;
+                continueChat = nullptr;
+            }
+
+            delete scrollView;
+            scrollView = nullptr;
+        }
+    }
+
+    UILabelExt *AivoiceReturnResultTextView::AivoiceReturnResultTextLabelInit(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.lineHeight);
+        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 *AivoiceReturnResultTextView::AivoiceReturnResultTextButtonInit(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 *AivoiceReturnResultTextView::AivoiceReturnResultTextImageInit(ImageConfig &imageconfig)
+    {
+        UIImageView *Image = new UIImageView();
+        if (Image == nullptr)
+        {
+            return nullptr;
+        }
+        Image->SetPosition(imageconfig.x, imageconfig.y, imageconfig.w, imageconfig.h);
+        Image->SetSrc(imageconfig.src);
+        return Image;
+    }
+
+    bool AivoiceReturnResultTextView::CreateAivoiceReturnResultTextScrollView(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AivoiceReturnResultTextView::CreateAivoiceReturnResultTextScrollView");
+        scrollView = new UIScrollView();
+        if (scrollView == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceReturnResultTextView::scrollView new fail!");
+            return false;
+        }
+        scrollView->SetPosition(0, 0, 466, 466);
+        scrollView->SetTouchable(true);
+        scrollView->SetDraggable(true);
+        scrollView->SetReboundSize(40);
+        scrollView->SetScrollBlankSize(70);
+        scrollView->SetThrowDrag(true);
+        scrollView->SetMaxScrollDistance(1000);
+        scrollView->SetDirection(UIScrollView::VERTICAL);
+
+        return true;
+    }
+
+    bool AivoiceReturnResultTextView::CreateAivoiceReturnResultTextUserQuestionLabel(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AivoiceReturnResultTextView::CreateAivoiceReturnResultTextUserQuestionLabel");
+        if (questionScrollView == nullptr)
+        {
+            questionScrollView = new UIScrollView();
+            if (questionScrollView == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceReturnResultTextView::questionScrollView is nullptr!");
+                return false;
+            }
+            questionScrollView->SetPosition(QUESTION_SCROLLVIEW_X, QUESTION_SCROLLVIEW_Y, QUESTION_SCROLLVIEW_W, QUESTION_SCROLLVIEW_H);
+            questionScrollView->SetStyle(STYLE_BACKGROUND_COLOR, QUESTION_BACKGROUND_COLOR);
+            questionScrollView->SetStyle(STYLE_BACKGROUND_OPA, 0xff);
+            questionScrollView->SetStyle(STYLE_BORDER_RADIUS, 20);
+        }
+        /* -------------------------------------------------------------------------- */
+        int16_t QUESTION_LABEL_X = (questionScrollView->GetWidth() - QUESTION_LABEL_W) / ONE_HALF_NUM;
+        int16_t QUESTION_LABEL_Y = (questionScrollView->GetHeight() - QUESTION_LABEL_H) / ONE_HALF_NUM;
+        if (question == nullptr)
+        {
+            question = new UILabelExt();
+            if (question == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceReturnResultTextView::question is nullptr!");
+                return false;
+            }
+
+            question->SetPosition(QUESTION_LABEL_X, QUESTION_LABEL_Y, QUESTION_LABEL_W, QUESTION_LABEL_H);
+            question->SetStyle(STYLE_TEXT_FONT, QUESTION_LABEL_FONTSIZE);
+            question->SetStyle(STYLE_LINE_HEIGHT, QUESTION_LABEL_LINEHEIGHT);
+            std::string questionStr = AiVoiceModel::GetInstance().GetUserQuestionStr();
+            question->SetText(questionStr.c_str());
+            question->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0xcc));
+            question->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE);
+            question->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+            question->SetFont(DEFAULT_VECTOR_FONT_FILENAME, QUESTION_LABEL_FONTSIZE);
+
+            questionScrollView->Add(question);
+        }
+        return true;
+    }
+
+    bool AivoiceReturnResultTextView::CreateAivoiceReturnResultTextAIAnswerLabel(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AivoiceReturnResultTextView::CreateAivoiceReturnResultTextAIAnswerLabel");
+        if (answerScrollView == nullptr)
+        {
+            answerScrollView = new UIScrollView();
+            if (answerScrollView == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceReturnResultTextView::answerScrollView is nullptr!");
+                return false;
+            }
+            answerScrollView->SetPosition(ANSWER_SCROLLVIEW_X, ANSWER_SCROLLVIEW_Y, ANSWER_SCROLLVIEW_W, ANSWER_SCROLLVIEW_H);
+            answerScrollView->SetStyle(STYLE_BACKGROUND_COLOR, ANSWER_BACKGROUND_COLOR);
+            answerScrollView->SetStyle(STYLE_BACKGROUND_OPA, 0xff);
+            answerScrollView->SetStyle(STYLE_BORDER_RADIUS, 20);
+            /* -------------------------------------------------------------------------- */
+            int16_t ANSWER_LABEL_X = (answerScrollView->GetWidth() - ANSWER_LABEL_W) / ONE_HALF_NUM;
+            int16_t ANSWER_LABEL_Y = (answerScrollView->GetHeight() - ANSWER_LABEL_H) / ONE_HALF_NUM;
+            if (answer == nullptr)
+            {
+                answer = new UILabelExt();
+                if (answer == nullptr)
+                {
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceReturnResultTextView::answer is nullptr!");
+                    return false;
+                }
+
+                answer->SetPosition(ANSWER_LABEL_X, ANSWER_LABEL_Y, ANSWER_LABEL_W, ANSWER_LABEL_H);
+                answer->SetStyle(STYLE_TEXT_FONT, ANSWER_LABEL_FONTSIZE);
+                answer->SetStyle(STYLE_LINE_HEIGHT, ANSWER_LABEL_LINEHEIGHT);
+                std::string answerStr = AiVoiceModel::GetInstance().GetAiAnswerStrStr();
+                answer->SetText(answerStr.c_str());
+                answer->SetTextColor(Color::GetColorFromRGBA(0x99, 0x99, 0x99, 0xff));
+                answer->SetLineBreakMode(UILabel::LINE_BREAK_ELLIPSIS);
+                answer->SetAlign(TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_CENTER);
+                answer->SetFont(DEFAULT_VECTOR_FONT_FILENAME, QUESTION_LABEL_FONTSIZE);
+
+                answerScrollView->Add(answer);
+            }
+        }
+        return true;
+    }
+
+    bool AivoiceReturnResultTextView::CreateAivoiceReturnResultTextLabel(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AivoiceReturnResultTextView::CreateAivoiceReturnResultTextLabel");
+        LabelConfig labelconfig = {
+            .left = 83,
+            .top = 52,
+            .width = 300,
+            .height = 35,
+            .fontSize = 30,
+            .lineHeight = 35,
+            .textId = STR_AI_INTELLIGENT_ASSISTANT,
+            .lineBreakMode = UILabel::LINE_BREAK_MARQUEE,
+        };
+        title = AivoiceReturnResultTextLabelInit(labelconfig);
+        if (title == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceReturnResultTextView::title is nullptr!");
+            return false;
+        }
+        /* -------------------------------------------------------------------------- */
+        if (!CreateAivoiceReturnResultTextUserQuestionLabel() || !CreateAivoiceReturnResultTextAIAnswerLabel())
+        {
+            return false;
+        }
+        /* -------------------------------------------------------------------------- */
+        labelconfig = {
+            .left = CONTINUECHAT_X,
+            .top = CONTINUECHAT_Y,
+            .width = CONTINUECHAT_W,
+            .height = CONTINUECHAT_H,
+            .fontSize = 30,
+            .lineHeight = 35,
+            .textId = STR_CONTINUE_CHAT,
+            .lineBreakMode = UILabel::LINE_BREAK_MARQUEE,
+        };
+        continueChat = AivoiceReturnResultTextLabelInit(labelconfig);
+        if (continueChat == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceReturnResultTextView::continueChat is nullptr!");
+            return false;
+        }
+
+        return true;
+    }
+
+    bool AivoiceReturnResultTextView::CreateAivoiceReturnResultTextLImage(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AivoiceReturnResultTextView::CreateAivoiceReturnResultTextLImage");
+        ImageConfig imageconfig = {
+            .x = RECGREEN_IMAGE_X,
+            .y = RECGREEN_IMAGE_Y,
+            .w = RECGREEN_IMAGE_W,
+            .h = RECGREEN_IMAGE_H,
+            .src = RECGREEN_IMAGE_PATH,
+        };
+        recGreenImage = AivoiceReturnResultTextImageInit(imageconfig);
+        if (recGreenImage == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceReturnResultTextView::recGreenImage is nullptr!");
+            return false;
+        }
+        /* -------------------------------------------------------------------------- */
+        imageconfig = {
+            .x = RECBLACK_IMAGE_X,
+            .y = RECBLACK_IMAGE_Y,
+            .w = RECBLACK_IMAGE_W,
+            .h = RECBLACK_IMAGE_H,
+            .src = RECBLACK_IMAGE_PATH,
+        };
+        recBlackImage = AivoiceReturnResultTextImageInit(imageconfig);
+        if (recBlackImage == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceReturnResultTextView::recBlackImage is nullptr!");
+            return false;
+        }
+
+        return true;
+    }
+
+    bool AivoiceReturnResultTextView::CreateAivoiceReturnResultTextButton(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AivoiceReturnResultTextView::CreateAivoiceReturnResultTextButton");
+        ButtonConfig buttonconfig = {
+            .x = RETURN_BUTTON_X,
+            .y = RETURN_BUTTON_Y,
+            .w = RETURN_BUTTON_W,
+            .h = RETURN_BUTTON_H,
+            .ViewId = AIVOICERETURNRESULTTEXT_RETURN_BUTTON_VIEW_ID,
+        };
+        returnButton = AivoiceReturnResultTextButtonInit(buttonconfig);
+        if (returnButton == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "returnButton new fail!");
+            return false;
+        }
+        returnButton->SetImagePosition(39, 39);
+        returnButton->SetImageSrc(RETURN_BUTTON_PATH, RETURN_BUTTON_PATH);
+        UIView::OnClickListener *clickListener = static_cast<UIView::OnClickListener *>(AiVoicePresenter::GetInstance());
+        if (clickListener == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceReturnResultTextView::draglistener can not be nullptr!");
+            return false;
+        }
+        returnButton->SetOnClickListener(clickListener);
+        /* -------------------------------------------------------------------------- */
+        buttonconfig = {
+            .x = CONTINUECHAT_BUTTON_X,
+            .y = CONTINUECHAT_BUTTON_Y,
+            .w = CONTINUECHAT_BUTTON_W,
+            .h = CONTINUECHAT_BUTTON_H,
+            .ViewId = AIVOICERETURNRESULTTEXT_CONTINUECHAT_BUTTON_VIEW_ID,
+        };
+        continueChatButton = AivoiceReturnResultTextButtonInit(buttonconfig);
+        if (continueChatButton == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "continueChatButton new fail!");
+            return false;
+        }
+        continueChatButton->SetOnClickListener(clickListener);
+
+        return true;
+    }
+
+    UIScrollView *AivoiceReturnResultTextView::CreateAivoiceReturnResultTextView(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AivoiceReturnResultTextView::CreateAivoiceReturnResultTextView");
+        if (scrollView == nullptr)
+        {
+            if (!CreateAivoiceReturnResultTextScrollView() || !CreateAivoiceReturnResultTextLabel() ||
+                !CreateAivoiceReturnResultTextLImage() || !CreateAivoiceReturnResultTextButton())
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceReturnResultTextView::CreateAivoiceReturnResultTextView fail!!");
+                return nullptr;
+            }
+            /* ----------------------------------- Add ---------------------------------- */
+            scrollView->Add(title);
+            scrollView->Add(questionScrollView);
+            scrollView->Add(recGreenImage);
+            scrollView->Add(answerScrollView);
+            scrollView->Add(recBlackImage);
+            scrollView->Add(returnButton);
+            scrollView->Add(continueChatButton);
+            scrollView->Add(continueChat);
+        }
+        return scrollView;
+    }
+}
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AivoiceThinkingView.cpp b/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AivoiceThinkingView.cpp
new file mode 100644 (file)
index 0000000..10298ad
--- /dev/null
@@ -0,0 +1,306 @@
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-05-07 11:25:58
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-06-24 16:39:53
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/AiVoice/src/AivoiceThinkingView.cpp
+ */
+#include "aivoice/include/AiVoicePresenter.h"
+#include "aivoice/include/AivoiceThinkingView.h"
+#include "wearable_log.h"
+#include "language/font/ui_resource_string.h"
+#include <UiConfig.h>
+// #include "common/image_cache_manager.h"
+namespace OHOS
+{
+
+    static AivoiceThinkingView *g_pAivoiceThinkingView{nullptr};
+
+    AivoiceThinkingView::AivoiceThinkingView()
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceThinkingView::AivoiceThinkingView");
+        g_pAivoiceThinkingView = this;
+    }
+
+    AivoiceThinkingView::~AivoiceThinkingView()
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceThinkingView::~AivoiceThinkingView");
+        ClearAll();
+        g_pAivoiceThinkingView = nullptr;
+    }
+
+    AivoiceThinkingView *AivoiceThinkingView::GetInstance()
+    {
+        return g_pAivoiceThinkingView;
+    }
+
+    void AivoiceThinkingView::ClearAll(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AivoiceThinkingView::ClearAll");
+        if (scrollView != nullptr)
+        {
+            scrollView->RemoveAll();
+
+            if (title != nullptr)
+            {
+                delete title;
+                title = nullptr;
+            }
+
+            if (AiVoiceThinkingImageAnimatorView != nullptr)
+            {
+                AiVoiceThinkingImageAnimatorView->Stop();
+                delete AiVoiceThinkingImageAnimatorView;
+                AiVoiceThinkingImageAnimatorView = nullptr;
+
+                FreeImagePathsArray(AiVoiceThinkingPathsArray, AIVOICE_THINKING_IMAGE_ANIMATOR_VIEW_NUM_FRAMES);
+            }
+
+            if (cancelThink != nullptr)
+            {
+                delete cancelThink;
+                cancelThink = nullptr;
+            }
+
+            if (cancelThinkButton != nullptr)
+            {
+                delete cancelThinkButton;
+                cancelThinkButton = nullptr;
+            }
+
+            delete scrollView;
+            scrollView = nullptr;
+        }
+    }
+
+    const char **AivoiceThinkingView::CreateImagePathsArray(const char *basePath, const int numImages, const char *fileExtension)
+    {
+        const char **imagePaths = new const char *[numImages];
+        if (imagePaths == nullptr)
+        {
+            return nullptr;
+        }
+
+        char buffer[256];
+        for (int i = 0; i < numImages; i++)
+        {
+            snprintf(buffer, sizeof(buffer), "%s%d.%s", basePath, i + 1, fileExtension);
+            imagePaths[i] = strdup(buffer);
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, " imagePaths[%d] = %s", i, imagePaths[i]);
+        }
+        return imagePaths;
+    }
+
+    void AivoiceThinkingView::FreeImagePathsArray(const char **imagePaths, const int numImages)
+    {
+        for (int i = 0; i < numImages; i++)
+        {
+            // ImageCacheManager::GetInstance().UnloadSingleRes(imagePaths[i]);
+            delete imagePaths[i];
+            imagePaths[i] = nullptr;
+        }
+    }
+
+    UILabelExt *AivoiceThinkingView::AivoiceThinkingLabelInit(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 *AivoiceThinkingView::AivoiceThinkingButtonInit(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;
+    }
+
+    UIImageAnimatorView *AivoiceThinkingView::AivoiceThinkingImageAnimatorInit(ImageAnimatorConfig &imageanimatorconfig)
+    {
+        UIImageAnimatorView *animatorView = new UIImageAnimatorView();
+        if (animatorView == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AiVoiceThinkingImageAnimatorView::AiVoiceThinkingImageAnimatorView new fail");
+            return nullptr;
+        }
+
+        for (uint8_t i = 0; i < imageanimatorconfig.numFrames; i++)
+        {
+            // imageanimatorconfig.imageInfoArray[i].imageInfo = ImageCacheManager::GetInstance().LoadSingleRes(imageanimatorconfig.pathsArray[i]);
+            imageanimatorconfig.imageInfoArray[i].imagePath = (imageanimatorconfig.pathsArray[i]);
+            imageanimatorconfig.imageInfoArray[i].imageType = IMG_SRC_FILE_PATH;
+            imageanimatorconfig.imageInfoArray[i].pos.x = imageanimatorconfig.x;
+            imageanimatorconfig.imageInfoArray[i].pos.y = imageanimatorconfig.y;
+            imageanimatorconfig.imageInfoArray[i].width = imageanimatorconfig.width;
+            imageanimatorconfig.imageInfoArray[i].height = imageanimatorconfig.height;
+        }
+
+        animatorView->SetPosition(imageanimatorconfig.x, imageanimatorconfig.y, imageanimatorconfig.width, imageanimatorconfig.height);
+        animatorView->SetImageAnimatorSrc(imageanimatorconfig.imageInfoArray, imageanimatorconfig.numFrames, imageanimatorconfig.delay);
+        animatorView->SetRepeat(true);
+        animatorView->SetAutoEnable(false);
+        animatorView->SetResizeMode(UIImageAnimatorView::FILL);
+        animatorView->Start();
+
+        return animatorView;
+    }
+
+    bool AivoiceThinkingView::CreateAivoiceThinkingScrollView(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AivoiceThinkingView::CreateAivoiceThinkingScrollView");
+        scrollView = new UIScrollView();
+        if (scrollView == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceThinkingView::scrollView new fail!");
+            return false;
+        }
+        scrollView->SetPosition(0, 0, 466, 466);
+        UIView::OnDragListener *dragListener = static_cast<UIView::OnDragListener *>(AiVoicePresenter::GetInstance());
+        if (dragListener == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceThinkingView::dragListener new fail!");
+            return false;
+        }
+        scrollView->SetOnDragListener(dragListener);
+        scrollView->SetTouchable(true);
+        scrollView->SetDraggable(true);
+
+        return true;
+    }
+
+    bool AivoiceThinkingView::CreateAivoiceThinkingLabel(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AivoiceThinkingView::CreateAivoiceThinkingLabel");
+        LabelConfig labelconfig = {
+            .left = 83,
+            .top = 52,
+            .width = 300,
+            .height = 35,
+            .fontSize = 30,
+            .lineHeigh = 35,
+            .textId = STR_THINKING,
+            .lineBreakMode = UILabel::LINE_BREAK_MARQUEE,
+        };
+        title = AivoiceThinkingLabelInit(labelconfig);
+        if (title == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceThinkingView::title is nullptr!");
+            return false;
+        }
+        /* -------------------------------------------------------------------------- */
+        labelconfig = {
+            .left = 133,
+            .top = 368,
+            .width = 200,
+            .height = 35,
+            .fontSize = 30,
+            .lineHeigh = 35,
+            .textId = STR_CANCEL,
+            .lineBreakMode = UILabel::LINE_BREAK_MARQUEE,
+        };
+        cancelThink = AivoiceThinkingLabelInit(labelconfig);
+        if (cancelThink == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceThinkingView::cancelThink is nullptr!");
+            return false;
+        }
+        cancelThink->SetTextColor(Color::GetColorFromRGBA(0xfd, 0x52, 0x03, 0xff));
+
+        return true;
+    }
+
+    bool AivoiceThinkingView::CreateAivoiceThinkingButton(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AivoiceThinkingView::CreateAivoiceThinkingButton");
+        ButtonConfig buttonconfig = {
+            .x = 93,
+            .y = 340,
+            .w = 280,
+            .h = 90,
+            .ViewId = CANCEL_THINKING_BUTTON_VIEW_ID,
+        };
+        cancelThinkButton = AivoiceThinkingButtonInit(buttonconfig);
+        if (cancelThinkButton == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "cancelThinkButton new fail!");
+            return false;
+        }
+        UIView::OnClickListener *clickListener = static_cast<UIView::OnClickListener *>(AiVoicePresenter::GetInstance());
+        if (clickListener == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceThinkingView::draglistener can not be nullptr!");
+            return false;
+        }
+        cancelThinkButton->SetOnClickListener(clickListener);
+
+        return true;
+    }
+
+    bool AivoiceThinkingView::CreateAivoiceThinkingImageAnimator(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AivoiceThinkingView::CreateAivoiceThinkingImageAnimator");
+        AiVoiceThinkingPathsArray = CreateImagePathsArray(AIVoiceThinkingImagePaths, AIVOICE_THINKING_IMAGE_ANIMATOR_VIEW_NUM_FRAMES);
+        if (AiVoiceThinkingPathsArray == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceThinkingView::AiVoiceThinkingPathsArray  is nullptr!!");
+            return false;
+        }
+
+        ImageAnimatorConfig imageanimatorconfig = {
+            .x = AIVOICE_THINKING_IMAGE_ANIMATOR_VIEW_X,
+            .y = AIVOICE_THINKING_IMAGE_ANIMATOR_VIEW_Y,
+            .width = AIVOICE_THINKING_IMAGE_ANIMATOR_VIEW_W,
+            .height = AIVOICE_THINKING_IMAGE_ANIMATOR_VIEW_H,
+            .imageInfoArray = AiVoiceThinkingImageInfo,
+            .pathsArray = AiVoiceThinkingPathsArray,
+            .numFrames = AIVOICE_THINKING_IMAGE_ANIMATOR_VIEW_NUM_FRAMES,
+            .delay = AIVOICE_THINKING_IMAGE_ANIMATOR_DELAY,
+        };
+        AiVoiceThinkingImageAnimatorView = AivoiceThinkingImageAnimatorInit(imageanimatorconfig);
+        if (AiVoiceThinkingImageAnimatorView == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AiVoiceThinkingImageAnimatorView::AiVoiceThinkingImageAnimatorView  new fail");
+            return false;
+        }
+
+        return true;
+    }
+
+    UIScrollView *AivoiceThinkingView::CreateAivoiceThinkingView(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AivoiceThinkingView::CreateAivoiceThinkingView");
+        if (scrollView == nullptr)
+        {
+            if (!CreateAivoiceThinkingScrollView() || !CreateAivoiceThinkingLabel() ||
+                !CreateAivoiceThinkingButton() || !CreateAivoiceThinkingImageAnimator())
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceThinkingView::CreateAivoiceThinkingView fail!!");
+                return nullptr;
+            }
+            scrollView->Add(title);
+            scrollView->Add(AiVoiceThinkingImageAnimatorView);
+            scrollView->Add(cancelThinkButton);
+            scrollView->Add(cancelThink);
+        }
+        return scrollView;
+    }
+}
\ No newline at end of file
index 5a2bb94..186a213 100644 (file)
@@ -5,12 +5,13 @@
 * Create: 2021-09-11\r
 */\r
 \r
-#include "AlarmPresenter.h"\r
-#include "MainAlarmView.h"\r
+#include "alarm/include/AlarmPresenter.h"\r
+#include "alarm/include/MainAlarmView.h"\r
 #include "ChangeSliceListener.h"\r
 #include "string"\r
 #include "iostream"\r
 #include "sstream"\r
+#include <custom_utils.h>\r
 \r
 namespace OHOS\r
 {\r
@@ -431,16 +432,15 @@ bool AlarmPresenter::ClickFuncView(UIView &view)
 \r
 bool AlarmPresenter::OnKeyAct(UIView &view, const KeyEvent &event)\r
 {\r
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AlarmPresenter::OnKeyAct");\r
-#if 0\r
-uint16 keyID = event.GetKeyId();\r
-// 如果是power键就返回上一级\r
-if (keyID == static_cast<uint16_t>(ZliteKeyCode::ZLITE_KEY_POWER))\r
-{\r
-    uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId();\r
-    NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST);\r
-}\r
-#endif\r
+    UNUSED(view);\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AlarmPresenter::OnKeyAct");\r
+    uint16_t keyID = event.GetKeyId();\r
+    uint16_t keyState = event.GetState();\r
+    // 如果是power键,且是亮屏状态,按键释放就返回上一级\r
+    if (keyID == static_cast<uint16_t>(ZliteKeyCode::ZLITE_KEY_POWER) && keyState == 0 && uapi_get_screen_state() == 0)\r
+    {\r
+        NativeAbility::GetInstance().Back(TransitionType::TRANSITION_BACK_TO_HEXAGONS);\r
+    }\r
     return true;\r
 }\r
 \r
index 9ead7f8..a6a0971 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: luozheng 1732036298@qq.com\r
  * @Date: 2024-02-19 10:39:11\r
  * @LastEditors: luozheng 1732036298@qq.com\r
- * @LastEditTime: 2024-06-20 18:02:46\r
+ * @LastEditTime: 2024-06-22 18:24:34\r
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/soundandvibration/src/SoundAndVibrationPresenter.cpp\r
  */\r
 \r
@@ -136,7 +136,7 @@ namespace OHOS
         {\r
             int VibrationMode = view_->GetVibrationModeView()->GetVibrationModePicker()->GetSelected();\r
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "VibrationMode = %d", VibrationMode);\r
-            VibationModeSet(VibrationMode);\r
+            // VibationModeSet(VibrationMode);\r
             SoundAndVibrationModel::GetInstance()->SetVibrationReminderToggleButtonStaus(VibrationMode);\r
             view_->ChangeView(VIBRATIONMODEVIEW, SOUNDANDVIBRATIONVIEW);\r
         }\r
index ffab351..1e10287 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: luozheng 1732036298@qq.com
  * @Date: 2024-06-12 11:44:04
  * @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-06-19 19:06:47
+ * @LastEditTime: 2024-06-25 17:58:27
  * @FilePath: /FD230/code/sdk/application/wearable/nativeapp/nativeui/uiservice/include/ui_service.h
  */
 /*
@@ -69,6 +69,7 @@ typedef enum {
     UI_UPDATE_SILENT_MODE,      //更新静音模式  
 
     UI_UPDATE_WEATHER_DATA,     //天气数据更新
+    UI_AI_RESPONSE_USERDATA,    //跳转到返回结果视图    
     MAX_NUM_HANDLER, 
 } UiServiceMsgId;
 
index 9684070..06b501c 100644 (file)
@@ -18,6 +18,7 @@
 #include <iostream>
 #include "displaybrightness/include/DisplayBrightnessModel.h"
 #include "soundandvibration/include/SoundAndVibrationModel.h"
+#include "aivoice/include/AiVoiceModel.h"
 #include "weather/include/WeatherModel.h"
 #include "uiservice/include/ui_service.h"
 #include "wearable_log.h"
@@ -101,6 +102,7 @@ static void HandleUpdateSystemVolume(Request *request);
 static void HandleUpdateCallVolume(Request *request);
 static void HandleUpdateVibrationMode(Request *request);
 static void HandleUpdateSilentMode(Request *request);
+static void HandleAiResponseUserData(Request *request);
 
 // 消息处理程序项数组(每个消息类型对应一个处理函数,函数名以 Handle 开头)
 MsgHandlerEntry msgHandlers[] = {
@@ -125,6 +127,7 @@ MsgHandlerEntry msgHandlers[] = {
     {UI_UPDATE_CALL_VOLUME, HandleUpdateCallVolume},
     {UI_UPDATE_VIBRATION_MODE, HandleUpdateVibrationMode},
     {UI_UPDATE_SILENT_MODE, HandleUpdateSilentMode},
+    {UI_AI_RESPONSE_USERDATA, HandleAiResponseUserData},
     };
 /* -------------------------------------------------------------------------- */
 static void ScreenTurnOn(Request *request)
@@ -497,6 +500,14 @@ void HandleUpdateSilentMode(Request *request)
     GraphicService::GetInstance()->PostGraphicEvent(
         std::bind(&OHOS::SoundAndVibrationModel::UpdateSilentModeSwitch, OHOS::SoundAndVibrationModel::GetInstance()));
 }
+
+//处理Ai回应的用户数据
+void HandleAiResponseUserData(Request *request)
+{
+    WEARABLE_LOGI(WEARABLE_LOG_MODULE_UI_SERVICE, "HandleAiResponseUserData");
+    GraphicService::GetInstance()->PostGraphicEvent(
+        std::bind(&OHOS::AiVoiceModel::ChangeToReturnResultTextView, &OHOS::AiVoiceModel::GetInstance()));
+}
 /* -------------------------------------------------------------------------- */
 #ifdef __cplusplus
 }
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIRecBlack.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIRecBlack.bin
deleted file mode 100644 (file)
index e73db6e..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:fd2acea8d7166abd98536687c9a59a37e66dcadf5dc0152bb6185e04ce9fa13d
-size 1560
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIRecGreen.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIRecGreen.bin
deleted file mode 100644 (file)
index c216e1b..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:96e2af6c30df028b9c9c0e032325f1e45d8b872aaffe8712215d3d2262ea9c0e
-size 1560
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIUnion.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIUnion.bin
deleted file mode 100644 (file)
index 4507f42..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:72c650a3bf3f61a231a466b92b72c75322b158da9bb966dd72d37619fb79830f
-size 408
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_1.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_1.bin
new file mode 100644 (file)
index 0000000..c13e18a
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:60f5f967ae239a0bc79113e86c21174c3cfee1ca1ec68f0eb810340a2817e4e7
+size 1144
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_10.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_10.bin
new file mode 100644 (file)
index 0000000..b3c0e17
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9025ed7a813dc9d52a53e4603b103f2642dd4a698cb92d09fa15574c0d471cb4
+size 1144
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_11.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_11.bin
new file mode 100644 (file)
index 0000000..9cff701
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:dab8b1368f70a87eb4b1c74e35b76ec0135f39c476d9b9f9065a1d21cf721a33
+size 1144
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_12.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_12.bin
new file mode 100644 (file)
index 0000000..1e21dad
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:55cc3ac3d4fc8d879b4b728d74fdd3c0a01000a7270c225f9150834db8b3d8b9
+size 1144
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_13.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_13.bin
new file mode 100644 (file)
index 0000000..288f91b
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d893daaceb55ab00827506ac94e85120baa96f9cc0234dee50309217b9317e81
+size 1144
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_14.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_14.bin
new file mode 100644 (file)
index 0000000..54896b9
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:63c2392c12f976943dfaeab521520c803e7d4ca497e6885d074b39d5fcb4f15e
+size 1144
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_15.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_15.bin
new file mode 100644 (file)
index 0000000..f44a57b
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:efd97a61466e116c8ef43a7dcef507ff331a08d5c4445aa8f1bf9ec8f87ef7ae
+size 1144
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_16.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_16.bin
new file mode 100644 (file)
index 0000000..9d2775a
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:eb9f31a34145a42bbdec1e349b5bcefa9d7f4411f09f5d19e7d6ac13cc8525a6
+size 1144
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_17.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_17.bin
new file mode 100644 (file)
index 0000000..cbd9a52
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d5e5934627dc73f80f3dbee84edeaab7963ec9e4d9bada606b24a03840542ad8
+size 1144
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_18.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_18.bin
new file mode 100644 (file)
index 0000000..f432cee
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cb8be16fae0dff99ec5ca21761d1dc6992fa19af92469664dab93cae6e4aee34
+size 1144
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_19.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_19.bin
new file mode 100644 (file)
index 0000000..08395ad
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:02b75c43a76f184ca9e0ecefcf50e24520d301185d2880e26c681a51ba31eead
+size 1144
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_2.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_2.bin
new file mode 100644 (file)
index 0000000..8a7f73f
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:54a003553b6edf8ece7202e3fa551a03a37bcd0dd88e84b2152a3ad3b6e549c6
+size 1144
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_20.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_20.bin
new file mode 100644 (file)
index 0000000..deba713
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:926e23232177b8b4a99a3bebaf850f7b1ac9ff2d444a60879e100ff598f303ca
+size 1144
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_3.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_3.bin
new file mode 100644 (file)
index 0000000..dc2c6bb
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f41f7f219f95d69bede446830a544aaecff2b28d9c4eaf39a0ca5fa5831ef0bf
+size 1144
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_4.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_4.bin
new file mode 100644 (file)
index 0000000..87a6a9f
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8af5a5f7ba0c1d6a5aaea08c0f082a574bcb96cc54312a6f96e4cfc762691091
+size 1144
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_5.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_5.bin
new file mode 100644 (file)
index 0000000..9be0839
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:34b6f38611695eb90ec6d2135a7000b27c94961b1c0042ca1cfc2891c7410f63
+size 1144
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_6.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_6.bin
new file mode 100644 (file)
index 0000000..ba9af53
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:544413cf24c02a5f6ac1aee8b153154b3e7988d56b54c831189d7edd1cc41a2a
+size 1144
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_7.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_7.bin
new file mode 100644 (file)
index 0000000..1f314b3
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c9c9c4f2ec1e1b074ebf2eb291233f97c6be30df7569e8478a71a14cd5b59c32
+size 1144
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_8.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_8.bin
new file mode 100644 (file)
index 0000000..1f4a16b
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:54d7039fc3f0e92eb97de9098a425e6f043dc48ba1e6f462bd6b979eb23b2038
+size 1144
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_9.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceListening/Ai_Listening_9.bin
new file mode 100644 (file)
index 0000000..03e7aef
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6e5bbe8140adda885479b6778c37e50ebe8c7be8366010e00953d440e2e2e8d1
+size 1144
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_1.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_1.bin
new file mode 100644 (file)
index 0000000..2bf8d75
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:14d6cf8fbeecf0a35111b830053fafd80a9fe66071728401edb479b551f2ab1d
+size 3016
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_10.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_10.bin
new file mode 100644 (file)
index 0000000..8533b7f
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c16d58ec48b67eb99240c7d2a1fd0b09770eaae011c05671d1b1b0916f6a192c
+size 3016
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_11.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_11.bin
new file mode 100644 (file)
index 0000000..659e4e7
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0323f667dda9690b8e48cc8da86359141314ba57f90e22cc427806efd48a9c99
+size 3016
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_12.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_12.bin
new file mode 100644 (file)
index 0000000..cef16fc
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1ba59661c2d6a939ac785a826c4e9747efb06bea84a31bc4916c432ae9d83562
+size 3016
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_13.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_13.bin
new file mode 100644 (file)
index 0000000..4fa503b
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6cb490686998507f00a6f980f9cdf33a80212eca547346c9924ef5d00ad3de4c
+size 3016
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_14.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_14.bin
new file mode 100644 (file)
index 0000000..f3b17da
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:754deb6d264a84f13aa655dd22b7f0030131a8738a3bed79affb0cd8911719ab
+size 3016
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_15.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_15.bin
new file mode 100644 (file)
index 0000000..64e44bb
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7b21c6bd275f47643a56426869837da73a62b34e845c32f9c92d2291a5e100a1
+size 3016
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_16.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_16.bin
new file mode 100644 (file)
index 0000000..f3e4a25
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:90767c9549c7ee8edfe1f7b17945a95bf077a93494d25c2edf660c8cc78a3ed5
+size 3016
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_17.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_17.bin
new file mode 100644 (file)
index 0000000..8b5a60f
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b11221e0574d0fe43ef8593a35e77c637a32c8735b3e8c50e7cea135ca194bfa
+size 3016
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_18.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_18.bin
new file mode 100644 (file)
index 0000000..6a514ee
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:32b655a351836a864879173503bdda4bd32452c0a458c0d836eac14e4526fecb
+size 3016
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_19.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_19.bin
new file mode 100644 (file)
index 0000000..c3ca09d
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:48d07db5bc8deb6f414cf2c9b76f9a8bd26f6d234a11a9e2761e7b89bec5977a
+size 3016
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_2.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_2.bin
new file mode 100644 (file)
index 0000000..e32fea2
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:34e6509cd43d584a3f2ef9f497172cceb0eda651ae2cfa1cc79bfe1296728454
+size 3016
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_20.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_20.bin
new file mode 100644 (file)
index 0000000..4f24cf1
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7a4b04745f294852ad6cf4703337d0954e907a50d40791c92d625b4c7e61e63c
+size 3016
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_21.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_21.bin
new file mode 100644 (file)
index 0000000..a576d74
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fe38cdc0d9a082493d9e19356445e70366b7bc4a45ff0a9225a69c79b8df6b38
+size 3016
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_22.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_22.bin
new file mode 100644 (file)
index 0000000..ca79640
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f841f40e39a2904faa47546a52f341795af77045c2684aaffa9d27c3056cdfeb
+size 3016
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_23.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_23.bin
new file mode 100644 (file)
index 0000000..264906b
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ac652e98736a69e8f92a540ee662d4ee83f5947f7074fc0df73cf0035acd680f
+size 3016
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_24.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_24.bin
new file mode 100644 (file)
index 0000000..f10b146
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9b7e555f1f737288f8237f2e7c5ab97a6db31981b8318d80d0571652ca37aa4d
+size 3016
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_25.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_25.bin
new file mode 100644 (file)
index 0000000..6f36c26
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f3a739d70dd7013e1147cb878cb831e449f6f19dff84fd51e4c8c9fba4e229ed
+size 3016
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_26.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_26.bin
new file mode 100644 (file)
index 0000000..3fe3ae3
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6cf1933121ac6f854840240e46e260f773c8139bc61007b835e15ceedbb734cc
+size 3016
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_27.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_27.bin
new file mode 100644 (file)
index 0000000..9e30635
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1f474fa8a88687f9876d6d01d2c052c3c2c436b737461789247063ef209ae41b
+size 3016
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_28.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_28.bin
new file mode 100644 (file)
index 0000000..6c58809
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:54131df27e631a54c5063a9d86f8bdfce3d902bf955c1a5fac1a283f18a4330c
+size 3016
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_29.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_29.bin
new file mode 100644 (file)
index 0000000..b084969
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:01be5f743eabacdf5b175154bd7d6d9c42f9bf2cb7da8cccf9f98c318371fc77
+size 3016
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_3.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_3.bin
new file mode 100644 (file)
index 0000000..207414e
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4001d19087061e82e3ca0f45ba29ec14d576ee531a30a9e2f8aacb94dba67bec
+size 3016
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_4.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_4.bin
new file mode 100644 (file)
index 0000000..c2254e4
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fc656d102a75ffd3d4698cf516ec5b2a1e827d8c9270b1a2275c86acbb0ed917
+size 3016
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_5.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_5.bin
new file mode 100644 (file)
index 0000000..cd063e9
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:712650a3e3ce3f5cfe325282c6813e3aef81a90fd69605883746de02f63e4f04
+size 3016
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_6.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_6.bin
new file mode 100644 (file)
index 0000000..3debc23
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ebcbb6581eaff40f7bcd72c14c204631a8c3f3b9fe9cbbe31d0ba53bc8f8cf96
+size 3016
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_7.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_7.bin
new file mode 100644 (file)
index 0000000..5021c2e
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:dbf660b9e8a0ea265285d16a9f69d42b8adf3a4477c047e44439955d843575a1
+size 3016
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_8.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_8.bin
new file mode 100644 (file)
index 0000000..6af504a
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b145b87dd060cfdf7c470a1fa2b23f4486aa2ac294d9d6da3f60d3f4344d4d53
+size 3016
diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_9.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/AIVoice/AIVoiceThinking/Ai_Thinking_9.bin
new file mode 100644 (file)
index 0000000..1588fa0
--- /dev/null
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a73320662cc00b7ea0065e43e80e05c6104a428baf0455791a6ad4316cbc5da8
+size 3016
index bac5621..6dfe4ba 100644 (file)
@@ -1047,6 +1047,7 @@ namespace OHOS
     {
         uapi_dev_runtime_set_vibmod(state);
         set_condigData_Int(CONFIGMODEL_ITEM_VIBRATOR_SWITCH,state);
+        uapi_vibrationModeSet(state);
     }
 
     /*获取震动模式强度*/