From 1f77a2cb7f683b1bfe970340978cbd1632e2b40c Mon Sep 17 00:00:00 2001 From: xue <2144439972@qq.com> Date: Thu, 22 Jan 2026 09:52:19 +0800 Subject: [PATCH] =?utf8?q?=E4=BF=AE=E5=A4=8D=E8=AE=BE=E5=A4=87=E8=A7=A3?= =?utf8?q?=E7=BB=91=E5=B7=B2=E7=BB=8F=E8=A7=A3=E7=BB=91=E4=BD=86=E6=98=AF?= =?utf8?q?=E4=B8=8D=E9=87=8D=E5=90=AF=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../thunderbird/include/ThunderBirdModel.h | 6 + .../thunderbird/src/ThunderBirdModel.cpp | 111 +++++++++++++++--- 2 files changed, 100 insertions(+), 17 deletions(-) diff --git a/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/include/ThunderBirdModel.h b/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/include/ThunderBirdModel.h index 0bb0f00c6..4d181f929 100644 --- a/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/include/ThunderBirdModel.h +++ b/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/include/ThunderBirdModel.h @@ -40,6 +40,8 @@ namespace OHOS void StopOtaCountdown(void); void StartCountUpTimer(uint32_t targetSeconds); void StopCountUpTimer(void); + void StartFactoryResetTimer(uint32_t delaySeconds); + void StopFactoryResetTimer(void); int GetCountUpValue() const; // 常亮屏刷新定时器(用于压测模式,每50分钟刷新一次,避免1小时超时) @@ -452,9 +454,13 @@ namespace OHOS bool m_firstStoryAudioPlayed = false; // 故事模式第一句音频是否已播放完成 void* m_storyModeTimeoutTimer; // 故事模式超时定时器(1分钟无文本切换则退出) void* m_storyAudioPlaybackTimeoutTimer; // 故事模式音频播放超时定时器(5秒内无音频播放则退出) + void* m_factoryResetTimer; // 恢复出厂设置定时器 // 对话模式相关标志 bool m_dialogueModeFinished = false; // 对话模式是否已finished(收到finished=true) + + // 解绑恢复出厂设置相关标志 + bool m_pending_factory_reset = false; // 待执行恢复出厂设置标志 // 屏保关闭标志(用于记录在进入对话/哄睡时是否关闭了屏保) bool m_screenImageClosedForDialogue = false; // 进入对话模式时是否关闭了屏保 diff --git a/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp b/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp index 3d9b2346d..86e5966d1 100644 --- a/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp +++ b/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp @@ -120,6 +120,7 @@ extern "C" { m_otaCountdownActive(false), m_otaCountdownValue(0), m_countUpActive(false), m_countUpValue(0), m_countUpTarget(0), m_alwaysOnRefreshActive(false), m_alwaysOnRefreshTime(0), + m_pending_factory_reset(false), m_factoryResetTimer(nullptr), m_currentFps(60), m_simStatus(0), m_cat1PowerStatus(0), m_signalStrength(0), m_networkStatus(0), m_networkType(0), @@ -389,15 +390,60 @@ extern "C" { } } - void ThunderBirdModel::StopStoryModeTimeoutTimer(void) - { - if (m_storyModeTimeoutTimer != nullptr) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "StopStoryModeTimeoutTimer: 停止故事模式超时定时器"); - osTimerStop(m_storyModeTimeoutTimer); - osTimerDelete(m_storyModeTimeoutTimer); - m_storyModeTimeoutTimer = nullptr; - } - } + void ThunderBirdModel::StopStoryModeTimeoutTimer(void) + { + if (m_storyModeTimeoutTimer != nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "StopStoryModeTimeoutTimer: 停止故事模式超时定时器"); + osTimerStop(m_storyModeTimeoutTimer); + osTimerDelete(m_storyModeTimeoutTimer); + m_storyModeTimeoutTimer = nullptr; + } + } + + /** + * @brief 启动恢复出厂设置定时器 + * @param delaySeconds 延迟秒数 + */ + void ThunderBirdModel::StartFactoryResetTimer(uint32_t delaySeconds) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "StartFactoryResetTimer: delaySeconds=%u", delaySeconds); + + // 如果定时器已存在,先停止 + if (m_factoryResetTimer != nullptr) { + StopFactoryResetTimer(); + } + + // 创建一次性定时器 + m_factoryResetTimer = osTimerNew((osTimerFunc_t)FactoryResetTimerCallback, osTimerOnce, nullptr, nullptr); + if (m_factoryResetTimer == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to create factory reset timer"); + return; + } + + // 启动定时器 + osStatus_t ret = osTimerStart(m_factoryResetTimer, delaySeconds * 1000); + if (ret != osOK) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to start factory reset timer, ret=%d", ret); + osTimerDelete(m_factoryResetTimer); + m_factoryResetTimer = nullptr; + } else { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Factory reset timer started: %u seconds", delaySeconds); + } + } + + /** + * @brief 停止恢复出厂设置定时器 + */ + void ThunderBirdModel::StopFactoryResetTimer(void) + { + if (m_factoryResetTimer != nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "StopFactoryResetTimer: 停止恢复出厂设置定时器"); + osTimerStop(m_factoryResetTimer); + osTimerDelete(m_factoryResetTimer); + m_factoryResetTimer = nullptr; + m_pending_factory_reset = false; + } + } // 故事模式超时处理函数 void ThunderBirdModel::HandleStoryModeTimeout(void) @@ -498,6 +544,22 @@ extern "C" { } } } + + /** + * @brief 处理恢复出厂设置 + */ + void ThunderBirdModel::HandleFactoryReset(void) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HandleFactoryReset: 执行恢复出厂设置"); + + if (m_pending_factory_reset) { + m_pending_factory_reset = false; + restore_factory_settings(); + } + + // 停止定时器 + StopFactoryResetTimer(); + } // 故事模式音频播放超时定时器回调函数 static void StoryAudioPlaybackTimeoutTimerCallback(uint8_t data) @@ -1533,6 +1595,14 @@ extern "C" { ThunderBirdModel::GetInstance()->HandleStoryModeTimeout(); })); } + + static void FactoryResetTimerCallback(uint8_t data) + { + GraphicService::GetInstance()->PostGraphicEvent( + std::bind([]() { + ThunderBirdModel::GetInstance()->HandleFactoryReset(); + })); + } /** * @brief 启动时间显示定时器 @@ -1988,15 +2058,18 @@ extern "C" { } } // 检查是否是绑定成功界面,需要跳转到对话界面 - else if (currentView == THUNDERBIRD_ADJUSTVIEW && + else if (currentView == THUNDERBIRD_ADJUSTVIEW && currentSubView == ThunderBirdAdjustView::THUNDERBIRD_ADJUSTVIEW_BIND_SUCCESS) { if (bind_status == false) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "解绑警告界面超时,恢复出厂设置"); - // AI_ForceInterrupt(); - ln_ws_send_voice_chat_interrupt("恢复出厂设置"); - do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_DEINIT, NULL, 0); - restore_factory_settings(); - } + // 解绑状态,检查是否有待处理的工厂重置 + if (m_pending_factory_reset) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "解绑警告界面超时,恢复出厂设置"); + // AI_ForceInterrupt(); + ln_ws_send_voice_chat_interrupt("恢复出厂设置"); + do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_DEINIT, NULL, 0); + HandleFactoryReset(); + } + } else { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "绑定成功界面超时,跳转到对话界面"); ThunderBirdModel::GetInstance()->ota_update_boot(); // 绑定成功后获取ota升级任务 @@ -3368,12 +3441,16 @@ extern "C" { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleBindAndUnbind: 设备已解绑,显示解绑警告"); uapi_set_screen_on_api(); bind_status = false;//解绑标志值位,用于界面跳转真正解绑放到出厂设置里面 + + // 直接启动恢复出厂设置的定时器,不依赖界面状态 + m_pending_factory_reset = true; + ThunderBirdModel::GetInstance()->StartFactoryResetTimer(1); // 2秒后恢复出厂设置 + ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_ADJUSTVIEW, ThunderBirdAdjustView::THUNDERBIRD_ADJUSTVIEW_BIND_SUCCESS); if(ThunderBirdAdjustView::GetInstance()) { ThunderBirdAdjustView::GetInstance()->ShowUnbindWarning(); } - ThunderBirdModel::GetInstance()->StartCountUpTimer(1); // 2秒后恢复出厂设置 return; } } -- 2.17.1