增加对话长按操作
authorxue <2144439972@qq.com>
Sun, 28 Sep 2025 09:58:43 +0000 (17:58 +0800)
committerxue <2144439972@qq.com>
Sun, 28 Sep 2025 09:58:43 +0000 (17:58 +0800)
code/sdk/application/wearable/ln/nativeapp/nativeui/ota/src/OtaUpdatingView.cpp
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/include/ThunderBirdPresenter.h
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdMainView.cpp
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdPresenter.cpp

index 442e237..8141469 100644 (file)
@@ -84,17 +84,6 @@ namespace OHOS
             group->Add(LittleTextLabel);
         }
 
-        // 创建提示标签
-        RemindLabel = new UILabelExt();
-        if (RemindLabel) {
-            RemindLabel->SetPosition(170, 246, 150, 22);
-            RemindLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
-            RemindLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 18);
-            RemindLabel->SetStyle(STYLE_TEXT_COLOR, 0xffcccccc);
-            RemindLabel->SetText("更新还需5分钟");
-            RemindLabel->SetVisible(true);
-            group->Add(RemindLabel);
-        }
         return group;
     }
        
index 338fd34..a1844de 100644 (file)
@@ -35,13 +35,18 @@ namespace OHOS
         void PublishEvent(uint16_t topic, uint8_t *data = nullptr, uint32_t size = 0);
 
         void timer_callback_toui_proc();
+        bool isDialogueing{true};//是否进入对话模式
 
+         // FUNC键长按功能
+         void RegisterFuncKeyLongPressEvent(void);
+         void HandleFuncKeyLongPress(void);
+         
     private:
         bool OnKeyAct(UIView &view, const KeyEvent &event) override; // 增加按键事件
         bool X_DRAG_FLAG{false};
 
         bool isLullabyRecording{false};
-        bool isDialogueing{false};//是否进入对话模式
+        
         
         // 按键处理函数
         bool HandlePowerKey(uint16_t keyState, int16_t currentView, int16_t currentSubView, int screenState);
@@ -67,6 +72,8 @@ namespace OHOS
         bool HandleReminderViewNavigation(int16_t currentSubView, KeyType keyType);
         bool HandleAdjustViewNavigation(int16_t currentSubView, KeyType keyType);
         bool CheckOtaConditionsAndProceed();
+        
+       
     };
 }
 
index 552090b..081d2a8 100644 (file)
@@ -296,8 +296,8 @@ namespace OHOS
              }
              else if(ThunderBirdModel::GetInstance()->StartBootOperation() == 1)
              {
-                   // ChangeView(MAXVIEW, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_SPEAKING);
-                   ChangeView(MAXVIEW, THUNDERBIRD_LULLABYVIEW, ThunderBirdLullabyView::THUNDERBIRD_LULLABYVIEW_4);
+                    ChangeView(MAXVIEW, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW);
+                   //ChangeView(MAXVIEW, THUNDERBIRD_LULLABYVIEW, ThunderBirdLullabyView::THUNDERBIRD_LULLABYVIEW_4);
              }
 
             ScrollView_->Add(InitBaseData()); // 最上面状态栏
index ca2d870..f809fab 100644 (file)
 #include "service_id_define.h"
 #include "dock/input_device.h"
 #include "custom_runtime.h"
-#include "input_app.h"
 #include "wearable_log.h"
-
- #include "ln_api.h"
+#include "graphic_service.h"
+#include "ln_api.h"
 #include "power_display_service.h"
+#ifdef __cplusplus
+    extern "C"
+    {
+#endif
 
+#include "input_app.h"
+#ifdef __cplusplus
+    }
+#endif
 #ifdef CUSTOM_UTILS
 #include "custom_utils.h"
 #endif
 namespace OHOS
 {
+    // 静态回调函数声明
+    static void HandleFuncKeyLongPressCallBack(void);
 
     REGIST_SLICE(VIEW_THUNDER_BIRD, ThunderBirdMainView, ThunderBirdPresenter);
 
@@ -84,6 +93,17 @@ namespace OHOS
         
         // 注册 VENDOR_DOWN 长按5秒事件
         // uapi_button_register_event_cb(func_button_callback_vendor_down_long_press_5s, BUTTON3_LONGPRESS_5S);
+        
+        // 注册 FUNC 键长按2秒事件
+        int32_t ret = uapi_button_register_event_cb(HandleFuncKeyLongPressCallBack, BUTTON1_LONGPRESS_2S);
+        if (ret != ERRCODE_SUCC)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Register FuncKey LongPress Event error, ret = %d", ret);
+        }
+        else
+        {
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Register FuncKey LongPress Event success");
+        }
     }
     
 
@@ -230,23 +250,25 @@ namespace OHOS
     bool ThunderBirdPresenter::HandleFuncKey(uint16_t keyState, int16_t currentView, int16_t currentSubView, int screenState)
     {
         // 长按FUNC键:开启对话模式切换
-        if (keyState == InputDevice::STATE_LONG_PRESS && screenState == 0) {
-            //NativeAbility::GetInstance().SwitchSlice(VIEW_LCD_TEST);
-            if(currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW)
-            {
-                ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_LISTENING);
-                isDialogueing = true;
-            }
-            else
-            {
-                ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW);
-                isDialogueing = false;
-            }
-            return true;
-        }
+        // if (keyState == InputDevice::STATE_LONG_PRESS && screenState == 0) {
+        //     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HandleFuncKey: KEY_TYPE_FUNC long press");
+        //     //NativeAbility::GetInstance().SwitchSlice(VIEW_LCD_TEST);
+        //     if(currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW)
+        //     {
+        //         ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_LISTENING);
+        //         isDialogueing = true;
+        //     }
+        //     else
+        //     {
+        //         ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW);
+        //         isDialogueing = false;
+        //     }
+        //     return true;
+        // }
         
         // 短按FUNC键(息屏状态下)
         if (keyState == InputDevice::STATE_PRESS && screenState == 0 ) {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HandleFuncKey: KEY_TYPE_FUNC press");
             if(currentView == THUNDERBIRD_LULLABYVIEW && currentSubView == ThunderBirdLullabyView::THUNDERBIRD_LULLABYVIEW_3)
             {
                 HandleLullabyFunction(currentView, currentSubView);              
@@ -335,23 +357,20 @@ namespace OHOS
      */
     void ThunderBirdPresenter::HandleDialogueFunction(int16_t currentView, int16_t currentSubView)
     {
-        bool flag = ThunderBirdModel::GetInstance()->Get_is_all_services_ready();
-        if(flag == false)
-        {
-            return;
-        }
+        //bool flag = ThunderBirdModel::GetInstance()->Get_is_all_services_ready();
+        // if(flag == false)
+        // {
+        //     return;
+        // }
 
         if (currentView == THUNDERBIRD_DIALOGUEVIEW && currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_LISTENING) {
             // 停止录音并发送
-            // ThunderBirdModel::GetInstance()->StopRecording();
             ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_SPEAKING);
-            // ThunderBirdModel::GetInstance()->SendRecording();
-            uapi_stop_AI_asr();
+            ln_ws_end_audio_chat();
         } else {
             // 开始录音
             ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_LISTENING);
-            // ThunderBirdModel::GetInstance()->StartRecording();
-            uapi_start_AI_asr();
+            ln_ws_start_audio_chat(LN_AUDIO_CHAT_VOICE_CHAT_REQUEST);
         }
     }
 
@@ -508,7 +527,7 @@ namespace OHOS
                 ThunderBirdMainView::GetInstance()->ChangeView(THUNDERBIRD_LULLABYVIEW, THUNDERBIRD_LULLABYVIEW, ThunderBirdLullabyView::THUNDERBIRD_LULLABYVIEW_3);
                 break;
             case ThunderBirdLullabyView::THUNDERBIRD_LULLABYVIEW_3:
-                do_ln_http_server_send_data(LN_HTTP_SERVICE_CMD_STORY_RANDOM, NULL, 0);//随机故事
+                //do_ln_http_server_send_data(LN_HTTP_SERVICE_CMD_STORY_RANDOM, NULL, 0);//随机故事
                 ThunderBirdMainView::GetInstance()->ChangeView(THUNDERBIRD_LULLABYVIEW, THUNDERBIRD_LULLABYVIEW, ThunderBirdLullabyView::THUNDERBIRD_LULLABYVIEW_4);
                 break;
             case ThunderBirdLullabyView::THUNDERBIRD_LULLABYVIEW_4:
@@ -516,7 +535,7 @@ namespace OHOS
                 break;
             case ThunderBirdLullabyView::THUNDERBIRD_LULLABYVIEW_5:
                 do_ln_http_server_send_data(LN_HTTP_SERVICE_CMD_STORY_FINISH, NULL, 0);//确认结束哄睡
-                ThunderBirdMainView::GetInstance()->ChangeView(THUNDERBIRD_LULLABYVIEW, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_SPEAKING);
+                ThunderBirdMainView::GetInstance()->ChangeView(THUNDERBIRD_LULLABYVIEW, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW);
                 break;
         }
         }
@@ -596,5 +615,38 @@ namespace OHOS
         ThunderBirdModel::GetInstance()->SetQrcodeChecked(true);
     }
 
+    // ==================== FUNC键长按功能 ====================
+
+    static void HandleFuncKeyLongPressCallBack(void)
+    {
+        if (ThunderBirdPresenter::GetInstance()) {
+            ThunderBirdPresenter::GetInstance()->HandleFuncKeyLongPress();
+        }
+    }
+    /**
+     * @brief 处理FUNC键长按事件
+     */
+    void ThunderBirdPresenter::HandleFuncKeyLongPress(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThunderBirdPresenter::HandleFuncKeyLongPress - FUNC key long press detected");
+        // 长按FUNC键2秒的处理逻辑
+        // 触发对话模式切换
+        if (ThunderBirdMainView::GetInstance()) {
+            int16_t currentView = ThunderBirdMainView::GetInstance()->GetCurrentView();
+            int16_t currentSubView = ThunderBirdMainView::GetInstance()->GetCurrentSubView();
+            
+            if(currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW)
+            {
+                ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_LISTENING);
+                isDialogueing = true;
+            }
+            else
+            {
+                ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW);
+                isDialogueing = false;
+            }
+        }
+    }
+
 }