WEARABLE_LOGE(WEARABLE_LOG_MODULE_UI_SERVICE, "HandBindAndUnbindNotify msg_id = %d", request->msgId);
int is_bind = *(int *)request->data;
WEARABLE_LOGE(WEARABLE_LOG_MODULE_UI_SERVICE, "HandBindAndUnbindNotify is_bind = %d", is_bind);
- GraphicService::GetInstance()->PostGraphicEvent(
- std::bind(&OHOS::ThunderBirdModel::HandleBindAndUnbind,OHOS::ThunderBirdModel::GetInstance(), is_bind));
+
+ // 检查当前是否在 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);
+ });
+ }
+ });
+ } else {
+ // 不在 OTA slice,正常执行解绑逻辑
+ GraphicService::GetInstance()->PostGraphicEvent(
+ std::bind(&OHOS::ThunderBirdModel::HandleBindAndUnbind,OHOS::ThunderBirdModel::GetInstance(), is_bind));
+ }
}
// 更新文本内容通知