增加开机未联网进入对话提醒
authorxue <2144439972@qq.com>
Wed, 19 Nov 2025 12:08:09 +0000 (20:08 +0800)
committerxue <2144439972@qq.com>
Wed, 19 Nov 2025 12:08:09 +0000 (20:08 +0800)
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/include/ThunderBirdReminderView.h
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdPresenter.cpp
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdReminderView.cpp

index f7cce2e..8a657a5 100644 (file)
@@ -30,8 +30,10 @@ namespace OHOS
         void UpdateTaskReminderText(const char* text);
         void UpdateTaskReminderIcon(const char* icon);
 
+
+
         void IsIcon(bool flag);
-        
+        void dialogue_unnetwork();
         enum : int16_t {
             THUNDERBIRD_REMINDERVIEW_VOLUME = 0,      // 音量调节
             THUNDERBIRD_REMINDERVIEW_TASK_REMINDER,   // 事项提醒
index b073217..79ed211 100644 (file)
                     {
                         ota_update_boot();
                     }   
+                    ThunderBirdMainView *view = ThunderBirdMainView::GetInstance();
+                    if (view) {
+                        int16_t currentView = view->GetCurrentView();
+                        int16_t currentSubView = view->GetCurrentSubView();
+                        
+                        // 检查是否在对话界面
+                        if (currentView == THUNDERBIRD_DIALOGUEVIEW && (currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_LISTENING || currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_SPEAKING)) {
+                            // 检查是否是在对话模式进入时因为WebSocket未连接而显示的提醒
+                            ThunderBirdPresenter *presenter = ThunderBirdPresenter::GetInstance();
+                            if (presenter && presenter->isDialogueing) {
+                                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[定时器] WebSocket连接成功,隐藏网络断开提醒,进入对话模式");
+                                // 隐藏提醒界面
+                                if(ThunderBirdReminderView::GetInstance())
+                                {
+                                    ThunderBirdReminderView::GetInstance()->HideAll();
+                                }
+                                // 如果在对话界面,初始化音频
+                                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[定时器] WebSocket连接成功,在对话界面,初始化音频");
+                                do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_INIT, NULL, 0);
+                            }
+                        }
+                    }
 
                     #if JUHEPINGTAI
                     uapi_init_all_websocket_servers();
                     #endif
                     init_falg = true;
                 }
+               
             }
         }
         
         //     }
         // }
         
+        
+        
         // 处理计数定时器
         if (m_countUpActive) {
             if (m_countUpValue >= m_countUpTarget) {
                 ThunderBirdMainView::SetTimelineReceived(false);
                 WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Network disconnected, reset timeline received flag");
             }
+            
         }
         
         // 记录网络状态更新日志
             currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_SPEAKING &&
             m_dialogueModeFinished)
         {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleAudioPlaybackEnd: 对话模式finished且音频播放结束,结束对话");
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleAudioPlaybackEnd: 对话模式finished且音频播放结束");
             // 重置标志
             m_dialogueModeFinished = false;
-            // 结束对话
-             
-            //切换到聆听界面
-            ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_LISTENING);
-
-            // ThunderBirdDialogueView::GetInstance()->AudioPlaybackEnd();
-            // //增加30秒定时器
-            // ThunderBirdModel::GetInstance()->StartCountUpTimer(120);
-
-
-            // ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW);
-            // ln_ws_end_audio_chat();//结束对话
-            // // 退出对话模式时恢复表情
-            // AI_ForceInterrupt();
-            // ln_ws_send_voice_chat_interrupt("退出对话");
-            // do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_DEINIT, NULL, 0);
-            // ThunderBirdPresenter::GetInstance()->SetDialogueing(false);
-            // ScreenAlwaysOnCtr(CANCEL_SCREEN_ALWAYS_ON); // 关闭屏幕常亮
-            // ThunderBirdModel::GetInstance()->HighFrequence();//恢复视频帧率
-            // ThunderBirdModel::GetInstance()->OnExitDialogueMode();
+            // 停止动效
+            ThunderBirdDialogueView::GetInstance()->AudioPlaybackEnd();
+            // 启动8秒定时器,时间到就退出对话
+            StartCountUpTimer(8);
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleAudioPlaybackEnd: 启动8秒定时器,时间到就退出对话");
             return;
         }
         
index ea2e408..943f576 100644 (file)
@@ -317,11 +317,18 @@ namespace OHOS
         if (keyState == InputDevice::STATE_PRESS && screenState == 0 ) {
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HandleFuncKey: KEY_TYPE_FUNC press");
             
-            // 在非对话模式下按下FUNC键时,预先初始化音频
+            // 在非对话模式下按下FUNC键时,预先初始化音频(需要WebSocket已连接)
             if (!isDialogueing && ((currentView == THUNDERBIRD_DIALOGUEVIEW && currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW) 
             || (currentView == THUNDERBIRD_GUIDEVIEW))) {
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "非对话模式下FUNC键按下,预先初始化音频");
-                do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_INIT, NULL, 0);
+                // 检查WebSocket连接状态
+                int wsState = ln_ws_get_connection_state();
+                bool wsConnected = (wsState == 2); // WS_STATE_CONNECTED = 2
+                if (wsConnected) {
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "非对话模式下FUNC键按下,WebSocket已连接,预先初始化音频");
+                    do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_INIT, NULL, 0);
+                } else {
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "非对话模式下FUNC键按下,WebSocket未连接,不预初始化音频 (wsState=%d)", wsState);
+                }
             }
             
             if(currentView == THUNDERBIRD_LULLABYVIEW && currentSubView == ThunderBirdLullabyView::THUNDERBIRD_LULLABYVIEW_3)
@@ -788,6 +795,24 @@ namespace OHOS
             {
                 ThunderBirdModel::GetInstance()->LowFrequence();//减低视频帧率
                 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "进入对话模式");
+                
+                // 检查WebSocket连接状态
+                int wsState = ln_ws_get_connection_state();
+                bool wsConnected = (wsState == 2); // WS_STATE_CONNECTED = 2
+                
+                if (!wsConnected) {
+                    // WebSocket未连接,显示网络断开提醒界面,不设置定时器
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "进入对话模式时WebSocket未连接,显示网络断开提醒 (wsState=%d)", wsState);
+                    // 设置标志,表示用户想要进入对话模式但因为WebSocket未连接而显示提醒
+                    isDialogueing = true; // 设置标志,这样WebSocket连接成功时知道要进入对话模式
+                    ThunderBirdMainView::GetInstance()->ChangeThunderBirdReminderView(THUNDERBIRD_REMINDERVIEW);
+                    ThunderBirdReminderView *reminderView = ThunderBirdReminderView::GetInstance();
+                    if (reminderView) {
+                        reminderView->Show(ThunderBirdReminderView::THUNDERBIRD_REMINDERVIEW_NETWORK_DISCONNECT);
+                        reminderView->dialogue_unnetwork();
+                    }
+                }
+                
                 ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_LISTENING);
                 if(currentView == THUNDERBIRD_GUIDEVIEW)
                 {
@@ -836,6 +861,10 @@ namespace OHOS
                     ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_GUIDEVIEW, ThunderBirdGuideView::THUNDERBIRD_GUIDEVIEW_5);
                 } else {
                     ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_STATUS_SHOW);
+                }
+                if(ThunderBirdReminderView::GetInstance())
+                {
+                    ThunderBirdReminderView::GetInstance()->HideAll();
                 }
                  ThunderBirdModel::GetInstance()->HighFrequence();//恢复视频帧率
                  ThunderBirdModel::GetInstance()->OnExitDialogueMode();
@@ -862,5 +891,4 @@ namespace OHOS
         }
     }
 
-}
-
+}
\ No newline at end of file
index 525f939..94a1887 100644 (file)
@@ -498,6 +498,20 @@ namespace OHOS
             RemindIcon->SetVisible(false);
         }
     }
+    void ThunderBirdReminderView::dialogue_unnetwork()
+    {
+        if (RemindButton)
+        {
+            RemindButton->SetPosition(85, 114, 210, 59);
+            RemindButton->SetText("等待网络连接");
+        }
+        if (RemindIcon)
+            {
+                RemindIcon->SetPosition(105, 120, 47, 47);
+                RemindIcon->SetSrc("/user/res/no_network.bin");
+                RemindIcon->SetVisible(true);
+            }
+    }
 
 }