From df8226f2d5148d261cd4291d0b6c59a11364bb2e Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E8=A2=81=E6=B8=85=E6=A2=A6?= <3449750381@qq.com> Date: Fri, 5 Sep 2025 03:06:38 +0000 Subject: [PATCH] Merge #2198 into sdk650pathc0423 from refs/changes/2198/head MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Code review from 袁清梦 * refs/changes/2198/head: (2 commits squashed) - 增加心率佩戴的打印 - 修复主界面卡片无法回到主界面的bug Signed-off-by: Caisking <3449750381@qq.com> Merged-by: Caisking <3449750381@qq.com> CR-link: https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230/change/2198 --- .../fd230/nativeabilityfwk/include/Ability.h | 14 +++++++++- .../fd230/nativeabilityfwk/src/Ability.cpp | 26 ++++++++++++++++--- .../nativeabilityfwk/src/NativeAbility.cpp | 12 ++++++++- .../nativeui/heartrate/src/HeartModel.cpp | 3 ++- 4 files changed, 49 insertions(+), 6 deletions(-) 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 a0966f03f..c39c575cd 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) { diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/heartrate/src/HeartModel.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/heartrate/src/HeartModel.cpp index 714d558c4..044aba69d 100644 --- a/code/sdk/application/wearable/fd230/nativeapp/nativeui/heartrate/src/HeartModel.cpp +++ b/code/sdk/application/wearable/fd230/nativeapp/nativeui/heartrate/src/HeartModel.cpp @@ -1043,7 +1043,6 @@ static void heart_data_callbackProc(int data) { #ifdef SUPPORT_PPG_SERVICE wear = ppg_get_wear_status(); WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"heart_data_callbackProc::hrs = %d\n", hrs); - wear = 1; //暂时屏蔽 #endif if (wear == 0) { OHOS::HeartModel::GetInstance()->SetWearStatus(); @@ -1055,6 +1054,8 @@ static void heart_data_callbackProc(int data) { WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"heart_data_callbackProc::hrs = %d\n", hrs); #endif OHOS::HeartModel::GetInstance()->UpHeartdata(hrs); + //打印佩戴与心率 + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "wear = %d, hrs = %d\n", wear, hrs); } static void heart_data_timer_callback(int data) { GraphicService::GetInstance()->PostGraphicEvent( -- 2.17.1