Merge #2198 into sdk650pathc0423 from refs/changes/2198/head
author袁清梦 <3449750381@qq.com>
Fri, 5 Sep 2025 03:06:38 +0000 (03:06 +0000)
committer袁清梦 <3449750381@qq.com>
Fri, 5 Sep 2025 03:06:38 +0000 (03:06 +0000)
Code review from 袁清梦

* refs/changes/2198/head: (2 commits squashed)

  - 增加心率佩戴的打印

  - 修复主界面卡片无法回到主界面的bug

Signed-off-by: Caisking <3449750381@qq.com>
Merged-by: Caisking <3449750381@qq.com>
link: https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230/change/2198
code/sdk/application/wearable/fd230/nativeabilityfwk/include/Ability.h
code/sdk/application/wearable/fd230/nativeabilityfwk/src/Ability.cpp
code/sdk/application/wearable/fd230/nativeabilityfwk/src/NativeAbility.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/heartrate/src/HeartModel.cpp

index 876c5b0..bd82b42 100644 (file)
@@ -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<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);
index a0966f0..c39c575 100644 (file)
@@ -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,
index b885efe..0f62c48 100644 (file)
@@ -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) {
index 714d558..044aba6 100644 (file)
@@ -1043,7 +1043,6 @@ static void heart_data_callbackProc(int data) {
 #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
@@ -1055,6 +1054,8 @@ static void heart_data_callbackProc(int data) {
   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