From: Caisking Date: Tue, 2 Sep 2025 09:21:52 +0000 (+0800) Subject: 修复主界面卡片无法回到主界面的bug X-Git-Tag: leiniao_debug_1.0.0_20250922_020716~117 X-Git-Url: http://git.snicker.com.cn/css/static/gitweb.css?a=commitdiff_plain;h=refs%2Fchanges%2F2198%2Fhead;p=mirrors%2FFD230.git 修复主界面卡片无法回到主界面的bug --- diff --git a/code/sdk/application/wearable/fd230/nativeabilityfwk/include/Ability.h b/code/sdk/application/wearable/fd230/nativeabilityfwk/include/Ability.h index 876c5b0ed..bd82b42a2 100644 --- a/code/sdk/application/wearable/fd230/nativeabilityfwk/include/Ability.h +++ b/code/sdk/application/wearable/fd230/nativeabilityfwk/include/Ability.h @@ -108,9 +108,21 @@ public: uint16_t GetPreSliceId(void) { if (allSlices_.Size() < 2) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "[DEBUG] GetPreSliceId - allSlices_ size < 2 (%d), returning invalid", allSlices_.Size()); return gSliceInvalid; } - return static_cast(allSlices_[allSlices_.Size() - 2] & SLICE_MASK); + uint16_t preSliceId = static_cast(allSlices_[allSlices_.Size() - 2] & SLICE_MASK); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "[DEBUG] GetPreSliceId - allSlices_ size: %d, preSliceId: %d", allSlices_.Size(), preSliceId); + + // 打印 allSlices_ 的完整内容用于调试 + // printf("[DEBUG] allSlices_ content: ["); + // for (int i = 0; i < allSlices_.Size(); i++) { + // printf("%d", allSlices_[i] & SLICE_MASK); + // if (i < allSlices_.Size() - 1) printf(", "); + // } + // printf("]\n"); + + return preSliceId; } void UpdateCurSlicePageId(uint16_t pageId); diff --git a/code/sdk/application/wearable/fd230/nativeabilityfwk/src/Ability.cpp b/code/sdk/application/wearable/fd230/nativeabilityfwk/src/Ability.cpp index 9c211169f..7286fed81 100644 --- a/code/sdk/application/wearable/fd230/nativeabilityfwk/src/Ability.cpp +++ b/code/sdk/application/wearable/fd230/nativeabilityfwk/src/Ability.cpp @@ -62,12 +62,32 @@ void Ability::StartSlice(uint32_t targetId) } if (sliceId == defaultTargetId_) { - allSlices_.Clear(); // clear slice history when return to main slice - allSlices_.PushBack(defaultTargetId_); + // 只有在 allSlices_ 为空时才清空,否则保持历史记录 + if (allSlices_.IsEmpty()) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "[DEBUG] StartSlice - Returning to MAIN slice, allSlices_ is empty, adding main slice"); + allSlices_.PushBack(defaultTargetId_); + } else { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "[DEBUG] StartSlice - Returning to MAIN slice, preserving history, size: %d", allSlices_.Size()); + // 如果栈顶不是主界面,则添加主界面 + if ((allSlices_[allSlices_.Size() - 1] & SLICE_MASK) != defaultTargetId_) { + allSlices_.PushBack(defaultTargetId_); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "[DEBUG] StartSlice - Added main slice to stack, new size: %d", allSlices_.Size()); + } + } } else if (PageTransitionMgr::GetInstance().IsBackTransitionRunning()) { + WEARABLE_LOGE + (WEARABLE_LOG_MODULE_LAUNCHER_FWK, "[DEBUG] StartSlice - Back transition running, popping from allSlices_, size before: %d", allSlices_.Size()); allSlices_.PopBack(); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "[DEBUG] StartSlice - allSlices_ size after pop: %d", allSlices_.Size()); } else { - allSlices_.PushBack(targetId); + // 检查是否已经在栈顶,避免重复添加相同的界面 + if (allSlices_.IsEmpty() || (allSlices_[allSlices_.Size() - 1] & SLICE_MASK) != sliceId) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "[DEBUG] StartSlice - Adding new slice %d to allSlices_, size before: %d", targetId, allSlices_.Size()); + allSlices_.PushBack(targetId); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "[DEBUG] StartSlice - allSlices_ size after push: %d", allSlices_.Size()); + } else { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "[DEBUG] StartSlice - Slice %d already on top, not adding again, size: %d", sliceId, allSlices_.Size()); + } } WEARABLE_LOGI(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "Ability StartSlice %d page %d size:%d", sliceId, diff --git a/code/sdk/application/wearable/fd230/nativeabilityfwk/src/NativeAbility.cpp b/code/sdk/application/wearable/fd230/nativeabilityfwk/src/NativeAbility.cpp index b885efe04..0f62c487d 100644 --- a/code/sdk/application/wearable/fd230/nativeabilityfwk/src/NativeAbility.cpp +++ b/code/sdk/application/wearable/fd230/nativeabilityfwk/src/NativeAbility.cpp @@ -91,9 +91,19 @@ void NativeAbility::ResumeAbility(uint32_t targetId) GraphicService::GetInstance()->SetNativeUIRunning(true); NotificationManager::GetInstance()->SetNativeUIRunning(true); if ((targetId & SLICE_MASK) != VIEW_AOD) { - allSlices_.Clear(); // clear slice history when jump from js to native + // 只有在 allSlices_ 为空或者当前目标不是主界面时才清空 + // 这样可以保持界面导航历史的完整性 + if (allSlices_.IsEmpty() || (targetId & SLICE_MASK) != defaultTargetId_) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "[DEBUG] ResumeAbility - Jumping from JS to native, clearing allSlices_, size before: %d", allSlices_.Size()); + allSlices_.Clear(); // clear slice history when jump from js to native + WEARABLE_LOGD(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "[DEBUG] ResumeAbility - allSlices_ cleared, size after: %d", allSlices_.Size()); + } else { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "[DEBUG] ResumeAbility - Preserving allSlices_ history, size: %d", allSlices_.Size()); + } } else { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "[DEBUG] ResumeAbility - AOD slice, popping from allSlices_, size before: %d", allSlices_.Size()); allSlices_.PopBack(); // clear invalid slice id + WEARABLE_LOGD(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "[DEBUG] ResumeAbility - allSlices_ popped, size after: %d", allSlices_.Size()); } StartSlice(targetId); if (nextSlice_.slice == nullptr) {