+++ /dev/null
-/*\r
- * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.\r
- * Description: bloodBandoff view\r
- * Author:\r
- * Create: 2021-08-01\r
- */\r
-\r
-#ifndef BLOOD_BANDOFF_VIEW_H\r
-#define BLOOD_BANDOFF_VIEW_H\r
-\r
-#include "components/ui_label.h"\r
-#include "components/ui_view_group.h"\r
-#include "components/ui_image_animator.h"\r
-#include "View.h"\r
-#include "ohos_types.h"\r
-\r
-namespace OHOS {\r
-class BloodBandoffView {\r
-public:\r
- BloodBandoffView();\r
- virtual ~BloodBandoffView();\r
-\r
- UIViewGroup *CreateUIViewGroup();\r
- static BloodBandoffView *GetInstance(void);\r
-\r
- UIViewGroup *GetBandoffViewGroup();\r
- UIImageAnimatorView *GetImageAnimator();\r
-private:\r
- UILabel *label;\r
- UIViewGroup *group;\r
- UIImageView *imageView;\r
- UIImageAnimatorView *imageAnimator;\r
-};\r
-}\r
-\r
-\r
-#endif // 血氧跳转界面
\ No newline at end of file
--- /dev/null
+/***
+ * @Date: 2024-07-29 15:33:59
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-07-29 16:28:08
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/include/BloodDetectionPresenter.h
+ */
+
+#ifndef BLOOD_DETECTION_PRESENTER_H
+#define BLOOD_DETECTION_PRESENTER_H
+
+#include "Presenter.h"
+#include "components/ui_list.h"
+#include "components/ui_view.h"
+#include "KeyInputListener.h"
+#include "ModelListenerSample.h"
+#include "bloodoxygen/include/BloodDetectionView.h"
+#include "power_display_service.h"
+
+#define BLOOD_KEEP_TIME 60000 // 60s
+
+namespace OHOS
+{
+
+ class BloodDetectionView;
+ class BloodDetectionPresenter : public Presenter<BloodDetectionView>,
+ public ModelListenerSample,
+ public UIView::OnClickListener,
+ public UIView::OnDragListener,
+ public RootView::OnKeyActListener,
+ public ListScrollListener
+ {
+ public:
+ BloodDetectionPresenter();
+ ~BloodDetectionPresenter() override;
+ static BloodDetectionPresenter *GetInstance(void);
+
+
+ void OnTickEvent() override;
+ void Notify() override {}
+ bool OnClick(UIView &view, const ClickEvent &event) override;
+ bool OnDrag(UIView &view, const DragEvent &event) override;
+ bool OnKeyAct(UIView &view, const KeyEvent &event) override; // 增加按键事件
+
+ void NavigateBack(void);
+
+ private:
+ void ResetTickTimer(void);
+ uint64_t startTime{0};
+ bool BloodCountEvent{false};
+ bool BloodCheckState{false};
+
+ const power_display_svr_api_t *display_api = power_display_svr_get_api();
+ uint32_t display_time;
+ };
+}
+
+#endif // BLOOD_DETECTION_PRESENTER_H
\ No newline at end of file
--- /dev/null
+/***
+ * @Date: 2024-07-29 15:38:56
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-07-29 15:42:12
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/include/BloodDetectionView.cpp
+ */
+/*
+ * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
+ * Description: bloodDetection view
+ * Author:
+ * Create: 2021-08-01
+ */
+
+#ifndef BLOOD_Detection_VIEW_H
+#define BLOOD_Detection_VIEW_H
+
+#include "View.h"
+// #include "BaseView.h"
+#include "wearable_log.h"
+#include "UiConfig.h"
+#include "components/ui_label.h"
+#include "components/ui_label_ext.h"
+#include "components/ui_button.h"
+#include "components/ui_label_button.h"
+#include "components/ui_image_animator.h"
+#include "components/ui_circle_progress.h"
+#include "components/ui_view_group.h"
+
+
+#include "bloodoxygen/include/BloodDetectionPresenter.h"
+
+#include "components/ui_scroll_view.h"
+#include "components/ui_label_button_ext.h"
+
+#include "power_display_service.h"
+
+#define STOPCHECK "stop_check"
+namespace OHOS
+{
+ class BloodDetectionView : public View<BloodDetectionPresenter>
+ {
+ public:
+ BloodDetectionView();
+ ~BloodDetectionView()override;
+
+ void OnStart() override;
+ static BloodDetectionView *GetInstance(void);
+
+ bool BloodDetectionViewInit();
+ UIImageAnimatorView *GetImageAnimator(void);
+ void UpShowBloodText(void);
+
+ private:
+ UIImageAnimatorView *imageAnimator{nullptr};
+ UILabelExt *titleLabel{nullptr};
+ UILabel *Spo2Text{nullptr};
+ UILabelButtonExt *testButton{nullptr};
+
+ uint32_t spo2_;
+ };
+}
+
+#endif // 血氧主界面
\ No newline at end of file
-/*\r
- * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.\r
- * Description: bloodOxygen view\r
- * Author:\r
- * Create: 2021-08-01\r
- */\r
-\r
-#ifndef BLOOD_OXYGEN_MODEL_H\r
-#define BLOOD_OXYGEN_MODEL_H\r
-\r
-#include <cstdio>\r
-#include "gfx_utils/list.h"\r
-\r
-namespace OHOS {\r
-class BloodOxygenModel {\r
-public:\r
- ~BloodOxygenModel(){};\r
- static BloodOxygenModel *GetInstance(void);\r
- bool GetBloodOxygenViewStatus(void);\r
- bool GetBloodBandoffViewStatus(void);\r
- void SetBloodOxygenViewStatus(bool oxygenViewStatus);\r
- void SetBloodBandoffViewStatus(bool bandoffViewStatus);\r
-\r
-private:\r
- BloodOxygenModel();\r
- bool OxygenView;\r
- bool BandoffView;\r
-};\r
-}\r
-\r
-#endif\r
+/***
+ * @Date: 2024-04-15 10:55:58
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-09-05 14:58:21
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/include/BloodOxygenModel.h
+ */
+/***
+ * @Date: 2024-04-15 10:55:58
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-07-31 10:38:26
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/include/BloodOxygenModel.h
+ */
+
+#ifndef BLOOD_OXYGEN_MODEL_H
+#define BLOOD_OXYGEN_MODEL_H
+
+#include <stdint.h>
+#include <string>
+
+namespace OHOS
+{
+ // 血氧检测状态
+ enum class BloodState
+ {
+ End = 0,
+ Start,
+ };
+ enum class BloodResult
+ {
+ NOT_TESTED = 0, // 未检测
+ SUCCESS, // 检测成功
+ NOT_WORN, // 未佩戴检测
+ TIMEOUT, // 检测超时
+ HIGH_RESULT, // 检测结果过高
+ LOW_RESULT, // 检测结果过低
+ INVALID_DATA // 无效数据
+ };
+ class BloodOxygenModel
+ {
+ public:
+ BloodOxygenModel();
+ ~BloodOxygenModel();
+ static BloodOxygenModel *GetInstance();
+
+ void UpSPO2data(uint8_t spo2);
+ uint16_t GetSPO2data();
+ uint16_t GetShowSPO2data();
+
+ uint32_t GetCheckTime();
+ void SetCheckTime(uint32_t time);
+ void SetWearStatus(int32_t wear);
+ void SetResult(BloodResult result);
+ BloodResult GetResult();
+
+ void Blood_Stop(void);
+ void Blood_Start(void);
+ void Blood_Save(void);
+ void Blood_Result(void);
+
+ void Blood_Control(BloodState state);
+ void ClearDisplayData();
+ void CleanAllData();
+
+ private:
+ uint16_t displayspo2;
+ uint16_t currentspo2;
+ uint32_t timestamp_ms;
+ int32_t wear_;
+
+ bool sensorstate{false};
+ bool startspo2{false};
+
+ uint16_t unwear_counter_; // 无效佩戴计数器
+ uint16_t valid_counter_; // 有效数计数器
+ uint16_t disvalid_counter_; // 无效数计数器
+ BloodResult bloodresult_ = BloodResult::NOT_TESTED; // 检测结果
+ bool initstatus;
+ };
+}
+
+#endif
+++ /dev/null
-/*\r
- * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.\r
- * Description: bloodOxygen view\r
- * Author:\r
- * Create: 2021-08-01\r
- */\r
-\r
-#ifndef BLOOD_OXYGEN_PRESENTER_H\r
-#define BLOOD_OXYGEN_PRESENTER_H\r
-\r
-#include "Presenter.h"\r
-#include "ModelListenerSample.h"\r
-#include "components/ui_circle_progress.h"\r
-#include "ohos_types.h"\r
-\r
-namespace OHOS {\r
-class BloodOxygenView;\r
-class BloodOxygenPresenter : public Presenter<BloodOxygenView>,\r
- public UIView::OnClickListener,\r
- public ModelListenerSample,\r
- public UIView::OnDragListener {\r
-public:\r
- BloodOxygenPresenter();\r
- ~BloodOxygenPresenter() override;\r
- void OnStart() override;\r
- void OnStop() override;\r
- void Notify() override;\r
- static BloodOxygenPresenter *GetInstance(void);\r
- bool OnDrag(UIView& view, const DragEvent& event) override;\r
- bool OnClick(UIView& view, const ClickEvent& event) override;\r
-\r
-private:\r
- bool CheckPointersValue(void);\r
- void ReturnInterface(void);\r
- void ProgressNotify(void);\r
- int count;\r
-};\r
-}\r
-\r
-#endif\r
+++ /dev/null
-/*\r
- * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.\r
- * Description: bloodOxygen view\r
- * Author:\r
- * Create: 2021-08-01\r
- */\r
-\r
-#ifndef BLOOD_OXYGEN_VIEW_H\r
-#define BLOOD_OXYGEN_VIEW_H\r
-\r
-#include "View.h"\r
-#include "wearable_log.h"\r
-#include "UiConfig.h"\r
-#include "components/ui_label.h"\r
-#include "components/ui_button.h"\r
-#include "components/ui_label_button.h"\r
-#include "components/ui_image_animator.h"\r
-#include "components/ui_circle_progress.h"\r
-#include "components/ui_view_group.h"\r
-#include "BloodOxygenPresenter.h"\r
-#include "BloodBandoffView.h"\r
-\r
-namespace OHOS {\r
-class BloodOxygenView : public View<BloodOxygenPresenter> {\r
-public:\r
- BloodOxygenView();\r
- ~BloodOxygenView() override;\r
-\r
- void OnStart() override;\r
-\r
- static BloodOxygenView *GetInstance(void);\r
-\r
- UILabel *GetPercent();\r
- UIViewGroup *GetBloodOxygenGroup();\r
- UILabelButton *GetTestButton();\r
- UICircleProgress *GetCircleProgress();\r
-private:\r
- bool InitImageDisplay();\r
- bool SetOnDragListener();\r
- UICircleProgress *CreateAndSetUICircleProgress();\r
- UILabelButton *CreateAndSetUIButton(const char *title);\r
- UIView *CreateAndSetUIView(int16 x, int16 y) const;\r
-\r
- BloodBandoffView *bloodbandoff{nullptr};\r
- UIImageView *imageViewMain;\r
- UIImageView *imageViewProgress;\r
- UIImageAnimatorView *imageAnimator;\r
-\r
- UILabel *percent;\r
- UIViewGroup *group;\r
- UILabelButton *testButton;\r
- UICircleProgress *circleProgress;\r
-};\r
-}\r
-\r
-\r
-#endif // 血氧主界面
\ No newline at end of file
--- /dev/null
+
+
+#ifndef BLOOD_RESULT_PRESENTER_H
+#define BLOOD_RESULT_PRESENTER_H
+
+#include "Presenter.h"
+#include "ModelListenerSample.h"
+#include "components/ui_circle_progress.h"
+#include "ohos_types.h"
+#include "KeyInputListener.h"
+#include "common/key_code.h"
+#include "bloodoxygen/include/BloodResultView.h"
+
+namespace OHOS
+{
+ static constexpr const char *CLICK_BLOOD = "clickblood"; // 血氧检测
+
+ class BloodResultView;
+ class BloodResultPresenter : public Presenter<BloodResultView>,
+ public UIView::OnClickListener,
+ public RootView::OnKeyActListener,
+ public UIView::OnDragListener
+ {
+ public:
+ BloodResultPresenter();
+ virtual ~BloodResultPresenter();
+ static BloodResultPresenter *GetInstance(void);
+
+
+
+ bool OnDrag(UIView &view, const DragEvent &event) override;
+ bool OnDragEnd(UIView &view, const DragEvent &event) override;
+ bool OnClick(UIView &view, const ClickEvent &event) override;
+ bool OnKeyAct(UIView &view, const KeyEvent &event) override; // 增加按键事件
+
+ uint32_t GetCurrentTime();
+ int GetTDOA(uint32_t new_time, uint32_t old_time);
+ };
+}
+
+#endif
--- /dev/null
+/***
+ * @Date: 2024-04-15 10:55:58
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-07-30 11:46:23
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/include/BloodResultView.h
+ */
+/***
+ * @Date: 2024-04-15 10:55:58
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-05-07 18:51:13
+ * @FilePath: /XTS_FD230/FD230/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/include/BloodResultView.h
+ */
+/*
+ * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
+ * Description: bloodResult view
+ * Author:
+ * Create: 2021-08-01
+ */
+
+#ifndef BLOOD_Result_VIEW_H
+#define BLOOD_Result_VIEW_H
+
+#include "View.h"
+// #include "BaseView.h"
+#include "wearable_log.h"
+#include "UiConfig.h"
+#include "components/ui_label.h"
+#include "components/ui_label_ext.h"
+#include "components/ui_button.h"
+#include "components/ui_label_button.h"
+#include "components/ui_image_animator.h"
+#include "components/ui_circle_progress.h"
+#include "components/ui_view_group.h"
+#include "bloodoxygen/include/BloodResultPresenter.h"
+
+#include "components/ui_scroll_view.h"
+#include "components/ui_label_button_ext.h"
+namespace OHOS
+{
+ class BloodResultPresenter;
+ class BloodResultView : public View<BloodResultPresenter>
+ {
+ public:
+ BloodResultView();
+ virtual ~BloodResultView();
+ static BloodResultView *GetInstance(void);
+
+ void OnStart() override;
+
+ bool BloodResultViewInit();
+ void UpSPO2Text(void);
+
+ void DeInit();
+ bool AddButton();
+ bool InitLable();
+ bool Initbackground();
+
+ private:
+ UIImageView *background = nullptr;
+ UILabelExt *titleLabel = nullptr;
+ UILabelExt *timeLabel = nullptr;
+ UILabel *bloodLabel = nullptr;
+ UILabelButtonExt *checkButton{nullptr};
+ };
+}
+
+#endif // 血氧主界面
\ No newline at end of file
+++ /dev/null
-/*\r
- * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.\r
- * Description: bloodBandoff view\r
- * Author:\r
- * Create: 2021-08-01\r
- */\r
-#include "UiConfig.h"\r
-#include "wearable_log.h"\r
-#include "BloodBandoffView.h"\r
-#include "BloodOxygenModel.h"\r
-\r
-namespace OHOS {\r
-// 动态显示图片设置\r
-static constexpr uint16_t IMAGE_SIZE = 96;\r
-static constexpr uint16_t IMAGE_POSITION_Y = 276;\r
-static constexpr uint16_t IMAGE_POSITION_X = 179;\r
-static constexpr uint16_t IMAGEANIMATOERVIEW_SIZE = 24;\r
-static constexpr uint16_t IMAGEANIMATOERVIEW_SPEED = 40;\r
-\r
-// 标签设置\r
-static constexpr uint16_t LABEL_POSITION_X = 87;\r
-static constexpr uint16_t LABEL_POSITION_Y = 200;\r
-static constexpr uint16_t LABEL_POSITION_WIDTH = 288;\r
-static constexpr uint16_t LABEL_POSITION_HEIGHT = 50;\r
-\r
-// 图片设置\r
-static constexpr uint16_t IMAGE_ENTER_POSITION_X = 131;\r
-static constexpr uint16_t IMAGE_ENTER_POSITION_Y = 70;\r
-\r
-static constexpr uint16_t TITLE_LABEL_DEFAULT_HEIGHT = 30;\r
-static constexpr uint16_t FONT_DEFAULT_SIZE = 25;\r
-static constexpr uint16_t VIEW_DISTANCE_TO_LEFT_SIDE = 48;\r
-static constexpr uint16_t TEXT_DISTANCE_TO_LEFT_SIDE = 50;\r
-static constexpr uint16_t TEXT_DISTANCE_TO_TOP_SIDE = 11;\r
-\r
-static ImageAnimatorInfo g_imageAnimatorInfo_Time[IMAGEANIMATOERVIEW_SIZE] = {\r
- {PNG_COUNTDOWN_TIME_IMAGE_0, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_COUNTDOWN_TIME_IMAGE_1, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_COUNTDOWN_TIME_IMAGE_2, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_COUNTDOWN_TIME_IMAGE_3, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_COUNTDOWN_TIME_IMAGE_4, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_COUNTDOWN_TIME_IMAGE_5, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_COUNTDOWN_TIME_IMAGE_6, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_COUNTDOWN_TIME_IMAGE_7, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_COUNTDOWN_TIME_IMAGE_8, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_COUNTDOWN_TIME_IMAGE_9, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_COUNTDOWN_TIME_IMAGE_10, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_COUNTDOWN_TIME_IMAGE_11, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_COUNTDOWN_TIME_IMAGE_12, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_COUNTDOWN_TIME_IMAGE_13, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_COUNTDOWN_TIME_IMAGE_14, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_COUNTDOWN_TIME_IMAGE_15, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_COUNTDOWN_TIME_IMAGE_16, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_COUNTDOWN_TIME_IMAGE_17, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_COUNTDOWN_TIME_IMAGE_18, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_COUNTDOWN_TIME_IMAGE_19, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_COUNTDOWN_TIME_IMAGE_20, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_COUNTDOWN_TIME_IMAGE_21, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_COUNTDOWN_TIME_IMAGE_22, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_COUNTDOWN_TIME_IMAGE_23, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
-};\r
-static BloodBandoffView *g_pMainView = nullptr;\r
-BloodBandoffView::BloodBandoffView()\r
-{\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodBandoffView::BloodBandoffView");\r
- label = nullptr;\r
- imageView = nullptr;\r
- group = nullptr;\r
- imageAnimator = nullptr;\r
- g_pMainView = this;\r
-}\r
-\r
-BloodBandoffView::~BloodBandoffView()\r
-{\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodBandoffView::~BloodBandoffView");\r
- group->RemoveAll();\r
- delete label;\r
- delete imageView;\r
- delete group;\r
- delete imageAnimator;\r
- label = nullptr;\r
- imageView = nullptr;\r
- group = nullptr;\r
- imageAnimator = nullptr;\r
- g_pMainView = nullptr;\r
-}\r
-\r
-BloodBandoffView *BloodBandoffView::GetInstance(void)\r
-{\r
- return g_pMainView;\r
-}\r
-\r
-UIViewGroup *BloodBandoffView::GetBandoffViewGroup()\r
-{\r
- return group;\r
-}\r
-\r
-UIImageAnimatorView *BloodBandoffView::GetImageAnimator()\r
-{\r
- return imageAnimator;\r
-}\r
-\r
-UIViewGroup *BloodBandoffView::CreateUIViewGroup()\r
-{\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodBandoffView::CreateUIViewGroup");\r
- group = new UIViewGroup();\r
- if (group == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodBandoffView::new group fail");\r
- return nullptr;\r
- }\r
- group->SetPosition(0, 0);\r
- group->Resize(VERTICAL_RESOLUTION, HORIZONTAL_RESOLUTION);\r
-\r
- label = new UILabel();\r
- if (label == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodBandoffView::new Label fail");\r
- return nullptr;\r
- }\r
- group->Add(label);\r
- label->SetPosition(LABEL_POSITION_X, LABEL_POSITION_Y, LABEL_POSITION_WIDTH, LABEL_POSITION_HEIGHT);\r
- label->SetText("偏紧佩戴,保持静止");\r
- label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_DEFAULT_SIZE);\r
- label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
-\r
- imageAnimator = new UIImageAnimatorView();\r
- if (imageAnimator == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodBandoffView::new UIImageAnimatorView fail");\r
- return nullptr;\r
- }\r
- imageAnimator->SetImageAnimatorSrc(g_imageAnimatorInfo_Time, IMAGEANIMATOERVIEW_SIZE, IMAGEANIMATOERVIEW_SPEED);\r
- imageAnimator->Start();\r
- imageAnimator->SetRepeat(false);\r
- group->Add(imageAnimator);\r
-\r
- imageView = new UIImageView();\r
- if (imageView == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodBandoffView::new UIImageView fail");\r
- return nullptr;\r
- }\r
- imageView->SetPosition(IMAGE_ENTER_POSITION_X, IMAGE_ENTER_POSITION_Y); // 30 : offset\r
- imageView->SetSrc(PNG_BLOOD_ICON_ENTER);\r
- group->Add(imageView);\r
-\r
- return group;\r
-}\r
-}\r
--- /dev/null
+/*
+ * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
+ * Description: BloodDetectionPresenter.cpp
+ * Author:
+ * Create: 2021-11-23
+ */
+
+#include "bloodoxygen/include/BloodDetectionView.h"
+#include "bloodoxygen/include/BloodDetectionPresenter.h"
+
+#include "AppViewIDs.h"
+#include "NativeAbility.h"
+#include "common/key_code.h"
+#include "KeyInputListener.h"
+#include "custom_utils.h"
+// #include "displaybrightness/include/DisplayBrightnessModel.h"
+#include "bloodoxygen/include/BloodOxygenModel.h"
+#include "MainModel.h"
+#include "NativeRegisterManager.h"
+namespace OHOS
+{
+
+ REGIST_SLICE(VIEW_BLOOD_CHECK, BloodDetectionView, BloodDetectionPresenter);
+
+ // 当前Presenter属性实例化的内存指针
+ static BloodDetectionPresenter *g_pBloodDetectionPresenter = nullptr;
+
+ BloodDetectionPresenter::BloodDetectionPresenter()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodDetectionPresenter::BloodDetectionPresenter");
+ g_pBloodDetectionPresenter = this;
+
+ // display_api->set_screen_set_keepon_timeout(-1); // 设置常亮
+ ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON);
+ ResetTickTimer();
+
+ if (!BloodCheckState)
+ {
+ BloodOxygenModel::GetInstance()->Blood_Start();
+ BloodCheckState = true;
+ }
+ }
+
+ BloodDetectionPresenter::~BloodDetectionPresenter()
+ {
+ // display_api->set_screen_set_keepon_timeout(0); // 恢复
+ ScreenAlwaysOnCtr(CANCEL_SCREEN_ALWAYS_ON);
+ g_pBloodDetectionPresenter = nullptr;
+
+ if (BloodCheckState)
+ {
+ BloodOxygenModel::GetInstance()->Blood_Stop();
+ BloodCheckState = false;
+ }
+ }
+ BloodDetectionPresenter *BloodDetectionPresenter::GetInstance()
+ {
+ return g_pBloodDetectionPresenter;
+ }
+ void BloodDetectionPresenter::NavigateBack()
+ {
+ // NativeAbility::GetInstance().Back(TransitionType::TRANSITION_BACK_TO_HEXAGONS);
+ }
+
+ bool BloodDetectionPresenter::OnDrag(UIView &view, const DragEvent &event)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodDetectionPresenter::OnDrag");
+ UNUSED(view);
+ if ((event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT) && (event.GetDeltaX() > X_DRAG_OFFSET) &&
+ (event.GetDeltaX() > (DOUBLES * MATH_ABS(event.GetDeltaY()))))
+ {
+ NavigateBack();
+ }
+ return true;
+ }
+
+ bool BloodDetectionPresenter::OnClick(UIView &view, const ClickEvent &event)
+ {
+ if (strcmp(view.GetViewId(), STOPCHECK) == 0)
+ {
+ NavigateBack();
+ }
+ return true;
+ }
+
+ void BloodDetectionPresenter::OnTickEvent()
+ {
+ // 更新显示血氧数据
+ // BloodDetectionView::GetInstance()->UpShowBloodText(); 屏蔽动态显示实时数据
+ // uint64_t current_time = osKernelGetTick2ms();
+ // if ((startTime != 0) && (current_time - startTime >= BLOOD_KEEP_TIME))
+ // {
+ // // 超时处理
+ // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果: 超时处理 BLOOD_KEEP_TIME: %lld", current_time - startTime);
+ // BloodOxygenModel::GetInstance()->SetResult(BloodResult::TIMEOUT);
+ // BloodOxygenModel::GetInstance()->Blood_Stop();
+ // }
+ }
+ void BloodDetectionPresenter::ResetTickTimer(void)
+ {
+ // startTime = osKernelGetTick2ms();
+ }
+ // 增加按键事件
+ bool BloodDetectionPresenter::OnKeyAct(UIView &view, const KeyEvent &event)
+ {
+ unsigned short keyID = event.GetKeyId();
+ unsigned short keyState = event.GetState();
+ // 如果是power键,且是亮屏状态,按键释放就返回上一级
+ if (keyID == static_cast<uint16_t>(ZliteKeyCode::ZLITE_KEY_POWER) && keyState == 1 && uapi_get_screen_state() == 0)
+ {
+ NavigateBack();
+ }
+ return true;
+ }
+}
--- /dev/null
+/***
+ * @Date: 2024-04-15 10:55:58
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-07-29 15:35:06
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodDetectionView.cpp
+ */
+#include "UiConfig.h"
+#include "wearable_log.h"
+#include "BloodDetectionView.h"
+#include "BloodOxygenModel.h"
+#include "ui_image_animator.h"
+#include "BloodDetectionView.h"
+#include "ui_resource_string.h"
+#include "power_display_service.h"
+#include "uicomponents/UIComponents.h"
+namespace OHOS
+{
+ // 动态刷新设置
+ static constexpr uint16_t IMAGE_SIZE = 180;
+ static constexpr uint16_t IMAGE_POSITION_Y = 143;
+ static constexpr uint16_t IMAGE_POSITION_X = 143;
+ static constexpr uint16_t DETECTION_IMAGE_ANIMATORVIEW_SIZE = 30;
+ static constexpr uint16_t DETECTION_IMAGE_ANIMATORVIEW_SPEED = 40;
+
+ static ImageAnimatorInfo g_imageAnimatorInfo_blood[30] = {
+ {PNG_CHECK_TIME_IMAGE_0, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_CHECK_TIME_IMAGE_1, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_CHECK_TIME_IMAGE_2, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_CHECK_TIME_IMAGE_3, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_CHECK_TIME_IMAGE_4, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_CHECK_TIME_IMAGE_5, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_CHECK_TIME_IMAGE_6, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_CHECK_TIME_IMAGE_7, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_CHECK_TIME_IMAGE_8, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_CHECK_TIME_IMAGE_9, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_CHECK_TIME_IMAGE_10, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_CHECK_TIME_IMAGE_11, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_CHECK_TIME_IMAGE_12, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_CHECK_TIME_IMAGE_13, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_CHECK_TIME_IMAGE_14, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_CHECK_TIME_IMAGE_15, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_CHECK_TIME_IMAGE_16, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_CHECK_TIME_IMAGE_17, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_CHECK_TIME_IMAGE_18, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_CHECK_TIME_IMAGE_19, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_CHECK_TIME_IMAGE_20, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_CHECK_TIME_IMAGE_21, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_CHECK_TIME_IMAGE_22, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_CHECK_TIME_IMAGE_23, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_CHECK_TIME_IMAGE_24, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_CHECK_TIME_IMAGE_25, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_CHECK_TIME_IMAGE_26, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_CHECK_TIME_IMAGE_27, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_CHECK_TIME_IMAGE_28, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_CHECK_TIME_IMAGE_29, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ };
+
+ static BloodDetectionView *g_pBloodCheckView = nullptr;
+ BloodDetectionView::BloodDetectionView()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodBandoffView::BloodBandoffView");
+ g_pBloodCheckView = this;
+ }
+ BloodDetectionView::~BloodDetectionView()
+ {
+ if(titleLabel)
+ {
+ delete titleLabel;
+ titleLabel = nullptr;
+ }
+ if(testButton)
+ {
+ delete testButton;
+ testButton = nullptr;
+ }
+ if(imageAnimator)
+ {
+ imageAnimator->Stop();
+ delete imageAnimator;
+ imageAnimator = nullptr;
+ }
+ if(Spo2Text)
+ {
+ delete Spo2Text;
+ Spo2Text = nullptr;
+ }
+ g_pBloodCheckView = nullptr;
+ }
+ BloodDetectionView *BloodDetectionView::GetInstance(void)
+ {
+ return g_pBloodCheckView;
+ }
+ UIImageAnimatorView *BloodDetectionView::GetImageAnimator()
+ {
+ return imageAnimator;
+ }
+
+ /*更新显示数据*/
+ void BloodDetectionView::UpShowBloodText()
+ {
+ uint16_t spo2_ = BloodOxygenModel::GetInstance()->GetShowSPO2data();
+ std::string bloodoxygenStr = std::to_string(spo2_);
+ if (Spo2Text != nullptr)
+ Spo2Text->SetText(bloodoxygenStr.c_str());
+ }
+ /*初始化检测界面*/
+ bool BloodDetectionView::BloodDetectionViewInit()
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodDetectionViewInit is begin");
+ /*初始化title*/
+ InitLabelExt(titleLabel, 83, 50, 300, 35, "title", STR_CHECKON, DEFAULT_VECTOR_FONT_FILENAME, 30);
+ AddViewToRootContainer(titleLabel);
+
+ /* -------------------------------------------------------------------------- */
+ imageAnimator = new UIImageAnimatorView();
+ if (imageAnimator == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodBandoffView::new UIImageAnimatorView fail");
+ return false;
+ }
+ imageAnimator->SetImageAnimatorSrc(g_imageAnimatorInfo_blood, DETECTION_IMAGE_ANIMATORVIEW_SIZE, DETECTION_IMAGE_ANIMATORVIEW_SPEED);
+ imageAnimator->SetRepeat(true);
+ AddViewToRootContainer(imageAnimator);
+
+ /* -------------------------------------------------------------------------- */
+ /*初始化血氧值label*/
+ // InitUILabel(Spo2Text, 83, 83, 300, 300, "bloodtext", "--", GILROY_BOLD_FONT, 140);
+ // AddViewToRootContainer(Spo2Text);
+
+ /* -------------------------------------------------------------------------- */
+ InitButtonExt(testButton, 93, 330, 280, 90, STOPCHECK, STR_CHECKSTOP, 30);
+ AddViewToRootContainer(testButton);
+
+ /* -------------------------------------------------------------------------- */
+ UIView::OnClickListener *clickLeftListener = (UIView::OnClickListener *)OHOS::BloodDetectionPresenter::GetInstance();
+ if (clickLeftListener == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodDetectionView::new clickLeftListener fail");
+ return false;
+ }
+ testButton->SetOnClickListener(clickLeftListener);
+ /* -------------------------------------------------------------------------- */
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodDetectionViewInit is ok");
+ return true;
+ }
+ void BloodDetectionView::OnStart()
+ {
+ // SetContainerView(new UIViewGroup());
+ // container_->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());
+
+ if (!BloodDetectionViewInit())
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodDetectionView::InitBloodView fail");
+ }
+
+
+ if (imageAnimator != nullptr)
+ {
+ imageAnimator->Start();
+ }
+
+ GetRootContainer()->SetDraggable(true);
+ GetRootContainer()->SetTouchable(true);
+ GetRootContainer()->SetOnDragListener(presenter_);
+
+ // 增加按键监听
+ // presenter_->SetOnKeyActListener(keyactListener);
+
+ }
+
+}
-/*\r
- * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.\r
- * Description: bloodOxygen view\r
- * Author:\r
- * Create: 2021-08-01\r
- */\r
-\r
-#include "BloodOxygenModel.h"\r
-\r
-namespace OHOS {\r
-BloodOxygenModel::BloodOxygenModel()\r
-{\r
- OxygenView = false;\r
- BandoffView = false;\r
-}\r
-\r
-bool BloodOxygenModel::GetBloodOxygenViewStatus(void)\r
-{\r
- return OxygenView;\r
-}\r
-\r
-bool BloodOxygenModel::GetBloodBandoffViewStatus(void)\r
-{\r
- return BandoffView;\r
-}\r
-\r
-void BloodOxygenModel::SetBloodBandoffViewStatus(bool bandoffViewStatus)\r
-{\r
- BandoffView = bandoffViewStatus;\r
-}\r
-\r
-void BloodOxygenModel::SetBloodOxygenViewStatus(bool oxygenViewStatus)\r
-{\r
- OxygenView = oxygenViewStatus;\r
-}\r
-\r
-BloodOxygenModel *BloodOxygenModel::GetInstance(void)\r
-{\r
- static BloodOxygenModel instance;\r
- return &instance;\r
-}\r
-}
\ No newline at end of file
+#include "bloodoxygen/include/BloodOxygenModel.h"
+#include "bloodoxygen/include/BloodResultPresenter.h"
+
+// #include "DialModelSPO2.h"
+#include "wearable_log.h"
+// #include "heart_blood/health_service/health_service.h"
+#include "custom_utils.h"
+
+extern "C" errcode_t uapi_get_timestamp_ms(uint32_t *tm);
+
+#include "custom_utils.h"
+// #include "ppg_service.h"
+#include "ConfigModel.h"
+#include "AppViewIDs.h"
+#include "NativeAbility.h"
+// #include "battery_hal.h"
+// #include "heart_blood/BloodCardView.h"
+#include "MainViewSample.h"
+
+#include <custom_save_runtime.h>
+
+#define MAX_UNWARE_COUNT 10
+#define MAX_VALID_SPO2_COUNT 30
+#define MAX_DISVALID_SPO2_COUNT 100
+namespace OHOS
+{
+ /**
+ * @brief Constructor for the BloodOxygenModel class.
+ */
+ BloodOxygenModel::BloodOxygenModel()
+ {
+ // BloodOxygenData *data = HealthService::GetInstance()->ReadBloodOxygenData();
+ // if (data)
+ // {
+ // currentspo2 = data->SPO2;
+ // timestamp_ms = data->timestamp;
+ // // 更新表盘血氧数据
+ // DialModelSPO2::GetInstance()->UpdateSPO2(currentspo2);
+ // delete data;
+ // }
+ // else
+ // {
+ currentspo2 = 0;
+ timestamp_ms = 0;
+ // }
+ }
+ BloodOxygenModel::~BloodOxygenModel() {}
+ BloodOxygenModel *BloodOxygenModel::GetInstance(void)
+ {
+ static BloodOxygenModel instance;
+ return &instance;
+ }
+ /* ---------------------------------- 状态检测 ---------------------------------- */
+
+ void BloodOxygenModel::ClearDisplayData()
+ {
+ // currentspo2 = 0;
+ // timestamp_ms = 0;
+ // 不需要清空
+ }
+
+ // 血氧监控
+ void BloodOxygenModel::Blood_Control(BloodState state)
+ {
+ if (state == BloodState::End && startspo2 == true)
+ {
+ // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "startspo2 End");
+ // uint16_t md = PPG_SERVICE_CMD_TYPE_STOP_SPO2_TEST;
+ // send_ppg_cmd_msg(md);
+ // startspo2 = false;
+
+ // uapi_save_runtime_log(RUNTIME_LOG_OXYGEN_MEASURE_END);
+ }
+ else if (state == BloodState::Start && startspo2 == false)
+ {
+ /*充电状态下不进行检测*/
+ // bool isCharging = get_charge_stat(); // 获取充电状态
+ // if (isCharging)
+ // {
+ // WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "充电不能检测");
+ // return;
+ // }
+ // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "startspo2 Start");
+ // uint16_t md = PPG_SERVICE_CMD_TYPE_DO_SPO2_TEST;
+ // send_ppg_cmd_msg(md);
+ // startspo2 = true;
+
+ // uapi_save_runtime_log(RUNTIME_LOG_OXYGEN_MEASURE);
+ }
+ }
+
+ uint16_t BloodOxygenModel::GetSPO2data()
+ {
+ return currentspo2;
+ }
+
+ uint16_t BloodOxygenModel::GetShowSPO2data()
+ {
+ return displayspo2;
+ }
+
+ uint32_t BloodOxygenModel::GetCheckTime()
+ {
+ return timestamp_ms;
+ }
+
+ void BloodOxygenModel::SetCheckTime(uint32_t time)
+ {
+ timestamp_ms = time;
+ }
+ void BloodOxygenModel::SetResult(BloodResult result)
+ {
+ bloodresult_ = result;
+ }
+ BloodResult BloodOxygenModel::GetResult()
+ {
+ return bloodresult_;
+ }
+
+ // 开始检测
+ void BloodOxygenModel::Blood_Start()
+ {
+ displayspo2 = 0;
+ SetResult(BloodResult::NOT_TESTED); // 成功检测
+ // 进行初始化操作
+ if (!sensorstate)
+ {
+ Blood_Control(BloodState::Start);
+ sensorstate = true;
+ }
+ }
+
+ // 结束检测
+ void BloodOxygenModel::Blood_Stop()
+ {
+ valid_counter_ = 0;
+ disvalid_counter_ = 0;
+ unwear_counter_ = 0;
+
+ if (sensorstate)
+ {
+ Blood_Control(BloodState::End);
+ sensorstate = false;
+ Blood_Result(); // 处理结果
+ }
+ }
+
+ // 保存检测数据
+ void BloodOxygenModel::Blood_Save()
+ {
+ uint32_t timestamp = BloodResultPresenter::GetInstance()->GetCurrentTime();
+ SetCheckTime(timestamp);
+#if MSG_SAVE_TEST
+ BloodOxygenData data;
+ data.SPO2 = currentspo2;
+ data.timestamp = timestamp_ms;
+ HealthService::GetInstance()->UpdateHealthData(data);
+#else
+ // HealthService::GetInstance()->send_blood_save();
+#endif
+ }
+
+ // 显示检测结果// 显示检测结果
+ void BloodOxygenModel::Blood_Result()
+ {
+#if 0
+ uint16_t MiniBlood = ConfigModel::GetInstance()->get_configData_int(ConfigModel::CONFIGMODEL_ITEM_OXYGEN_THRESHOLD_VALUE);
+
+ // 检查当前血氧值并设置结果 需要检测成功
+ if(bloodresult_ == BloodResult::SUCCESS){
+ if (currentspo2 < MiniBlood && currentspo2 != 0)
+ {
+ // 测量结果小于最小血氧值
+ bloodresult_ = BloodResult::LOW_RESULT;
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果: 低结果情况, currentspo2 = %d, MiniBlood = %d", currentspo2, MiniBlood);
+ }
+ }
+
+ // 根据结果进行处理
+ switch (bloodresult_)
+ {
+ case BloodResult::SUCCESS:
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果: 成功");
+ Blood_Save();
+ NativeAbility::GetInstance().Back(); // 成功
+ break;
+ }
+ case BloodResult::NOT_WORN: // 未佩戴状态
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果: 未佩戴状态");
+ NativeAbility::GetInstance().ChangeSlice(VIEW_CHECK_ABNORMAL);
+ break;
+ }
+ case BloodResult::TIMEOUT: // 超时情况
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果: 超时情况");
+ NativeAbility::GetInstance().ChangeSlice(VIEW_CHECK_ABNORMAL);
+ break;
+ }
+ case BloodResult::LOW_RESULT: // 低结果情况
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果: 低结果情况");
+ HealthState healthState;
+ healthState.checkType = BLOOD_CHECK;
+ healthState.resultStatus = LOW;
+ healthState.checkResult = MiniBlood;
+ // HealthService::GetInstance()->SetHealthCurrent(healthState);
+ //保存异常数据
+ Blood_Save();
+ NativeAbility::GetInstance().ChangeSlice(VIEW_CHECK_INVALID);
+ break;
+ }
+ case BloodResult::INVALID_DATA: // 无效数据情况
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果: 无效数据情况");
+ NativeAbility::GetInstance().ChangeSlice(VIEW_CHECK_ABNORMAL);
+ break;
+ }
+ default:
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果: 未知状态");
+ break;
+ }
+ }
+ #endif
+ }
+ // 更新佩戴状态
+ void BloodOxygenModel::SetWearStatus(int32_t wear)
+ {
+ // 设置佩戴状态
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenModel Weartest::%d", wear);
+ //开启检测才对佩戴进行监听
+ if (sensorstate)
+ {
+ // 计数更新
+ if (wear_ != 1 && wear != 1)
+ {
+ unwear_counter_++; // 佩戴错误计时器计数
+ }
+ else
+ {
+ unwear_counter_ = 0; // 佩戴正常情况下清零计数器
+ }
+ wear_ = wear;
+ // 检查是否达到了最大未佩戴计数限制
+ if (unwear_counter_ >= MAX_UNWARE_COUNT)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果: 未佩戴计数最大 unwear_counter: %d", unwear_counter_);
+ SetResult(BloodResult::NOT_WORN);
+ Blood_Stop();
+ }
+ }
+ }
+
+ // 更新SPO2数据
+ void BloodOxygenModel::UpSPO2data(uint8_t spo2)
+ {
+ displayspo2 = spo2;
+
+ // 处理有效与无效计数
+ if (displayspo2 != 0)
+ {
+ currentspo2 = displayspo2; // 更新 currentspo2
+ valid_counter_++; // 增加有效计数器
+ disvalid_counter_ = 0; // 清空无效计数器
+ }
+ else
+ {
+ disvalid_counter_++; // 增加无效计数器
+ valid_counter_ = 0; // 清零有效计数器
+ }
+
+ // 检查无效计数器是否达标
+ if (disvalid_counter_ >= MAX_DISVALID_SPO2_COUNT)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果: 无效数达标 disvalid_counter: %d", disvalid_counter_);
+ SetResult(BloodResult::INVALID_DATA); // 无效数达标
+ Blood_Stop();
+ }
+
+ // 检查有效计数器是否达标
+ if (valid_counter_ >= MAX_VALID_SPO2_COUNT)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "检测结果: 成功 valid_counter: %d currentspo2: %d", valid_counter_, currentspo2);
+ SetResult(BloodResult::SUCCESS); // 成功检测
+ Blood_Stop();
+ }
+ }
+
+ // 更新血氧数据
+ void BloodOxygenModel::CleanAllData(void)
+ {
+ // WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Nextday!");
+ // if (MainViewSample::GetInstance() != nullptr && BloodCardView::GetInstance() != nullptr)
+ // {
+ // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "更新主界面血氧卡片");
+ // BloodCardView::GetInstance()->UpSPO2Text();
+ // }
+ // if (BloodResultView::GetInstance() != nullptr)
+ // {
+ // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "更新测量血氧卡片");
+ // BloodResultView::GetInstance()->UpSPO2Text();
+ // }
+ }
+}
+++ /dev/null
-/*\r
- * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.\r
- * Description: bloodOxygen view\r
- * Author:\r
- * Create: 2021-08-01\r
- */\r
-\r
-#include "BloodOxygenPresenter.h"\r
-#include "common/task_manager.h"\r
-#include "BloodOxygenView.h"\r
-#include "BloodOxygenModel.h"\r
-#include "components/ui_label.h"\r
-#include "BloodBandoffView.h"\r
-#include "ChangeSliceListener.h"\r
-#include "ui_service.h"\r
-#include "NativeRegisterManager.h"\r
-\r
-namespace OHOS {\r
-\r
-REGIST_MENU(VIEW_BLOODOXY_SAMPLE, BloodOxygenView, BloodOxygenPresenter, PNG_APPLIST_SPO2_IMAGE, PNG_APPLIST_DEFAULT_IMG, "血氧饱和度");\r
-\r
-static BloodOxygenPresenter *g_pMainView = nullptr;\r
-static constexpr uint16_t PROGRESS_VALUE_MIN = 0;\r
-static constexpr uint16_t PROGRESS_VALUE_MAX = 100;\r
-\r
-BloodOxygenPresenter::BloodOxygenPresenter()\r
-{\r
- count = PROGRESS_VALUE_MAX;\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenPresenter::new BloodOxygenPresenter");\r
- g_pMainView = this;\r
-}\r
-\r
-BloodOxygenPresenter::~BloodOxygenPresenter()\r
-{\r
- g_pMainView = nullptr;\r
-}\r
-\r
-BloodOxygenPresenter* BloodOxygenPresenter::GetInstance()\r
-{\r
- return g_pMainView;\r
-}\r
-\r
-void BloodOxygenPresenter::OnStart()\r
-{\r
- SendMsgToUIService(UI_ADD_SLEEP_VETO, 0, nullptr, 0);\r
-}\r
-\r
-void BloodOxygenPresenter::OnStop()\r
-{\r
- SendMsgToUIService(UI_RM_SLEEP_VETO, 0, nullptr, 0);\r
-}\r
-\r
-bool BloodOxygenPresenter::CheckPointersValue()\r
-{\r
- if (BloodOxygenView::GetInstance() == nullptr) {\r
- return false;\r
- }\r
-\r
- if (BloodBandoffView::GetInstance() == nullptr) {\r
- return false;\r
- }\r
-\r
- if (BloodOxygenModel::GetInstance() == nullptr) {\r
- return false;\r
- }\r
- return true;\r
-}\r
-\r
-\r
-bool BloodOxygenPresenter::OnDrag(UIView& view, const DragEvent& event)\r
-{\r
- UNUSED(view);\r
- if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT) {\r
- BloodOxygenModel::GetInstance()->SetBloodOxygenViewStatus(false);\r
- BloodOxygenView::GetInstance()->GetTestButton()->SetTouchable(true);\r
- NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST);\r
- }\r
- return false;\r
-}\r
-\r
-\r
-bool BloodOxygenPresenter::OnClick(UIView& view, const ClickEvent& event)\r
-{\r
- UNUSED(view);\r
- UNUSED(event);\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenPresenter::OnClick");\r
- if (!CheckPointersValue()) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenPresenter::Pointers is empty");\r
- return false;\r
- }\r
- BloodOxygenView::GetInstance()->GetPercent()->SetText("");\r
- BloodOxygenView::GetInstance()->GetBloodOxygenGroup()->SetVisible(false);\r
- BloodBandoffView::GetInstance()->GetBandoffViewGroup()->SetVisible(true);\r
- BloodBandoffView::GetInstance()->GetImageAnimator()->Stop();\r
- BloodBandoffView::GetInstance()->GetImageAnimator()->SetRepeat(false);\r
- BloodBandoffView::GetInstance()->GetImageAnimator()->Start();\r
- BloodOxygenModel::GetInstance()->SetBloodBandoffViewStatus(true);\r
- BloodOxygenView::GetInstance()->GetTestButton()->SetTouchable(false);\r
- return true;\r
-}\r
-\r
-void BloodOxygenPresenter::ProgressNotify(void)\r
-{\r
- if (!CheckPointersValue()) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenPresenter::Pointers is empty");\r
- return;\r
- }\r
-\r
- if (BloodOxygenModel::GetInstance()->GetBloodOxygenViewStatus()) {\r
- count--;\r
- BloodOxygenView::GetInstance()->GetCircleProgress()->SetValue(count);\r
- if (count == PROGRESS_VALUE_MIN) {\r
- BloodOxygenView::GetInstance()->GetPercent()->SetText("98%");\r
- BloodOxygenModel::GetInstance()->SetBloodOxygenViewStatus(false);\r
- count = PROGRESS_VALUE_MAX;\r
- BloodOxygenView::GetInstance()->GetCircleProgress()->SetValue(count);\r
- BloodOxygenView::GetInstance()->GetTestButton()->SetTouchable(true);\r
- }\r
- }\r
-}\r
-\r
-void BloodOxygenPresenter::ReturnInterface()\r
-{\r
- if (BloodOxygenModel::GetInstance()->GetBloodBandoffViewStatus()) {\r
- if (!BloodBandoffView::GetInstance()->GetImageAnimator()->GetState()) {\r
- BloodOxygenModel::GetInstance()->SetBloodBandoffViewStatus(false);\r
- BloodOxygenModel::GetInstance()->SetBloodOxygenViewStatus(true);\r
-\r
- BloodBandoffView::GetInstance()->GetBandoffViewGroup()->SetVisible(false);\r
- BloodOxygenView::GetInstance()->GetBloodOxygenGroup()->SetVisible(true);\r
- }\r
- }\r
-}\r
-\r
-void BloodOxygenPresenter::Notify(void)\r
-{\r
- ProgressNotify();\r
- ReturnInterface();\r
-}\r
-}
\ No newline at end of file
+++ /dev/null
-/*\r
- * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.\r
- * Description: bloodOxygen view\r
- * Author:\r
- * Create: 2021-08-01\r
- */\r
-\r
-#include "BloodOxygenView.h"\r
-#include "BloodOxygenModel.h"\r
-\r
-namespace OHOS {\r
-// 按钮设置\r
-static constexpr uint16_t TESTBUTTON_ZERO = 0;\r
-static constexpr uint16_t TESTBUTTON_X = 167;\r
-static constexpr uint16_t TESTBUTTON_Y = 360;\r
-\r
-// 进度条参数设置\r
-static constexpr uint16_t CIRCLE_PROGRESS_VALUE = 100;\r
-static constexpr uint16_t CIRCLE_PROGRESS_RADIUS = 43;\r
-static constexpr uint16_t CIRCLE_PROGRESS_STARTANGLE = 360;\r
-static constexpr uint16_t CIRCLE_PROGRESS_ENDANGLE = 0;\r
-static constexpr uint16_t CIRCLE_PROGRESS_WIDTH = 10;\r
-static constexpr uint16_t CIRCLE_PROGRESS_POSITION_X = 10;\r
-static constexpr uint16_t CIRCLE_PROGRESS_POSITION_Y = 10;\r
-static constexpr uint16_t CIRCLE_PROGRESS_CENTER_X = 195;\r
-static constexpr uint16_t CIRCLE_PROGRESS_CENTER_Y = 37;\r
-static constexpr uint16_t CIRCLE_PROGRESS_POSITION_WIDTH = 275;\r
-static constexpr uint16_t CIRCLE_PROGRESS_POSITION_HEIGHT = 130;\r
-static constexpr uint16_t CIRCLE_PROGRESS_LEFT = 10;\r
-static constexpr uint16_t CIRCLE_PROGRESS_TOP = 5;\r
-\r
-// 动态刷新设置\r
-static constexpr uint16_t IMAGE_SIZE = 60;\r
-static constexpr uint16_t IMAGE_POSITION_X = 186;\r
-static constexpr uint16_t IMAGE_POSITION_Y = 23;\r
-static constexpr uint16_t IMAGEANIMATORVIEW_SIZE = 31;\r
-static constexpr uint16_t IMAGEANIMATORVIEW_SPEED = 40;\r
-\r
-// 血氧主图设置\r
-static constexpr uint16_t IMAGE_PROGRESS_POSITION_X = 176;\r
-static constexpr uint16_t IMAGE_PROGRESS_POSITION_Y = 13;\r
-\r
-// 血氧%显示\r
-static constexpr uint16_t LABEL_PERCENT_POSITION_X = 258;\r
-static constexpr uint16_t LABEL_PERCENT_POSITION_Y = 40;\r
-\r
-// 血氧柱状图\r
-static constexpr int16 VIEW_MAX_X = 415;\r
-static constexpr int16 VIEW_MIN_X = 35;\r
-static constexpr int16 VIEW_MAX_Y = 150;\r
-static constexpr int16 VIEW_MIN_Y = 0;\r
-static constexpr int16 VIEW_WIDTH = 7;\r
-static constexpr int16 VIEW_HEIGHT = 300;\r
-static constexpr uint16_t VIEW_BACKGROUND_OPA = 127;\r
-static constexpr uint16_t VIEW_BORDER_RADIUS = 5;\r
-static constexpr uint16_t BORDER_OPA = 127;\r
-static constexpr uint16_t BORDER_WIDTH = 20;\r
-\r
-static constexpr uint16_t TITLE_LABEL_DEFAULT_HEIGHT = 30;\r
-static constexpr uint16_t FONT_DEFAULT_SIZE = 20;\r
-static constexpr uint16_t VIEW_DISTANCE_TO_LEFT_SIDE = 48;\r
-static constexpr uint16_t TEXT_DISTANCE_TO_LEFT_SIDE = 50;\r
-static constexpr uint16_t TEXT_DISTANCE_TO_TOP_SIDE = 11;\r
-static constexpr uint16_t BUTTON_LABEL_SIZE = 40;\r
-static constexpr uint8_t BUTTON_STYLE_BORDER_RADIUS_VALUE = 20;\r
-static constexpr uint32 BUTTON_STYLE_BACKGROUND_COLOR_VALUE = 0xFFFFFF;\r
-static constexpr uint16_t BUTTON_WIDHT2 = 120;\r
-static constexpr uint16_t BUTTON_HEIGHT2 = 60;\r
-\r
-// 字体大小\r
-static constexpr uint16_t PERCENT_FONT_SIZE = 25;\r
-\r
-static constexpr uint16_t MATH_ZERO = 0;\r
-\r
-static BloodOxygenView *g_pMainView = nullptr;\r
-static ImageAnimatorInfo g_imageAnimatorInfo_new[31] = {\r
- {PNG_BLOOD_FLOW_IMAGE_0, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_BLOOD_FLOW_IMAGE_1, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_BLOOD_FLOW_IMAGE_2, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_BLOOD_FLOW_IMAGE_3, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_BLOOD_FLOW_IMAGE_4, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_BLOOD_FLOW_IMAGE_5, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_BLOOD_FLOW_IMAGE_6, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_BLOOD_FLOW_IMAGE_7, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_BLOOD_FLOW_IMAGE_8, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_BLOOD_FLOW_IMAGE_9, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_BLOOD_FLOW_IMAGE_10, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_BLOOD_FLOW_IMAGE_11, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_BLOOD_FLOW_IMAGE_12, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_BLOOD_FLOW_IMAGE_13, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_BLOOD_FLOW_IMAGE_14, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_BLOOD_FLOW_IMAGE_15, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_BLOOD_FLOW_IMAGE_16, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_BLOOD_FLOW_IMAGE_17, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_BLOOD_FLOW_IMAGE_18, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_BLOOD_FLOW_IMAGE_19, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_BLOOD_FLOW_IMAGE_20, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_BLOOD_FLOW_IMAGE_21, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_BLOOD_FLOW_IMAGE_22, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_BLOOD_FLOW_IMAGE_23, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_BLOOD_FLOW_IMAGE_24, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_BLOOD_FLOW_IMAGE_25, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_BLOOD_FLOW_IMAGE_26, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_BLOOD_FLOW_IMAGE_27, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_BLOOD_FLOW_IMAGE_28, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_BLOOD_FLOW_IMAGE_29, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
- {PNG_BLOOD_FLOW_IMAGE_30, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},\r
-};\r
-\r
-BloodOxygenView::BloodOxygenView()\r
-{\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::BloodOxygenView");\r
- imageViewMain = nullptr;\r
- imageViewProgress = nullptr;\r
- group = nullptr;\r
- percent = nullptr;\r
- testButton = nullptr;\r
- circleProgress = nullptr;\r
- imageAnimator = nullptr;\r
- g_pMainView = this;\r
- bloodbandoff = new BloodBandoffView();\r
- if (bloodbandoff == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::new BloodBandoffView fail");\r
- }\r
-}\r
-\r
-BloodOxygenView::~BloodOxygenView()\r
-{\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::~BloodOxygenView");\r
- group->RemoveAll();\r
- delete imageViewMain;\r
- delete imageViewProgress;\r
- delete group;\r
- delete testButton;\r
- delete percent;\r
- delete circleProgress;\r
- delete imageAnimator;\r
- delete bloodbandoff;\r
- imageViewMain = nullptr;\r
- imageViewProgress = nullptr;\r
- group = nullptr;\r
- percent = nullptr;\r
- testButton = nullptr;\r
- circleProgress = nullptr;\r
- imageAnimator = nullptr;\r
- g_pMainView = nullptr;\r
- bloodbandoff = nullptr;\r
-}\r
-\r
-BloodOxygenView *BloodOxygenView::GetInstance(void)\r
-{\r
- return g_pMainView;\r
-}\r
-\r
-UILabel *BloodOxygenView::GetPercent()\r
-{\r
- return percent;\r
-}\r
-\r
-UIViewGroup *BloodOxygenView::GetBloodOxygenGroup()\r
-{\r
- return group;\r
-}\r
-\r
-UILabelButton *BloodOxygenView::GetTestButton()\r
-{\r
- return testButton;\r
-}\r
-\r
-UICircleProgress *BloodOxygenView::GetCircleProgress()\r
-{\r
- return circleProgress;\r
-}\r
-\r
-UILabelButton *BloodOxygenView::CreateAndSetUIButton(const char *title)\r
-{\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::CreateAndSetUIButton");\r
- UILabelButton* btn = new UILabelButton();\r
- if (btn == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::new UILabelButton fail");\r
- return nullptr;\r
- }\r
- btn->SetPosition(TESTBUTTON_X, TESTBUTTON_Y, BUTTON_WIDHT2, BUTTON_HEIGHT2);\r
- btn->SetText(title);\r
- btn->SetTextColor(Color::Red());\r
- btn->SetFont(DEFAULT_VECTOR_FONT_FILENAME, BUTTON_LABEL_SIZE);\r
- btn->SetAlign(TEXT_ALIGNMENT_CENTER);\r
- btn->SetStyleForState(STYLE_BORDER_RADIUS, BUTTON_STYLE_BORDER_RADIUS_VALUE, UIButton::RELEASED);\r
- btn->SetStyleForState(STYLE_BORDER_RADIUS, BUTTON_STYLE_BORDER_RADIUS_VALUE, UIButton::PRESSED);\r
- btn->SetStyleForState(STYLE_BORDER_RADIUS, BUTTON_STYLE_BORDER_RADIUS_VALUE, UIButton::INACTIVE);\r
- btn->SetStyleForState(STYLE_BACKGROUND_COLOR, BUTTON_STYLE_BACKGROUND_COLOR_VALUE, UIButton::RELEASED);\r
- btn->SetStyleForState(STYLE_BACKGROUND_COLOR, BUTTON_STYLE_BACKGROUND_COLOR_VALUE, UIButton::PRESSED);\r
- btn->SetStyleForState(STYLE_BACKGROUND_COLOR, BUTTON_STYLE_BACKGROUND_COLOR_VALUE, UIButton::INACTIVE);\r
- UIView::OnClickListener* clickLeftListener = (UIView::OnClickListener*)OHOS::BloodOxygenPresenter::GetInstance();\r
- if (clickLeftListener == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::new clickLeftListener fail");\r
- return nullptr;\r
- }\r
- btn->SetOnClickListener(clickLeftListener);\r
- return btn;\r
-}\r
-\r
-\r
-bool BloodOxygenView::SetOnDragListener()\r
-{\r
- UIView::OnDragListener *dragListener = (UIView::OnDragListener*)OHOS::BloodOxygenPresenter::GetInstance();\r
- if (dragListener == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::OnDragListener fail");\r
- return false;\r
- }\r
- group->SetDraggable(true);\r
- group->SetTouchable(true);\r
- group->SetOnDragListener(dragListener);\r
- return true;\r
-}\r
-\r
-UIView *BloodOxygenView::CreateAndSetUIView(int16 x, int16 y) const\r
-{\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::CreateAndSetUIView");\r
- UIView* view = new UIView();\r
- if (view == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::new View fail");\r
- return nullptr;\r
- }\r
- if (x > VIEW_MAX_X || x < VIEW_MIN_X) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::X error");\r
- return nullptr;\r
- }\r
- if (y < VIEW_MIN_Y || y >VIEW_MAX_Y) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::Y error");\r
- return nullptr;\r
- }\r
- view->SetStyle(STYLE_BACKGROUND_COLOR, Color::Green().full);\r
- view->SetStyle(STYLE_BACKGROUND_OPA, VIEW_BACKGROUND_OPA); // 127 : background opacity\r
- view->SetStyle(STYLE_BORDER_RADIUS, VIEW_BORDER_RADIUS); // 5 : radius value\r
- view->SetStyle(STYLE_BORDER_COLOR, Color::Gray().full);\r
- view->SetStyle(STYLE_BORDER_OPA, BORDER_OPA); // 127 : border opacity\r
- view->SetStyle(STYLE_BORDER_WIDTH, BORDER_WIDTH); // 20 : border width\r
- view->SetStyle(STYLE_PADDING_LEFT, MATH_ZERO);\r
- view->SetStyle(STYLE_PADDING_RIGHT, MATH_ZERO);\r
- view->SetStyle(STYLE_PADDING_TOP, MATH_ZERO);\r
- view->SetStyle(STYLE_PADDING_BOTTOM, MATH_ZERO);\r
- view->SetStyle(STYLE_MARGIN_LEFT, MATH_ZERO);\r
- view->SetStyle(STYLE_MARGIN_RIGHT, MATH_ZERO);\r
- view->SetStyle(STYLE_MARGIN_TOP, MATH_ZERO);\r
- view->SetStyle(STYLE_MARGIN_BOTTOM, MATH_ZERO);\r
-\r
- view->SetPosition(x, VIEW_HEIGHT - y);\r
- view->SetStyle(STYLE_BORDER_WIDTH, MATH_ZERO);\r
- view->SetStyle(STYLE_BORDER_RADIUS, MATH_ZERO); // 2 : half width 10 : offset\r
- view->Resize(VIEW_WIDTH, y);\r
- return view;\r
-}\r
-\r
-UICircleProgress *BloodOxygenView::CreateAndSetUICircleProgress()\r
-{\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::CreateAndSetUICircleProgress");\r
- UICircleProgress *circle = new UICircleProgress();\r
- circle->SetPosition(CIRCLE_PROGRESS_POSITION_X, CIRCLE_PROGRESS_POSITION_Y,\r
- CIRCLE_PROGRESS_POSITION_WIDTH, CIRCLE_PROGRESS_POSITION_HEIGHT);\r
- circle->SetCenterPosition(CIRCLE_PROGRESS_CENTER_X, CIRCLE_PROGRESS_CENTER_Y);\r
- circle->SetRadius(CIRCLE_PROGRESS_RADIUS);\r
- circle->SetValue(CIRCLE_PROGRESS_VALUE);\r
- circle->SetBackgroundStyle(STYLE_LINE_WIDTH,\r
- circle->GetBackgroundStyle(STYLE_LINE_WIDTH) + CIRCLE_PROGRESS_WIDTH);\r
- circle->SetForegroundStyle(STYLE_LINE_WIDTH,\r
- circle->GetForegroundStyle(STYLE_LINE_WIDTH) + CIRCLE_PROGRESS_WIDTH);\r
- circle->SetStyle(STYLE_PADDING_LEFT, CIRCLE_PROGRESS_LEFT);\r
- circle->SetStyle(STYLE_PADDING_TOP, CIRCLE_PROGRESS_TOP);\r
- circle->SetStartAngle(CIRCLE_PROGRESS_STARTANGLE);\r
- circle->SetEndAngle(CIRCLE_PROGRESS_ENDANGLE);\r
- circle->SetImage(nullptr, PNG_PROGRESS_BAR_TMAGE);\r
- circle->SetLineColor(Color::Black());\r
-\r
- return circle;\r
-}\r
-\r
-bool BloodOxygenView::InitImageDisplay()\r
-{\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::InitImageDisplay");\r
- imageViewMain = new UIImageView();\r
- if (imageViewMain == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::new UIImageView fail");\r
- return false;\r
- }\r
- imageViewMain->SetPosition(MATH_ZERO, MATH_ZERO); // 30 : offset\r
- imageViewMain->SetSrc(PNG_BLOODOXYGEN_IMAGE_PATH);\r
- group->Add(imageViewMain);\r
-\r
- imageAnimator = new UIImageAnimatorView();\r
- if (imageAnimator == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::new UIImageAnimatorView fail");\r
- return false;\r
- }\r
- imageAnimator->SetImageAnimatorSrc(g_imageAnimatorInfo_new, IMAGEANIMATORVIEW_SIZE, IMAGEANIMATORVIEW_SPEED);\r
- imageAnimator->Start();\r
- imageAnimator->SetRepeat(true);\r
- group->Add(imageAnimator);\r
-\r
- imageViewProgress = new UIImageView();\r
- if (imageViewProgress == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::new UIImageView fail");\r
- return false;\r
- }\r
- imageViewProgress->SetPosition(IMAGE_PROGRESS_POSITION_X, IMAGE_PROGRESS_POSITION_Y); // 30 : offset\r
- imageViewProgress->SetSrc(PNG_PROGRESS_BAR_TMAGE);\r
- group->Add(imageViewProgress);\r
-\r
- return true;\r
-}\r
-\r
-void BloodOxygenView::OnStart()\r
-{\r
- group = new UIViewGroup();\r
- if (group == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::new group fail");\r
- return;\r
- }\r
- group->SetPosition(MATH_ZERO, MATH_ZERO);\r
- group->Resize(VERTICAL_RESOLUTION, HORIZONTAL_RESOLUTION);\r
-\r
- if (!InitImageDisplay()) {\r
- return;\r
- }\r
-\r
- if (!SetOnDragListener()) {\r
- return;\r
- }\r
-\r
- circleProgress = CreateAndSetUICircleProgress();\r
- if (circleProgress == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::new circleProgress fail");\r
- return;\r
- }\r
- group->Add(circleProgress);\r
-\r
- percent = new UILabel();\r
- if (percent == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::new Label fail");\r
- return;\r
- }\r
- percent->SetPosition(LABEL_PERCENT_POSITION_X, LABEL_PERCENT_POSITION_Y,\r
- VIEW_DISTANCE_TO_LEFT_SIDE, TITLE_LABEL_DEFAULT_HEIGHT);\r
- percent->SetStyle(STYLE_BACKGROUND_COLOR, OPA_TRANSPARENT);\r
- percent->SetText("%97");\r
- percent->SetFont(DEFAULT_VECTOR_FONT_FILENAME, PERCENT_FONT_SIZE);\r
- percent->SetTextColor(Color::Red());\r
- group->Add(percent);\r
-\r
- testButton = CreateAndSetUIButton("测试");\r
- if (testButton == nullptr) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodOxygenView::new Button fail");\r
- return;\r
- }\r
- group->Add(testButton);\r
-\r
- if (OHOS::BloodOxygenModel::GetInstance()->GetBloodOxygenViewStatus()) {\r
- testButton->SetTouchable(false);\r
- percent->SetText("");\r
- }\r
-\r
- BloodBandoffView::GetInstance()->CreateUIViewGroup();\r
-\r
- AddViewToRootContainer(group);\r
- AddViewToRootContainer(BloodBandoffView::GetInstance()->GetBandoffViewGroup());\r
- BloodBandoffView::GetInstance()->GetBandoffViewGroup()->SetVisible(false);\r
-}\r
-}\r
--- /dev/null
+/*
+ * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
+ * Description: bloodOxygen view
+ * Author:
+ * Create: 2021-08-01
+ */
+
+#include "bloodoxygen/include/BloodResultPresenter.h"
+#include "common/task_manager.h"
+#include "BloodOxygenModel.h"
+
+#include "bloodoxygen/include/BloodDetectionView.h"
+#include "bloodoxygen/include/BloodResultView.h"
+
+#include "components/ui_label.h"
+#include "components/ui_label_ext.h"
+
+#include "ChangeSliceListener.h"
+#include "broadcast_service.h"
+#include <fstream>
+#include "iostream"
+#include <sstream>
+#include <string>
+#include <cstdlib>
+#include <ctime>
+#include "wearable_log.h"
+#include "cmsis_os.h"
+#include "securec.h"
+#include "broadcast_service.h"
+#include "graphic_service.h"
+#include <chrono>
+#include <thread>
+#include <sys/time.h>
+
+// #include "ppg_service.h"
+// #include "displaybrightness/include/DisplayBrightnessModel.h"
+#include "power_display_service.h"
+#include "custom_utils.h"
+// #include "cywee_service.h"
+// #include "battery_hal.h"
+
+// #include "heart_blood/health_service/health_service.h"
+#include "gfx_utils/mem_check.h"
+#include "NativeRegisterManager.h"
+
+#define BLOODKEYABLE 1
+namespace OHOS
+{
+ static constexpr uint16_t PROGRESS_VALUE_MIN = 0;
+ static constexpr uint16_t PROGRESS_VALUE_MAX = 10;
+
+ static BloodResultPresenter *g_pBloodResultPresenter;
+
+ REGIST_MENU(VIEW_BLOOD_RESULT, BloodResultView, BloodResultPresenter, PNG_APPLIST_SPO2_IMAGE, PNG_APPLIST_DEFAULT_IMG, "血氧饱和度");
+
+ /* -------------------------------------------------------------------------- */
+ // 获取当前的时间戳
+ uint32_t BloodResultPresenter::GetCurrentTime()
+ {
+ uint32_t time;
+ if (uapi_get_timestampe_ss(&time) != ERRCODE_SUCC)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to get timestamp");
+ return 0;
+ }
+ return time;
+ }
+
+ // 获取时间差,现在传进来的是两个时间戳
+ int BloodResultPresenter::GetTDOA(uint32_t new_time, uint32_t old_time)
+ {
+ if (new_time == old_time || old_time > new_time)
+ {
+ return 0;
+ }
+ int time_diff_seconds = new_time - old_time;
+ // 转换为分钟的差值
+ int time_diff_minutes = time_diff_seconds / 60;
+ return time_diff_minutes;
+ }
+ /* -------------------------------------------------------------------------- */
+ BloodResultPresenter::BloodResultPresenter()
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodResultPresenter::new BloodResultPresenter");
+ g_pBloodResultPresenter = this;
+#ifdef MEM_CHECK
+ MemCheck::GetInstance()->EnableLeakCheck(true);
+#endif
+ }
+ BloodResultPresenter::~BloodResultPresenter()
+ {
+ g_pBloodResultPresenter = nullptr;
+#ifdef MEM_CHECK
+ MemCheck::GetInstance()->EnableLeakCheck(false);
+#endif
+ }
+ BloodResultPresenter *BloodResultPresenter::GetInstance()
+ {
+ return g_pBloodResultPresenter;
+ }
+
+ bool BloodResultPresenter::OnDrag(UIView &view, const DragEvent &event)
+ {
+ return true;
+ }
+ bool BloodResultPresenter::OnDragEnd(UIView &view, const DragEvent &event)
+ {
+ if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT)
+ {
+ // NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST);
+ // NativeAbility::GetInstance().Back(TransitionType::TRANSITION_BACK_TO_HEXAGONS);
+ return true;
+ }
+ return false;
+ }
+ bool BloodResultPresenter::OnKeyAct(UIView &view, const KeyEvent &event)
+ {
+ unsigned short keyID = event.GetKeyId();
+ unsigned short keyState = event.GetState();
+ // 如果是power键,且是亮屏状态,按键释放就返回上一级
+ if (keyID == static_cast<uint16_t>(ZliteKeyCode::ZLITE_KEY_POWER) &&
+ keyState == 1 && uapi_get_screen_state() == 0)
+ {
+ // NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST);
+ // NativeAbility::GetInstance().Back(TransitionType::TRANSITION_BACK_TO_HEXAGONS);
+ }
+ return true;
+ }
+
+ bool BloodResultPresenter::OnClick(UIView &view, const ClickEvent &event)
+ {
+ if (strcmp(view.GetViewId(), CLICK_BLOOD) == 0)
+ {
+ // // 如果正在充电进入提醒界面
+ // if (get_charge_stat())
+ // {
+ // HealthState highHealthState;
+ // highHealthState.checkType = CHARGE;
+ // HealthService::GetInstance()->SetHealthCurrent(highHealthState);
+ // NativeAbility::GetInstance().ChangeSlice(VIEW_CHECK_INVALID, TransitionType::TRANSITION_BACK_TO_HEXAGONS);
+ // }
+ // else
+ // {
+ // NativeAbility::GetInstance().EnterSlice(VIEW_BLOOD_CHECK, TransitionType::TRANSITION_BACK_TO_HEXAGONS);
+ // }
+ }
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodPresenter::OnClick");
+ return true;
+ }
+
+}
\ No newline at end of file
--- /dev/null
+/***
+ * @Date: 2024-04-15 10:55:58
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-07-31 14:36:25
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/src/BloodResultView.cpp
+ */
+
+#include "common/image_cache_manager.h"
+#include "ui_resource_image.h"
+#include <ui_scroll_view.h>
+#include "components/ui_button.h"
+// #include "MainViewSample.h"
+#include "components/ui_view_group.h"
+// #include "DialModelSPO2.h"
+// #include "DialModelHeartRate.h"
+#include "BloodOxygenModel.h"
+
+#include "UiConfig.h"
+#include "uicomponents/UIComponents.h"
+// #include "MainPresenterSample.h"
+
+#include "bloodoxygen/include/BloodResultPresenter.h"
+#include "bloodoxygen/include/BloodResultView.h"
+namespace OHOS
+{
+ static BloodResultView *g_pBloodResultView{nullptr};
+ static const char *BLOODBACKPATH = "/user/res/Blood/beijing.bin";
+
+ BloodResultView::BloodResultView()
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodResultView::BloodResultView");
+ g_pBloodResultView = this;
+ }
+
+ BloodResultView::~BloodResultView()
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodResultView::~BloodResultView");
+ DeInit();
+ g_pBloodResultView = nullptr;
+ }
+
+ BloodResultView *BloodResultView::GetInstance()
+ {
+ return g_pBloodResultView;
+ }
+
+ /* -------------------------------------------------------------------------- */
+ void BloodResultView::UpSPO2Text()
+ {
+ if (bloodLabel == nullptr || timeLabel == nullptr)
+ return;
+
+ // 更新血氧数据
+ uint16_t spo2 = BloodOxygenModel::GetInstance()->GetSPO2data();
+ if (spo2 != 0) // 判断是否为默认数据
+ {
+ // 更新数据
+ std::string bloodoxygenStr = std::to_string(spo2) + "%";
+ bloodLabel->SetText(bloodoxygenStr.c_str());
+
+ // 获取时间差
+ uint32_t time = BloodResultPresenter::GetInstance()->GetCurrentTime();
+ uint32_t check_time = BloodOxygenModel::GetInstance()->GetCheckTime();
+ int time_diff = BloodResultPresenter::GetInstance()->GetTDOA(time, check_time);
+
+ if (time_diff == 0)
+ {
+ timeLabel->SetTextId(STR_CHECKNEW);
+ }
+ else if (time_diff <= 60)
+ {
+ UpdateLabel(timeLabel, time_diff, STR_CHECKTIME);
+ }
+ else
+ {
+ timeLabel->SetTextId(STR_CHECKLONG);
+ }
+ }
+ else
+ {
+ bloodLabel->SetText("--");
+ timeLabel->SetTextId(STR_CHECKNO);
+ }
+ }
+
+ /* -------------------------------------------------------------------------- */
+ /***
+ * @description:
+ * @return 添加按键是否成功
+ */
+ bool BloodResultView::AddButton()
+ {
+ InitButtonExt(checkButton, 118, 336, 230, 80, CLICK_BLOOD, STR_CHECK, 30);
+ checkButton->SetStyle(STYLE_BACKGROUND_COLOR, 0xffFF5A36); // 设置按键颜色
+ // 设置按键监听
+ UIView::OnClickListener *clickListener = (UIView::OnClickListener *)OHOS::BloodResultPresenter::GetInstance();
+ checkButton->SetOnClickListener(clickListener);
+
+ AddViewToRootContainer(checkButton);
+ return true;
+ }
+ /***
+ * @description:
+ * @return 初始化标签是否成功
+ */
+ bool BloodResultView::InitLable()
+ {
+ /*初始化title*/
+ InitLabelExt(titleLabel, 83, 50, 300, 35, "title", STR_BLOOD, DEFAULT_VECTOR_FONT_FILENAME, 30);
+ /*初始化血氧值label*/
+ InitUILabel(bloodLabel, 83, 32, 300, 300, "bloodtext", "--", DEFAULT_VECTOR_FONT_FILENAME, 140);
+ /*初始化检测时间*/
+ InitLabelExt(timeLabel, 53, 270, 360, 35, "time", STR_CHECKNO, DEFAULT_VECTOR_FONT_FILENAME, 30);
+ // 设置来回滚动属性
+ timeLabel->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);
+ timeLabel->SetRollSpeed(23);
+
+ UpSPO2Text();
+
+ AddViewToRootContainer(titleLabel);
+ AddViewToRootContainer(bloodLabel);
+ AddViewToRootContainer(timeLabel);
+
+ return true;
+ }
+ /***
+ * @description:
+ * @return 初始化背景是否成功
+ */
+ bool BloodResultView::Initbackground()
+ {
+
+ background = new UIImageView();
+ background->SetPosition(0, 0, 466, 466);
+ background->SetSrc(BLOODBACKPATH);
+
+ AddViewToRootContainer(background);
+ return true;
+ }
+ /***
+ * @description:
+ * @return 是否初始化成功
+ */
+ bool BloodResultView::BloodResultViewInit()
+ {
+
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bool BloodResultView::InitView()");
+ if (!Initbackground())
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Initbackground error!");
+ };
+ if (!InitLable())
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "InitLable error!");
+ };
+ if (!AddButton())
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AddButton error!");
+ };
+ return true;
+ }
+ /***
+ * @description:
+ * @return 删除组件
+ */
+ void BloodResultView::DeInit()
+ {
+ if (background != nullptr)
+ {
+ delete background;
+ background = nullptr;
+ }
+ if (bloodLabel != nullptr)
+ {
+ delete bloodLabel;
+ bloodLabel = nullptr;
+ }
+ if (timeLabel != nullptr)
+ {
+ delete timeLabel;
+ timeLabel = nullptr;
+ }
+ if (titleLabel != nullptr)
+ {
+ delete titleLabel;
+ titleLabel = nullptr;
+ }
+ if(checkButton!=nullptr)
+ {
+ delete checkButton;
+ checkButton = nullptr;
+ }
+ }
+
+ void BloodResultView::OnStart()
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodResultView::OnStart");
+ View<BloodResultPresenter>::OnStart();
+
+ if (!BloodResultViewInit())
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodResultView::InitBloodView fail");
+ }
+
+ GetRootContainer()->SetDraggable(true);
+ GetRootContainer()->SetTouchable(true);
+ GetRootContainer()->SetOnDragListener(presenter_);
+
+ // 增加按键监听
+ RootView::OnKeyActListener *keyactListener = (RootView::OnKeyActListener *)OHOS::BloodResultPresenter::GetInstance();
+ RootView::GetInstance()->SetOnKeyActListener(keyactListener);
+ }
+
+}