修复退出对话表情恢复逻辑
authorxue <2144439972@qq.com>
Mon, 8 Dec 2025 03:35:51 +0000 (11:35 +0800)
committerxue <2144439972@qq.com>
Mon, 8 Dec 2025 03:35:51 +0000 (11:35 +0800)
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdPresenter.cpp

index d5a6c6b..d0f54cb 100644 (file)
@@ -468,8 +468,9 @@ extern "C" {
             AI_ForceInterrupt();
             ln_ws_send_voice_chat_interrupt("进入OTA");
             do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_DEINIT, NULL, 0);
-            if(bind_status == false)//处于解绑状态
-            return;
+            //未绑定状态,也可以进入OTA
+            // if(bind_status == false)//处于解绑状态
+            // return;
             NativeAbility::GetInstance().ChangeSlice(VIEW_OTA);
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "进入OTA");
         }
@@ -3160,7 +3161,7 @@ extern "C" {
             return;
         }
         // 记录进入对话模式前的时间线表情(用于退出时恢复)
-        m_dialogueExpression = m_currentExpression;
+        m_dialogueExpression = "winking";
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::OnEnterDialogueMode: 记录时间线表情: %s", m_currentExpression.c_str());
         
         // 应用音量(如果在STATUS_SHOW界面调节过音量,此时应用)
@@ -3190,6 +3191,7 @@ extern "C" {
     // 退出对话模式时恢复表情
     void ThunderBirdModel::OnExitDialogueMode()
     {
+        // 隐藏小绿点
         if (ThunderBirdMainView::GetInstance() && ThunderBirdMainView::GetInstance()->listenIcon) {
             ThunderBirdMainView::GetInstance()->listenIcon->SetVisible(false);
         }
@@ -3204,7 +3206,6 @@ extern "C" {
             {
                 return;
             }
-            m_dialogueExpression = m_currentExpression;
             // 恢复表情状态
             // 构建表情文件路径并切换表情
             std::string expressionPath;
@@ -3213,26 +3214,26 @@ extern "C" {
                 if (eyesColor_.empty() || eyesShape_.empty() || 
                     (eyesShape_ == "calm-eyes" && eyesColor_ == "amber")) {
                     // 默认表情
-                    std::string emotionFileName = MapEmotionToFileName(m_dialogueExpression.c_str());
+                    std::string emotionFileName = MapEmotionToFileName(m_currentExpression.c_str());
                     expressionPath = "/user/res/video/Default/" + emotionFileName + ".mp4";
                 } else {
                     // 非默认表情
-                    if (m_dialogueExpression == "winking") {
+                    if (m_currentExpression == "winking") {
                         // 眨眼表情
                         expressionPath = "/user/res/video/CloseEyes/" + eyesShape_ + "/" + eyesColor_ + ".mp4";
-                    } else if (m_dialogueExpression == "sleeping") {
+                    } else if (m_currentExpression == "sleeping") {
                         // 睡眠表情
                         expressionPath = "/user/res/video/Default/sleeping.mp4";
                     } else {
                         // 其他表情
-                        expressionPath = "/user/userdata/leiniao/emoji/" + eyesShape_ + "/" + eyesColor_ + "/" + m_dialogueExpression + ".mp4";
+                        expressionPath = "/user/userdata/leiniao/emoji/" + eyesShape_ + "/" + eyesColor_ + "/" + m_currentExpression + ".mp4";
                     }
                 }
                 
                 // 检查文件是否存在并切换表情
                 if (access(expressionPath.c_str(), F_OK) == 0) {
                     SwitchExpressionVideo(expressionPath.c_str());
-                    HandleHairIconChange(m_dialogueExpression);
+                    HandleHairIconChange(m_currentExpression);
                     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::OnExitDialogueMode: 恢复表情成功: %s", expressionPath.c_str());
                 } else {
                     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::OnExitDialogueMode: 表情文件不存在: %s", expressionPath.c_str());
@@ -3246,13 +3247,12 @@ extern "C" {
     // 进入哄睡模式时记录当前表情(进入THUNDERBIRD_LULLABYVIEW_4时调用)
     void ThunderBirdModel::OnEnterLullabyMode()
     {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::OnEnterLullabyMode");
         //如果本来就是眨眼的表情直接返回
         if (m_currentExpression == "winking" || m_currentExpression.empty() == true) {
             return;
         }
         // 记录进入哄睡模式前的时间线表情(用于退出时恢复)
-        m_lullabyExpression = m_currentExpression;
+        m_lullabyExpression = "winking";
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::OnEnterLullabyMode: 记录时间线表情: %s", m_currentExpression.c_str());
         
         // 应用音量(如果在STATUS_SHOW界面调节过音量,此时应用)
@@ -3281,9 +3281,11 @@ extern "C" {
     
     // 退出哄睡模式时恢复表情(退出THUNDERBIRD_LULLABYVIEW_4时调用)
     void ThunderBirdModel::OnExitLullabyMode()
-    {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::OnExitLullabyMode");
-        
+    {   
+        // 隐藏小绿点
+        if (ThunderBirdMainView::GetInstance() && ThunderBirdMainView::GetInstance()->listenIcon) {
+            ThunderBirdMainView::GetInstance()->listenIcon->SetVisible(false);
+        }
         // 恢复到进入哄睡模式前记录的时间线表情
         if (!m_lullabyExpression.empty()) {
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::OnExitLullabyMode: 恢复时间线表情: %s", m_lullabyExpression.c_str());
@@ -3300,27 +3302,26 @@ extern "C" {
                 if (eyesColor_.empty() || eyesShape_.empty() || 
                     (eyesShape_ == "calm-eyes" && eyesColor_ == "amber")) {
                     // 默认表情
-                    std::string emotionFileName = MapEmotionToFileName(m_lullabyExpression.c_str());
+                    std::string emotionFileName = MapEmotionToFileName(m_currentExpression.c_str());
                     expressionPath = "/user/res/video/Default/" + emotionFileName + ".mp4";
                 } else {
                     // 非默认表情
-                    if (m_lullabyExpression == "winking") {
+                    if (m_currentExpression == "winking") {
                         // 眨眼表情
                         expressionPath = "/user/res/video/CloseEyes/" + eyesShape_ + "/" + eyesColor_ + ".mp4";
-                    } else if (m_lullabyExpression == "sleeping") {
+                    } else if (m_currentExpression == "sleeping") {
                         // 睡眠表情
                         expressionPath = "/user/res/video/Default/sleeping.mp4";
                     } else {
                         // 其他表情
-                        expressionPath = "/user/userdata/leiniao/emoji/" + eyesShape_ + "/" + eyesColor_ + "/" + m_lullabyExpression + ".mp4";
+                        expressionPath = "/user/userdata/leiniao/emoji/" + eyesShape_ + "/" + eyesColor_ + "/" + m_currentExpression + ".mp4";
                     }
                 }
                 
                 // 检查文件是否存在并切换表情
                 if (access(expressionPath.c_str(), F_OK) == 0) {
                     SwitchExpressionVideo(expressionPath.c_str());
-                    HandleHairIconChange(m_lullabyExpression);
-                    SetCurrentExpression(m_lullabyExpression);
+                    HandleHairIconChange(m_currentExpression);
                     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::OnExitLullabyMode: 恢复表情成功: %s", expressionPath.c_str());
                 } else {
                     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::OnExitLullabyMode: 表情文件不存在: %s", expressionPath.c_str());
@@ -3556,7 +3557,7 @@ extern "C" {
       {
           WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测到夜间更新已启用,切换到OTA slice");
           AI_ForceInterrupt();
-          ln_ws_send_voice_chat_interrupt("切换slice");
+          ln_ws_send_voice_chat_interrupt("进入OTA");
           NativeAbility::GetInstance().ChangeSlice(VIEW_OTA);
       }
    }
index 257cefe..1f730a3 100644 (file)
@@ -270,7 +270,7 @@ namespace OHOS
             powerKeyPressed = false; // 重置标志位
             // 退出对话模式时恢复表情
             AI_ForceInterrupt();
-            ln_ws_send_voice_chat_interrupt("退出哄睡");
+            ln_ws_send_voice_chat_interrupt("关机");
             do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_DEINIT, NULL, 0);
             NativeAbility::GetInstance().SwitchSlice(VIEW_REBOOT);
             return true;