修复屏保模式下不作为对话图片时进退哄睡会消失的bug
authorxue <2144439972@qq.com>
Tue, 30 Dec 2025 10:08:05 +0000 (18:08 +0800)
committerxue <2144439972@qq.com>
Tue, 30 Dec 2025 10:08:05 +0000 (18:08 +0800)
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp

index a38bf20..ef602c8 100644 (file)
@@ -2843,6 +2843,27 @@ extern "C" {
                 ln_ws_end_audio_chat();//结束对话
                 // g_sleep_mode_active = true;
                 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleSleepModeStart: 睡眠模式已开始");
+                
+                // 当为屏保模式且不作为对话表情时(ReadlocalScreenImage() == 1),触发意图识别的底图需要为屏保不为1.bin
+                int screenImageMode = ReadlocalScreenImage();
+                if (screenImageMode == 1) {
+                    // 有屏保但不是作为对话表情,确保底图为屏保图片
+                    ThunderBirdMainView* mainView = ThunderBirdMainView::GetInstance();
+                    if (mainView != nullptr) {
+                        // 如果屏保模式未开启,先开启屏保模式
+                        if (!mainView->GetIsOpenScreenImageModel()) {
+                            mainView->OpenScreenImageModel();
+                            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleSleepModeStart: 意图识别结果,开启屏保模式(ReadlocalScreenImage==1)");
+                        } else {
+                            // 屏保模式已开启,但需要确保底图是屏保图片而不是1.bin
+                            if (access(LN_DEVICE_SCREEN_IMAGE_FILE, F_OK) == 0) {
+                                mainView->SwitchIconImage(LN_DEVICE_SCREEN_IMAGE_FILE);
+                                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleSleepModeStart: 意图识别结果,确保底图为屏保图片: %s", LN_DEVICE_SCREEN_IMAGE_FILE);
+                            }
+                        }
+                    }
+                }
+                
                 ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_LULLABYVIEW, ThunderBirdLullabyView::THUNDERBIRD_LULLABYVIEW_2);
            }
         } else {
@@ -3612,12 +3633,40 @@ extern "C" {
             int screenImageMode = ReadlocalScreenImage();
             if (screenImageMode == 1) {
                 // 有屏保但不是作为对话表情,恢复屏保
-                if (mainView != nullptr && !mainView->GetIsOpenScreenImageModel()) {
-                    mainView->OpenScreenImageModel();
-                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::OnExitLullabyMode: 恢复屏保模式(ReadlocalScreenImage==1)");
+                if (mainView != nullptr) {
+                    if (!mainView->GetIsOpenScreenImageModel()) {
+                        mainView->OpenScreenImageModel();
+                        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::OnExitLullabyMode: 恢复屏保模式(ReadlocalScreenImage==1)");
+                    } else {
+                        // 屏保模式已开启,但需要确保底图是屏保图片而不是1.bin
+                        if (access(LN_DEVICE_SCREEN_IMAGE_FILE, F_OK) == 0) {
+                            mainView->SwitchIconImage(LN_DEVICE_SCREEN_IMAGE_FILE);
+                            if (mainView->iconView != nullptr) {
+                                mainView->iconView->SetVisible(true);
+                            }
+                            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::OnExitLullabyMode: 确保底图为屏保图片: %s", LN_DEVICE_SCREEN_IMAGE_FILE);
+                        }
+                    }
                 }
             }
             m_screenImageClosedForLullaby = false;
+        } else {
+            // 即使没有关闭屏保标志,也需要检查并确保屏保正确显示
+            int screenImageMode = ReadlocalScreenImage();
+            if (screenImageMode == 1 && mainView != nullptr) {
+                // 有屏保但不是作为对话表情,确保屏保正确显示
+                if (!mainView->GetIsOpenScreenImageModel()) {
+                    mainView->OpenScreenImageModel();
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::OnExitLullabyMode: 退出哄睡时恢复屏保模式(ReadlocalScreenImage==1)");
+                } else if (access(LN_DEVICE_SCREEN_IMAGE_FILE, F_OK) == 0) {
+                    // 屏保模式已开启,确保底图是屏保图片
+                    mainView->SwitchIconImage(LN_DEVICE_SCREEN_IMAGE_FILE);
+                    if (mainView->iconView != nullptr) {
+                        mainView->iconView->SetVisible(true);
+                    }
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::OnExitLullabyMode: 退出哄睡时确保底图为屏保图片: %s", LN_DEVICE_SCREEN_IMAGE_FILE);
+                }
+            }
         }
         
         // 不在这里切换表情,标志位保持为1,在发呆中界面时获取时间线表情