优化主界面card管理;增加睡眠card回退索引
authorCaisking <3449750381@qq.com>
Tue, 3 Sep 2024 08:40:10 +0000 (16:40 +0800)
committerCaisking <3449750381@qq.com>
Tue, 3 Sep 2024 08:40:10 +0000 (16:40 +0800)
code/sdk/application/wearable/fd230app/nativeui/main/include/MainPresenterSample.h
code/sdk/application/wearable/fd230app/nativeui/main/src/MainPresenterSample.cpp

index e5f8314..f8b1996 100644 (file)
@@ -91,6 +91,11 @@ namespace OHOS
         uint8_t GetFromCardId(void);
 
     private:
+        void LogCardTransition(CardId previous, CardId current);
+        void ResetSleepCardView();
+        void StartHeartRateDetection();
+        void UpdateWatchFace();
+        void UpdateWeather();
         void ProcessDataNotify(void);
         void SetCircleProgress(void);
         void SetCompassRotate(void);
index db24886..b04b62e 100644 (file)
@@ -31,6 +31,9 @@
 #include "dnotdisturb/include/DnotDisturbModel.h"
 #include "weather/include/WeatherModel.h"
 #include "heart_blood/health_service/health_service.h"
+#include "sleep/include/SleepControlView.h"
+#include "sleep/include/SleepCardView.h"
+#include "sleep/include/SleepModel.h"
 #include "MainModel.h"
 #include "../../../../../../../drivers/peripheral/utils/custom_runtime.h"
 
@@ -397,28 +400,33 @@ namespace OHOS
             DetermineToRotate();
         }
     }
-
+    /* --------------------------------- 主界面卡片功能 -------------------------------- */
     void MainPresenterSample::Notify(void)
     {
-        CardId cardId = view_->GetHorCurrentCard();
-
+        CardId currentCardId = view_->GetHorCurrentCard();
         static CardId previousCardId = WATCH_FACE;
 
-        if (previousCardId == HEART_RATE && cardId != HEART_RATE)
+        // 从心率卡片变为其他卡片时关闭心率检测
+        if (previousCardId == HEART_RATE && currentCardId != HEART_RATE)
         {
-            // 从心率卡片变为其他卡片时调用关闭心率检测的函数
+            LogCardTransition(previousCardId, currentCardId);
             HeartModel::GetInstance()->Heart_Control(HeartState::End, HeartCheck::CARDCHECK);
         }
 
+        // 从睡眠卡片跳转到其他卡片时切换到睡眠卡片主界面
+        if (previousCardId == SLEEP && currentCardId != SLEEP)
+        {
+            LogCardTransition(previousCardId, currentCardId);
+            ResetSleepCardView();
+        }
+
         // 更新上一个卡片的值
-        previousCardId = cardId;
+        previousCardId = currentCardId;
 
-        switch (cardId)
+        switch (currentCardId)
         {
         case HEART_RATE:
-            // 开启心率检测 [UI优先级最高直接打断正在检测 重新检测]
-            HeartModel::GetInstance()->Heart_Control(HeartState::End, HeartCheck::PASSIVITY);
-            HeartModel::GetInstance()->Heart_Control(HeartState::Start, HeartCheck::CARDCHECK);
+            StartHeartRateDetection();
             break;
 
         case COMPASS:
@@ -430,28 +438,60 @@ namespace OHOS
             break;
 
         case WATCH_FACE:
+            UpdateWatchFace();
+            break;
+
+        case WEATHER:
+            UpdateWeather();
+            break;
+        }
+    }
+    /*打印日志*/
+    void MainPresenterSample::LogCardTransition(CardId previous, CardId current)
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[MainCard slide]previousCardId:%d cardId:%d", previous, current);
+    }
+    /*睡眠卡片*/
+    void MainPresenterSample::ResetSleepCardView()
+    {
+        if (SleepCardView::GetInstance() != nullptr)
         {
-            DialSetting &setting = GetDialSetting();
-            if (setting.dialFlag)
-            {
-                DialModelTime::GetInstance()->UpdateTime();
-                dynamic_cast<DialViewGroup *>(view_->GetViewById(WATCH_FACE))->UpdateViewsByPeriodicUpdateData();
-            }
-            else
+            auto sleepCardView = SleepCardView::GetInstance()->GetSleepCardView();
+            if (sleepCardView->GetCurrentPage() != 0)
             {
-                dynamic_cast<MainClockView *>(view_->GetViewById(WATCH_FACE))->UpdateTime();
+                sleepCardView->SetCurrentPage(0);
             }
         }
-        break;
-        case WEATHER:
-            if (WeatherModel::GetInstance().GetWeatherDataIsValid())
-            {
-                WeatherModel::GetInstance().UpdateWeatherCurTime();
-            }
-            break;
+    }
+    /*心率卡片*/
+    void MainPresenterSample::StartHeartRateDetection()
+    {
+        HeartModel::GetInstance()->Heart_Control(HeartState::End, HeartCheck::PASSIVITY);
+        HeartModel::GetInstance()->Heart_Control(HeartState::Start, HeartCheck::CARDCHECK);
+    }
+    /*主表盘*/
+    void MainPresenterSample::UpdateWatchFace()
+    {
+        DialSetting &setting = GetDialSetting();
+        if (setting.dialFlag)
+        {
+            DialModelTime::GetInstance()->UpdateTime();
+            dynamic_cast<DialViewGroup *>(view_->GetViewById(WATCH_FACE))->UpdateViewsByPeriodicUpdateData();
+        }
+        else
+        {
+            dynamic_cast<MainClockView *>(view_->GetViewById(WATCH_FACE))->UpdateTime();
         }
     }
-
+    /*天气*/
+    void MainPresenterSample::UpdateWeather()
+    {
+        if (WeatherModel::GetInstance().GetWeatherDataIsValid())
+        {
+            WeatherModel::GetInstance().UpdateWeatherCurTime();
+        }
+    }
+    /* -------------------------------------------------------------------------- */
     void MainPresenterSample::InitCardSettings(void)
     {
         MainModel::GetInstance().InitCardSettings();
@@ -502,8 +542,8 @@ namespace OHOS
         timeinfo = localtime(&currtime);
 
         // 获取星期信息
-        int  language = ConfigModel::GetInstance()->GetLanguage();
-        if(language == 0)
+        int language = ConfigModel::GetInstance()->GetLanguage();
+        if (language == 0)
         {
             strcpy(p_week, weekDays_ch[timeinfo->tm_wday]);
         }
@@ -567,7 +607,7 @@ namespace OHOS
         //         break;
         //     }
         // }
-        std::string dateAndweek = std::string(dateStr) + " " + std::string(weekStr) ;
+        std::string dateAndweek = std::string(dateStr) + " " + std::string(weekStr);
         if (PullUpDownView::GetInstance() != nullptr)
         {
             // PullUpDownView::GetInstance()->GetProgress()->SetImage(progressImageSrc, progressImageSrc);