#include "thunderbird/include/ThunderBirdMainView.h"
#include "thunderbird/include/ThunderBirdDialogueView.h"
#include "ota/include/OtaModel.h"
-#include "ln_api.h"
+#include "ln_api.h" // ln_api.h 已经包含了 ln_api_interface.h
extern "C" errcode_t uapi_pm_add_sleep_veto(pm_id_t veto_id);
extern "C" errcode_t uapi_pm_remove_sleep_veto(pm_id_t veto_id);
// 检查当前是否在 OTA slice
uint16_t currentSliceId = OHOS::NativeAbility::GetInstance().GetCurSliceId();
if (currentSliceId == VIEW_OTA) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_UI_SERVICE, "HandBindAndUnbindNotify: 当前在 OTA slice,退出下载并切换回 ThunderBird");
-
- // 停止 OTA 倒计时定时器(如果正在倒计时)
- OHOS::OtaModel::GetInstance()->StopCountdownTimer();
-
- // 重置 OTA 状态
- OHOS::ThunderBirdModel::GetInstance()->ResetOtaStatus();
-
- // 清空下载文件类型,防止切换到 ThunderBird 后自动恢复下载
- OHOS::ThunderBirdModel::GetInstance()->ClearDownloadFile();
-
- // 切换回 ThunderBird slice
- OHOS::NativeAbility::GetInstance().SwitchSlice(VIEW_THUNDER_BIRD);
-
- // 等待 slice 切换完成后再执行解绑逻辑
- // 使用 PostGraphicEvent 确保在下一个图形事件循环中执行解绑
- GraphicService::GetInstance()->PostGraphicEvent([is_bind]() {
- // 再次检查是否已经切换回 ThunderBird slice
- uint16_t sliceId = OHOS::NativeAbility::GetInstance().GetCurSliceId();
- if (sliceId == VIEW_THUNDER_BIRD) {
- // 执行解绑逻辑
- OHOS::ThunderBirdModel::GetInstance()->HandleBindAndUnbind(is_bind);
- } else {
- // 如果还没切换完成,延迟一下再执行
- GraphicService::GetInstance()->PostGraphicEvent([is_bind]() {
- OHOS::ThunderBirdModel::GetInstance()->HandleBindAndUnbind(is_bind);
- });
- }
- });
+ // 检查当前OTA状态和下载文件类型
+ int otaStatus = OHOS::OtaModel::GetInstance()->GetOtaStatus();
+ int downloadFileType = OHOS::ThunderBirdModel::GetInstance()->GetDownloadFile();
+
+ // 判断是否是OTA升级或Cat1升级
+ bool isOtaUpgrade = (otaStatus == OTA_UI_STATUS_FORCE_START ||
+ otaStatus == OTA_UI_STATUS_OPTIONAL_START ||
+ otaStatus == OTA_UI_STATUS_CAT1_START);
+
+ // 判断是否是下载表情或屏保
+ bool isFileDownload = (downloadFileType == DOWNLOAD_FILE_TYPE_SCREEN_IMAGE ||
+ downloadFileType == DOWNLOAD_FILE_TYPE_EMOJI);
+
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_UI_SERVICE, "HandBindAndUnbindNotify: 当前在 OTA slice, otaStatus=%d, downloadFileType=%d",
+ otaStatus, downloadFileType);
+
+ // 如果是OTA升级或Cat1升级,不允许退出
+ if (isOtaUpgrade) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_UI_SERVICE, "HandBindAndUnbindNotify: 当前正在进行OTA/Cat1升级,不允许退出");
+ return; // 直接返回,不执行解绑逻辑
+ }
+
+ // 如果是下载表情或屏保,允许退出
+ if (isFileDownload) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_UI_SERVICE, "HandBindAndUnbindNotify: 当前在下载表情/屏保,退出下载并切换回 ThunderBird");
+
+ // 停止 OTA 倒计时定时器(如果正在倒计时)
+ OHOS::OtaModel::GetInstance()->StopCountdownTimer();
+
+ // 重置 OTA 状态
+ OHOS::ThunderBirdModel::GetInstance()->ResetOtaStatus();
+
+ // 清空下载文件类型,防止切换到 ThunderBird 后自动恢复下载
+ OHOS::ThunderBirdModel::GetInstance()->ClearDownloadFile();
+
+ // 切换回 ThunderBird slice
+ OHOS::NativeAbility::GetInstance().SwitchSlice(VIEW_THUNDER_BIRD);
+
+ // 等待 slice 切换完成后再执行解绑逻辑
+ // 使用 PostGraphicEvent 确保在下一个图形事件循环中执行解绑
+ GraphicService::GetInstance()->PostGraphicEvent([is_bind]() {
+ // 再次检查是否已经切换回 ThunderBird slice
+ uint16_t sliceId = OHOS::NativeAbility::GetInstance().GetCurSliceId();
+ if (sliceId == VIEW_THUNDER_BIRD) {
+ // 执行解绑逻辑
+ OHOS::ThunderBirdModel::GetInstance()->HandleBindAndUnbind(is_bind);
+ } else {
+ // 如果还没切换完成,延迟一下再执行
+ GraphicService::GetInstance()->PostGraphicEvent([is_bind]() {
+ OHOS::ThunderBirdModel::GetInstance()->HandleBindAndUnbind(is_bind);
+ });
+ }
+ });
+ } else {
+ // 既不是OTA升级,也不是文件下载,可能是其他状态,不允许退出
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_UI_SERVICE, "HandBindAndUnbindNotify: 当前OTA状态未知,不允许退出");
+ return;
+ }
} else {
// 不在 OTA slice,正常执行解绑逻辑
GraphicService::GetInstance()->PostGraphicEvent(