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<uint16_t>(allSlices_[allSlices_.Size() - 2] & SLICE_MASK);
+ uint16_t preSliceId = static_cast<uint16_t>(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);
}
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,
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) {
#ifdef SUPPORT_PPG_SERVICE\r
wear = ppg_get_wear_status();\r
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"heart_data_callbackProc::hrs = %d\n", hrs);\r
- wear = 1; //暂时屏蔽\r
#endif\r
if (wear == 0) {\r
OHOS::HeartModel::GetInstance()->SetWearStatus();\r
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"heart_data_callbackProc::hrs = %d\n", hrs);\r
#endif\r
OHOS::HeartModel::GetInstance()->UpHeartdata(hrs);\r
+ //打印佩戴与心率\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "wear = %d, hrs = %d\n", wear, hrs);\r
}\r
static void heart_data_timer_callback(int data) {\r
GraphicService::GetInstance()->PostGraphicEvent(\r