${CMAKE_CURRENT_SOURCE_DIR}/nativeui/activity/src/ActivityModel.cpp
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/heartrate/src/HeartRateView.cpp
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/heartrate/src/HeartModel.cpp
+ ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/heartrate/src/HeartBandoffView.cpp
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/heartrate/src/HeartCheckView.cpp
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/heartrate/src/HeartResultView.cpp
${CMAKE_CURRENT_SOURCE_DIR}/nativeui/heartrate/src/HeartView.cpp
-/*
- * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
- * Description: bloodOxygen view
- * Author:
- * Create: 2021-08-01
- */
-
#include "BloodOxygenModel.h"
#include "DialModelSPO2.h"
#include "wearable_log.h"
#include "BloodOxygenPresenter.h"
+
namespace OHOS
{
- BloodOxygenModel::BloodOxygenModel()
+ BloodOxygenModel::BloodOxygenModel() : OxygenView(false), BandoffView(false), CheckView(false), ResultView(false), CheckStatus(false), SPO2_(DialModelSPO2::GetInstance()->GetSPO2Data())
{
- OxygenView = false;
- BandoffView = false;
- CheckView = false;
- ResultView = false;
- CheckStatus = false;
- // 初始化血氧值
- SPO2_ = DialModelSPO2::GetInstance()->GetSPO2Data();
}
- bool BloodOxygenModel::GetBloodOxygenViewStatus(void)
- {
- return OxygenView;
- }
+ bool BloodOxygenModel::GetBloodOxygenViewStatus() { return OxygenView; }
- bool BloodOxygenModel::GetBloodBandoffViewStatus(void)
- {
- return BandoffView;
- }
+ bool BloodOxygenModel::GetBloodBandoffViewStatus() { return BandoffView; }
- bool BloodOxygenModel::GetBloodCheckViewStatus(void)
- {
- return CheckView;
- }
+ bool BloodOxygenModel::GetBloodCheckViewStatus() { return CheckView; }
- void BloodOxygenModel::SetBloodBandoffViewStatus(bool bandoffViewStatus)
- {
- BandoffView = bandoffViewStatus;
- }
+ void BloodOxygenModel::SetBloodBandoffViewStatus(bool bandoffViewStatus) { BandoffView = bandoffViewStatus; }
- void BloodOxygenModel::SetBloodOxygenViewStatus(bool oxygenViewStatus)
- {
- OxygenView = oxygenViewStatus;
- }
+ void BloodOxygenModel::SetBloodOxygenViewStatus(bool oxygenViewStatus) { OxygenView = oxygenViewStatus; }
- void BloodOxygenModel::SetBloodCheckViewStatus(bool checkViewStatus)
- {
- CheckView = checkViewStatus;
- }
+ void BloodOxygenModel::SetBloodCheckViewStatus(bool checkViewStatus) { CheckView = checkViewStatus; }
+
+ bool BloodOxygenModel::GetCheckStatus() { return CheckStatus; }
+
+ void BloodOxygenModel::SetCheckStatus(bool checkstatus) { CheckStatus = checkstatus; }
+
+ uint16_t BloodOxygenModel::GetSPO2data() { return SPO2_; }
+
+ uint16_t BloodOxygenModel::GetShowSPO2data() { return Show_SPO2_; }
- /* -------------------------------------------------------------------------- */
- // 获取检测状态
- bool BloodOxygenModel::GetCheckStatus()
- {
- return CheckStatus;
- }
- // 设置检测状态
- void BloodOxygenModel::SetCheckStatus(bool checkstatus)
- {
- CheckStatus = checkstatus;
- }
- uint16_t BloodOxygenModel::GetSPO2data()
- {
- return SPO2_;
- }
- uint16_t BloodOxygenModel::GetShowSPO2data()
- {
- return Show_SPO2_;
- }
void BloodOxygenModel::UpSPO2data(uint16_t spo2)
{
- // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UpSPO2data SPO2:%d->%d", SPO2_, spo2);
Show_SPO2_ = spo2;
- // 筛选有效信息
if (Show_SPO2_ != 0)
{
SPO2_ = spo2;
}
}
+
uint16_t BloodOxygenModel::GetCheckTime()
{
- // 第一次进入,默认刚刚测试
if (initstatus)
{
TIME_ = BloodOxygenPresenter::GetInstance()->GetCurrentTime();
}
return TIME_;
}
- void BloodOxygenModel::SetCheckTime(uint16_t time)
- {
- TIME_ = time;
- }
- /* -------------------------------------------------------------------------- */
- BloodOxygenModel *BloodOxygenModel::GetInstance(void)
+
+ void BloodOxygenModel::SetCheckTime(uint16_t time) { TIME_ = time; }
+
+ BloodOxygenModel *BloodOxygenModel::GetInstance()
{
static BloodOxygenModel instance;
return &instance;
}
-}
\ No newline at end of file
+}
{
// 更新血氧数据
uint16_t spo2_ = BloodOxygenModel::GetInstance()->GetSPO2data();
- if (spo2_ != 97) // 判断是否为默认数据
+ if (spo2_ != 0) // 判断是否为默认数据
{
+ // 更新数据
std::string bloodoxygenStr = std::to_string(spo2_);
percent->SetText(bloodoxygenStr.c_str());
+ // 更新时间
+ uint16_t time = BloodOxygenPresenter::GetInstance()->GetCurrentTime();
+ uint16_t check_time = BloodOxygenModel::GetInstance()->GetCheckTime();
+ std::string TimeStr = BloodOxygenPresenter::GetInstance()->GetTDOA(time, check_time) + "检测";
+ timeLabel->SetText(TimeStr.c_str());
+ }
+ else
+ {
+ percent->SetText("--");
+ timeLabel->SetText("暂无检测结果");
}
- // 更新时间
- uint16_t time = BloodOxygenPresenter::GetInstance()->GetCurrentTime();
- uint16_t check_time = BloodOxygenModel::GetInstance()->GetCheckTime();
- std::string TimeStr = BloodOxygenPresenter::GetInstance()->GetTDOA(time, check_time) + "检测";
- timeLabel->SetText(TimeStr.c_str());
}
// 初始化标签
percent->SetViewId("label2"); // Set style
percent->SetStyle(STYLE_TEXT_FONT, PERCENT_FONT_SIZE);
uint16_t spo2_ = BloodOxygenModel::GetInstance()->GetSPO2data();
- std::string bloodoxygenStr = std::to_string(spo2_);
- percent->SetText(bloodoxygenStr.c_str());
+ std::string TimeStr;
+ if (spo2_ != 0)
+ {
+ std::string bloodoxygenStr = std::to_string(spo2_);
+ percent->SetText(bloodoxygenStr.c_str());
+ // 更新时间
+ uint16_t time = BloodOxygenPresenter::GetInstance()->GetCurrentTime();
+ uint16_t check_time = BloodOxygenModel::GetInstance()->GetCheckTime();
+ TimeStr = BloodOxygenPresenter::GetInstance()->GetTDOA(time, check_time);
+ }
+ else
+ {
+ percent->SetText("--");
+ TimeStr = "暂无测量数据";
+ }
percent->SetLineBreakMode(UILabel::LINE_BREAK_ELLIPSIS);
percent->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
percent->SetRollSpeed(0);
timeLabel->SetViewId("label1"); // Set style
timeLabel->SetStyle(STYLE_TEXT_FONT, TIMELABEL_FONT_SIZE);
/* -------------------------------------------------------------------------- */
- // 更新时间
- uint16_t time = BloodOxygenPresenter::GetInstance()->GetCurrentTime();
- uint16_t check_time = BloodOxygenModel::GetInstance()->GetCheckTime();
- std::string TimeStr = BloodOxygenPresenter::GetInstance()->GetTDOA(time, check_time);
timeLabel->SetText(TimeStr.c_str());
/* -------------------------------------------------------------------------- */
timeLabel->SetLineBreakMode(UILabel::LINE_BREAK_ELLIPSIS);
\r
// Set additional property\r
bloodoxygen = BloodOxygenModel::GetInstance()->GetSPO2data();\r
- // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetSPO2Data %d", bloodoxygen);\r
- std::string bloodoxygenStr = std::to_string(bloodoxygen);\r
- bloodLabel->SetText(bloodoxygenStr.c_str());\r
+ if (bloodoxygen != 0)\r
+ {\r
+ std::string bloodoxygenStr = std::to_string(bloodoxygen);\r
+ bloodLabel->SetText(bloodoxygenStr.c_str());\r
+ }\r
+ else\r
+ {\r
+ bloodLabel->SetText("--");\r
+ }\r
bloodLabel->SetLineBreakMode(UILabel::LINE_BREAK_ELLIPSIS);\r
bloodLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
bloodLabel->SetRollSpeed(0);\r
// Add to rootView\r
Add(bloodLabel);\r
\r
- /* -------------------------------------------------------------------------- */\r
+ /* -------------------------------------------------------------------------- */\r
timeLabel = new UILabel();\r
if (timeLabel == nullptr)\r
{\r
return false;\r
}\r
timeLabel->SetPosition(90, 300); // widget's left position and top position\r
- timeLabel->Resize(280, 100); // widget's width and height\r
- timeLabel->SetViewId("label1"); // Set style\r
+ timeLabel->Resize(280, 100); // widget's width and height\r
+ timeLabel->SetViewId("label1"); // Set style\r
timeLabel->SetStyle(STYLE_TEXT_FONT, 30);\r
- /* -------------------------------------------------------------------------- */\r
- // 更新时间\r
- uint16_t time = BloodOxygenPresenter::GetInstance()->GetCurrentTime();\r
- uint16_t check_time = BloodOxygenModel::GetInstance()->GetCheckTime();\r
- std::string TimeStr = BloodOxygenPresenter::GetInstance()->GetTDOA(time, check_time) +"检测";\r
- timeLabel->SetText(TimeStr.c_str());\r
+ if (bloodoxygen != 0)\r
+ {\r
+ // 更新时间\r
+ uint16_t time = BloodOxygenPresenter::GetInstance()->GetCurrentTime();\r
+ uint16_t check_time = BloodOxygenModel::GetInstance()->GetCheckTime();\r
+ std::string TimeStr = BloodOxygenPresenter::GetInstance()->GetTDOA(time, check_time) + "检测";\r
+ timeLabel->SetText(TimeStr.c_str());\r
+ }\r
+ else\r
+ {\r
+ timeLabel->SetText("暂无测量记录");\r
+ }\r
/* -------------------------------------------------------------------------- */\r
timeLabel->SetLineBreakMode(UILabel::LINE_BREAK_ELLIPSIS);\r
timeLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+
+
+#ifndef Heart_BANDOFF_VIEW_H
+#define Heart_BANDOFF_VIEW_H
+
+#include "components/ui_label.h"
+#include "components/ui_view_group.h"
+#include "components/ui_image_animator.h"
+#include "components/ui_button.h"
+#include "components/ui_label_button.h"
+#include "BaseView.h"
+#include "View.h"
+#include "ohos_types.h"
+#include "components/ui_scroll_view.h"
+namespace OHOS
+{
+ class HeartBandoffView
+ {
+ public:
+ HeartBandoffView();
+ virtual ~HeartBandoffView();
+
+ UIViewGroup *CreateUIViewGroup();
+ static HeartBandoffView *GetInstance(void);
+ UIScrollView *HeartBondoffViewInit();
+ UIImageAnimatorView *GetImageAnimator();
+
+ private:
+ UILabel *label;
+ UILabelButton *testButton;
+ UIScrollView *HeartBandoffScrollView;
+ UIViewGroup *group;
+ UIImageView *imageView;
+ UIImageAnimatorView *imageAnimator;
+ };
+}
+
+#endif // 血氧跳转界面
\ No newline at end of file
UIScrollView *HeartCheckViewInit();
UIImageAnimatorView *GetImageAnimator();
UILabelButton *CreateAndSetUIButton(const char *title);
- void UpHeartText();
+ void UpShowHeartText();
private:
UIImageAnimatorView *imageAnimator;
bool GetHeartViewStatus(void);\r
bool GetHeartBandoffViewStatus(void);\r
bool GetHeartCheckViewStatus(void);\r
+ bool GetHeartResultViewStaus(void);\r
+\r
void SetHeartViewStatus(bool HeartViewStatus);\r
void SetHeartBandoffViewStatus(bool bandoffViewStatus);\r
void SetHeartCheckViewStatus(bool checkViewStatus);\r
+ void SetHeartResultViewStatus(bool resultViewStatus);\r
\r
bool GetCheckStatus();\r
void SetCheckStatus(bool checkstatus);\r
typedef enum
{
HEARTVIEW = 0, // 血氧视图(slice)
- HEARTBANDVIEW,
+ HEARTBANDVIEW, // 佩戴提醒
HEARTCHECKVIEW, // 检测视图(subView)
HEARTRESULT, // 测试失败(subView)
MAX_HEARTVIEW,
class HeartView;
class HeartPresenter : public Presenter<HeartView>,
- public UIView::OnClickListener,
- public RootView::OnKeyActListener,
- public ModelListenerSample,
- public UIView::OnDragListener
+ public UIView::OnClickListener,
+ public RootView::OnKeyActListener,
+ public ModelListenerSample,
+ public UIView::OnDragListener
{
public:
HeartPresenter();
namespace OHOS
{
class HeartPresenter;
- //class HeartBandoffView;
+ class HeartBandoffView;
class HeartCheckView;
class HeartResultView;
class HeartView : public View<HeartPresenter>
void OnTearDownView() override;
void OnStart() override;
static HeartView *GetInstance(void);
- bool ChangeHeartView(int16_t thisview); // 主视图
- bool ChangeCheckView(int16_t thisview);
- bool ChangeResultView(int16_t thisview);
+ bool ChangeHeartView(int16_t thisview); // 主视图
+ bool ChangeBandoffView(int16_t thisview); // 佩戴手表
+ bool ChangeCheckView(int16_t thisview); // 检测心率
+ bool ChangeResultView(int16_t thisview); // 异常检测(佩戴,心率过高或过低)
bool ClickFunc(int16_t interface);
void ChangeView(int16_t hideView, int16_t showView);
UIScrollView *GetHeartScrollView(int ViewId);
- void Upheartdata();
-
+ void UpHeartText(); // 更新心率结果文本
private:
- // 增加图片
- bool InitImageDisplay(void);
- // 初始化标签
- bool InitLabel(void);
- // 添加label按键
- UILabelButton *CreateAndSetUIButton(const char *title);
- // 初始化界面
- bool InitHeartView(void);
+ bool InitImageDisplay(void); // 初始化背景图片
+ bool InitLabel(void); // 初始化标签
+ UILabelButton *CreateAndSetUIButton(const char *title); // 添加label按键
+ bool InitHeartView(void); // 初始化界面
bool SetOnDragListener(void);
+ HeartBandoffView *heartbandoff{nullptr};
HeartCheckView *heartcheck{nullptr};
HeartResultView *heartresult{nullptr};
UIScrollView *HeartScrollView[4]{nullptr};
UILabelButton *testButton; // 检测按键
const power_display_svr_api_t *display_api = power_display_svr_get_api();
- uint32_t display_time;
- uint32_t heart_;
+ uint32_t display_time; // 获取系统亮屏时间暂存
};
}
+
+/*
+ * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
+ * Description: HeartBandoff view
+ * Author:
+ * Create: 2021-08-01
+ */
+#include "UiConfig.h"
+#include "wearable_log.h"
+#include "HeartBandoffView.h"
+#include "HeartModel.h"
+
+namespace OHOS
+{
+ // 动态显示图片设置
+ static constexpr uint16_t IMAGE_SIZE = 96;
+ static constexpr uint16_t IMAGE_POSITION_Y = 276;
+ static constexpr uint16_t IMAGE_POSITION_X = 179;
+ static constexpr uint16_t IMAGEANIMATOERVIEW_SIZE = 24;
+ static constexpr uint16_t IMAGEANIMATOERVIEW_SPEED = 40;
+
+ // 标签设置
+ static constexpr uint16_t LABEL_POSITION_X = 87;
+ static constexpr uint16_t LABEL_POSITION_Y = 200;
+ static constexpr uint16_t LABEL_POSITION_WIDTH = 288;
+ static constexpr uint16_t LABEL_POSITION_HEIGHT = 50;
+
+ // 图片设置
+ static constexpr uint16_t IMAGE_ENTER_POSITION_X = 131;
+ static constexpr uint16_t IMAGE_ENTER_POSITION_Y = 70;
+
+ static constexpr uint16_t TITLE_LABEL_DEFAULT_HEIGHT = 30;
+ static constexpr uint16_t FONT_DEFAULT_SIZE = 25;
+ static constexpr uint16_t VIEW_DISTANCE_TO_LEFT_SIDE = 48;
+ static constexpr uint16_t TEXT_DISTANCE_TO_LEFT_SIDE = 50;
+ static constexpr uint16_t TEXT_DISTANCE_TO_TOP_SIDE = 11;
+
+ static ImageAnimatorInfo g_imageAnimatorInfo_Time[IMAGEANIMATOERVIEW_SIZE] = {
+ {PNG_COUNTDOWN_TIME_IMAGE_0, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_COUNTDOWN_TIME_IMAGE_1, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_COUNTDOWN_TIME_IMAGE_2, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_COUNTDOWN_TIME_IMAGE_3, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_COUNTDOWN_TIME_IMAGE_4, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_COUNTDOWN_TIME_IMAGE_5, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_COUNTDOWN_TIME_IMAGE_6, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_COUNTDOWN_TIME_IMAGE_7, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_COUNTDOWN_TIME_IMAGE_8, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_COUNTDOWN_TIME_IMAGE_9, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_COUNTDOWN_TIME_IMAGE_10, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_COUNTDOWN_TIME_IMAGE_11, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_COUNTDOWN_TIME_IMAGE_12, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_COUNTDOWN_TIME_IMAGE_13, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_COUNTDOWN_TIME_IMAGE_14, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_COUNTDOWN_TIME_IMAGE_15, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_COUNTDOWN_TIME_IMAGE_16, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_COUNTDOWN_TIME_IMAGE_17, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_COUNTDOWN_TIME_IMAGE_18, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_COUNTDOWN_TIME_IMAGE_19, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_COUNTDOWN_TIME_IMAGE_20, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_COUNTDOWN_TIME_IMAGE_21, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_COUNTDOWN_TIME_IMAGE_22, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ {PNG_COUNTDOWN_TIME_IMAGE_23, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+ };
+ static HeartBandoffView *g_pMainView = nullptr;
+ HeartBandoffView::HeartBandoffView()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "HeartBandoffView::HeartBandoffView");
+ label = nullptr;
+ imageView = nullptr;
+ HeartBandoffScrollView = nullptr;
+ imageAnimator = nullptr;
+ g_pMainView = this;
+ }
+
+ HeartBandoffView::~HeartBandoffView()
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "HeartBandoffView::~HeartBandoffView");
+ HeartBandoffScrollView->RemoveAll();
+ delete label;
+ delete imageView;
+ delete imageAnimator;
+ label = nullptr;
+ imageView = nullptr;
+ delete HeartBandoffScrollView;
+ HeartBandoffScrollView = nullptr;
+ imageAnimator = nullptr;
+ g_pMainView = nullptr;
+ }
+
+ HeartBandoffView *HeartBandoffView::GetInstance(void)
+ {
+ return g_pMainView;
+ }
+
+ // 返回动画状态
+ UIImageAnimatorView *HeartBandoffView::GetImageAnimator()
+ {
+ return imageAnimator;
+ }
+
+ UIScrollView *HeartBandoffView::HeartBondoffViewInit()
+ {
+ // 初始化界面
+ HeartBandoffScrollView = new UIScrollView();
+ if (HeartBandoffScrollView == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HeartBondoffViewInit::HeartBandoffView new fail!");
+ // return nullptr;
+ }
+ HeartBandoffScrollView->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());
+ HeartBandoffScrollView->SetStyle(STYLE_BACKGROUND_OPA, 0xff);
+ HeartBandoffScrollView->SetStyle(STYLE_BORDER_RADIUS, 1294);
+ HeartBandoffScrollView->SetScrollBlankSize(35);
+ HeartBandoffScrollView->SetReboundSize(50);
+ HeartBandoffScrollView->SetDirection(1);
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "HeartBandoffView::CreateUIViewGroup");
+
+ // 佩戴title
+ label = new UILabel();
+ if (label == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HeartBandoffView::new Label fail");
+ // return nullptr;
+ }
+ label->SetPosition(LABEL_POSITION_X, LABEL_POSITION_Y, LABEL_POSITION_WIDTH, LABEL_POSITION_HEIGHT);
+ label->SetText("偏紧佩戴,保持静止");
+ label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_DEFAULT_SIZE);
+ label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+ HeartBandoffScrollView->Add(label);
+
+ // 播放动画
+ imageAnimator = new UIImageAnimatorView();
+ if (imageAnimator == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HeartBandoffView::new UIImageAnimatorView fail");
+ // return nullptr;
+ }
+ imageAnimator->SetImageAnimatorSrc(g_imageAnimatorInfo_Time, IMAGEANIMATOERVIEW_SIZE, IMAGEANIMATOERVIEW_SPEED);
+ imageAnimator->Start();
+ imageAnimator->SetRepeat(false);
+ HeartBandoffScrollView->Add(imageAnimator);
+
+ // 提醒图片
+ imageView = new UIImageView();
+ if (imageView == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HeartBandoffView::new UIImageView fail");
+ // return nullptr;
+ }
+ imageView->SetPosition(IMAGE_ENTER_POSITION_X, IMAGE_ENTER_POSITION_Y); // 30 : offset
+ imageView->SetSrc(PNG_BLOOD_ICON_ENTER);
+ HeartBandoffScrollView->Add(imageView);
+
+ return HeartBandoffScrollView;
+ }
+}
HeartText = nullptr;
g_pMainView = this;
}
- void HeartCheckView::UpHeartText()
+ void HeartCheckView::UpShowHeartText()
{
uint16_t heart_ = HeartModel::GetInstance()->GetShowHeartdata();
// WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetHeartData %d", heart_);
}\r
}\r
}\r
- bool HeartModel::GetHeartViewStatus(void)\r
+ bool HeartModel::GetHeartViewStatus()\r
{\r
return HeartView;\r
}\r
\r
- bool HeartModel::GetHeartBandoffViewStatus(void)\r
+ bool HeartModel::GetHeartBandoffViewStatus()\r
{\r
return BandoffView;\r
}\r
\r
- bool HeartModel::GetHeartCheckViewStatus(void)\r
+ bool HeartModel::GetHeartCheckViewStatus()\r
{\r
return CheckView;\r
}\r
BandoffView = bandoffViewStatus;\r
}\r
\r
- void HeartModel::SetHeartViewStatus(bool HeartViewStatus)\r
+ bool HeartModel::GetHeartResultViewStaus()\r
{\r
- HeartView = HeartViewStatus;\r
+ return ResultView;\r
+ }\r
+\r
+ void HeartModel::SetHeartResultViewStatus(bool resultViewStatus)\r
+ {\r
+ ResultView = resultViewStatus;\r
+ }\r
+\r
+ void HeartModel::SetHeartViewStatus(bool heartViewStatus)\r
+ {\r
+ HeartView = heartViewStatus;\r
}\r
\r
void HeartModel::SetHeartCheckViewStatus(bool checkViewStatus)\r
CheckView = checkViewStatus;\r
}\r
\r
- /* -------------------------------------------------------------------------- */\r
- // 获取检测状态\r
bool HeartModel::GetCheckStatus()\r
{\r
return CheckStatus;\r
}\r
- // 设置检测状态\r
- void HeartModel::SetCheckStatus(bool checkstatus)\r
+\r
+ void HeartModel::SetCheckStatus(bool checkStatus)\r
{\r
- CheckStatus = checkstatus;\r
+ CheckStatus = checkStatus;\r
}\r
+\r
uint16_t HeartModel::GetHeartdata()\r
{\r
return Heart_;\r
}\r
+\r
uint16_t HeartModel::GetShowHeartdata()\r
{\r
return Show_Heart_;\r
}\r
+\r
void HeartModel::UpHeartdata(uint16_t heart)\r
{\r
- // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UpHeartdata Heart:%d->%d", Heart_, heart);\r
Show_Heart_ = heart;\r
- // 筛选有效信息\r
if (Show_Heart_ != 0)\r
{\r
Heart_ = heart;\r
}\r
}\r
+\r
uint16_t HeartModel::GetCheckTime()\r
{\r
- // 第一次进入,默认刚刚测试\r
if (initstatus)\r
{\r
TIME_ = HeartPresenter::GetInstance()->GetCurrentTime();\r
}\r
return TIME_;\r
}\r
+\r
void HeartModel::SetCheckTime(uint16_t time)\r
{\r
TIME_ = time;\r
}\r
- /* -------------------------------------------------------------------------- */\r
}\r
-/*
- * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
- * Description: heartOxygen view
- * Author:
- * Create: 2021-08-01
- */
-
#include "HeartPresenter.h"
#include "common/task_manager.h"
-#include "HeartView.h"
-#include "HeartModel.h"
-#include "HeartCheckView.h"
#include "components/ui_label.h"
#include "ChangeSliceListener.h"
#include "broadcast_service.h"
#include <fstream>
-#include "iostream"
+#include <iostream>
#include <sstream>
#include <string>
#include <cstdlib>
#include "wearable_log.h"
#include "cmsis_os.h"
#include "securec.h"
-#include "broadcast_service.h"
#include "graphic_service.h"
#include <chrono>
#include <thread>
#include "ppg_service.h"
#include "displaybrightness/include/DisplayBrightnessModel.h"
#include "power_display_service.h"
-#include "heartrate/include/HeartPresenter.h"
+
#include "heartrate/include/HeartView.h"
+#include "HeartModel.h"
+#include "HeartCheckView.h"
+#include "HeartBandoffView.h"
#define HEARTKEYABLE 0
+
namespace OHOS
{
static HeartPresenter *g_pMainView = nullptr;
static constexpr uint16_t PROGRESS_VALUE_MIN = 0;
static constexpr uint16_t PROGRESS_VALUE_MAX = 10;
- /* -------------------------------------------------------------------------- */
- // 获取当前的"时间分"
+
uint16_t HeartPresenter::GetCurrentTime()
{
time_t now = time(0);
uint16_t current_time = tblock->tm_hour * 60 + tblock->tm_min;
return current_time;
}
- // 获取时间差
+
std::string HeartPresenter::GetTDOA(uint16_t new_time, uint16_t old_time)
{
if (new_time == old_time)
return ss.str();
}
}
- /* -------------------------------------------------------------------------- */
+
HeartPresenter::HeartPresenter()
{
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "HeartPresenter::new HeartPresenter");
#endif
g_pMainView = nullptr;
}
+
HeartPresenter *HeartPresenter::GetInstance()
{
return g_pMainView;
bool HeartPresenter::CheckPointersValue()
{
- if (HeartView::GetInstance() == nullptr)
- {
- return false;
- }
-
-#if 0
- if (HeartBandoffView::GetInstance() == nullptr)
- {
- return false;
- }
-#endif
- if (HeartModel::GetInstance() == nullptr)
+ if (HeartView::GetInstance() == nullptr || HeartBandoffView::GetInstance() == nullptr || HeartModel::GetInstance() == nullptr)
{
return false;
}
return true;
}
+
bool HeartPresenter::OnDrag(UIView &view, const DragEvent &event)
{
return true;
}
+
bool HeartPresenter::OnDragEnd(UIView &view, const DragEvent &event)
{
if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT)
// 主界面点击开始检测
if (strcmp(view.GetViewId(), "checkbegin") == 0)
{
- //HeartView::GetInstance()->ChangeView(HEARTVIEW, HEARTBANDVIEW);
- //HeartModel::GetInstance()->SetHeartBandoffViewStatus(true);
- // HeartBandoffView::GetInstance()->GetImageAnimator()->Start();
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HEARTVIEW->HEARTBANDVIEW");
+ HeartView::GetInstance()->ChangeView(HEARTVIEW, HEARTBANDVIEW);
+ HeartModel::GetInstance()->SetHeartBandoffViewStatus(true);
+ HeartBandoffView::GetInstance()->GetImageAnimator()->Start();
return true;
}
// 从检测界面回到主界面
if (strcmp(view.GetViewId(), "checkstop") == 0)
{
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HEARTCHECKVIEW->HEARTVIEW");
HeartView::GetInstance()->ChangeView(HEARTCHECKVIEW, HEARTVIEW);
HeartModel::GetInstance()->SetHeartCheckViewStatus(false);
HeartModel::GetInstance()->SetCheckStatus(false); // 关闭检测
// 从检测失败界面回到检测界面
if (strcmp(view.GetViewId(), "ReCheck") == 0)
{
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HEARTRESULT->HEARTCHECKVIEW");
HeartView::GetInstance()->ChangeView(HEARTRESULT, HEARTCHECKVIEW);
HeartCheckView::GetInstance()->GetImageAnimator()->Start(); // 播放检测界面动画
HeartModel::GetInstance()->SetCheckStatus(true); // 开始检测
// 从检测失败界面回到主界面
if (strcmp(view.GetViewId(), "StCheck") == 0)
{
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HEARTRESULT->HEARTVIEW");
HeartView::GetInstance()->ChangeView(HEARTRESULT, HEARTVIEW);
HeartModel::GetInstance()->SetCheckStatus(false); // 关闭检测
return true;
// 当检测状态为开始检测,开始检测
if (HeartModel::GetInstance()->GetCheckStatus() == true)
{
- HeartCheckView::GetInstance()->UpHeartText(); // 更新
+ HeartCheckView::GetInstance()->UpShowHeartText(); // 更新
if (startheart == true)
{
- // uint8_t md = PPG_SERVICE_CMD_TYPE_DO_Heart_TEST;
- // send_ppg_cmd_msg(md);
+ uint8_t md = PPG_SERVICE_CMD_TYPE_DO_PPG_TEST;
+ send_ppg_cmd_msg(md);
startheart = false;
}
}
// 当检测状态为结束检测,结束检测
if (HeartModel::GetInstance()->GetCheckStatus() == false)
{
- HeartView::GetInstance()->Upheartdata(); // 更新主界面
+ HeartView::GetInstance()->UpHeartText(); // 更新主界面
if (startheart == false)
{
- // uint8_t md = PPG_SERVICE_CMD_TYPE_STOP_Heart_TEST;
- // send_ppg_cmd_msg(md);
+ uint8_t md = PPG_SERVICE_CMD_TYPE_STOP_PPG_TEST;
+ send_ppg_cmd_msg(md);
startheart = true;
}
}
void HeartPresenter::ReturnInterface()
{
-#if 0
+
// 佩戴动画播放完毕,前往检测界面
if (HeartModel::GetInstance()->GetHeartBandoffViewStatus() == true)
{
HeartModel::GetInstance()->SetCheckStatus(true); // 开始检测
}
}
-#endif
+
// 检测动画播放完毕
if (HeartModel::GetInstance()->GetHeartCheckViewStatus() == true)
{
// 测试失败
if (HeartModel::GetInstance()->GetShowHeartdata() == 0)
{
+
HeartView::GetInstance()->ChangeView(HEARTCHECKVIEW, HEARTRESULT);
+ HeartModel::GetInstance()->SetHeartResultViewStatus(true);
}
// 测试成功
else
{
HeartView::GetInstance()->ChangeView(HEARTCHECKVIEW, HEARTVIEW);
}
- HeartModel::GetInstance()->SetCheckStatus(false); // 关闭检测
HeartModel::GetInstance()->SetHeartCheckViewStatus(false);
+ HeartModel::GetInstance()->SetCheckStatus(false); // 关闭检测
}
uint16_t time = GetCurrentTime();
HeartModel::GetInstance()->SetCheckTime(time); // 更新时间
}
+ if (HeartModel::GetInstance()->GetHeartResultViewStaus() == true)
+ {
+ HeartModel::GetInstance()->SetCheckStatus(false); // 关闭检测
+ }
}
void HeartPresenter::Notify(void)
{
#include "heartrate/include/HeartView.h"
#include "heartrate/include/HeartPresenter.h"
#include "HeartModel.h"
-#include "HeartPresenter.h"
#include "displaybrightness/include/DisplayBrightnessModel.h"
#include "power_display_service.h"
+#include "HeartBandoffView.h"
+#include "HeartCheckView.h"
+#include "HeartRateView.h"
namespace OHOS
{
delete testButton;
delete percent;
delete heartcheck;
+ delete heartbandoff;
+ delete heartresult;
imageViewMain = nullptr;
titleLabel = nullptr;
testButton = nullptr;
g_pMainView = nullptr;
heartcheck = nullptr;
+ heartbandoff = nullptr;
+ heartresult = nullptr;
delete HeartScrollView[HEARTVIEW];
HeartScrollView[HEARTVIEW] = nullptr;
}
{
return g_pMainView;
}
- void HeartView::Upheartdata()
+ void HeartView::UpHeartText()
{
// 更新血氧数据
uint16_t heart_ = HeartModel::GetInstance()->GetHeartdata();
- if (heart_ != 97) // 判断是否为默认数据
+ if (heart_ != 0) // 判断是否为默认数据
{
std::string heartStr = std::to_string(heart_);
percent->SetText(heartStr.c_str());
}
return true;
}
+ // 2.跳转到佩戴界面
+ bool HeartView::ChangeBandoffView(int16_t thisView)
+ {
+ if (HeartScrollView[thisView] == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HeartOxygenView::ChangeBandoffView");
+ heartbandoff = new HeartBandoffView();
+ if (heartbandoff == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HeartOxygenView:: new scrollView[%d] fail", thisView);
+ return false;
+ }
+ HeartScrollView[thisView] = heartbandoff->HeartBondoffViewInit();
+ RootView::GetInstance()->Add(HeartScrollView[thisView]);
+ }
+ return true;
+ }
// 3.跳转到检测界面
bool HeartView::ChangeCheckView(int16_t thisView)
{
// 2.ViewMapper[] 是一个静态的视图映射数组,将视图ID与MainStopWatchView类中的特定成员函数指针进行了绑定。
static const HeartViewMapper ViewMapper[] = {
{HEARTVIEW, &HeartView::ChangeHeartView},
+ {HEARTBANDVIEW, &HeartView::ChangeBandoffView},
{HEARTCHECKVIEW, &HeartView::ChangeCheckView},
{HEARTRESULT, &HeartView::ChangeResultView},
};
int GetSPO2Data();
private:
- float SPO2_ = 97.0; // 97.0: default SPO2 value as reference
+ float SPO2_ = 0; // 97.0: default SPO2 value as reference
};
}
#endif