+++ /dev/null
-/***
- * @Date: 2024-04-17 16:49:23
- * @LastEditors: Caisking 3449750381@qq.com
- * @LastEditTime: 2024-06-13 17:09:11
- * @FilePath: /XTS_FD230/FD230/code/sdk/application/wearable/fd230app/nativeui/heartrate/src/HeartPresenter.cpp
- */
-
-#include "common/task_manager.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 "graphic_service.h"
-#include <chrono>
-#include <thread>
-#include "ppg_service.h"
-#include "displaybrightness/include/DisplayBrightnessModel.h"
-#include "power_display_service.h"
-
-#include "heartrate/include/HeartView.h"
-#include "heartrate/include/HeartModel.h"
-#include "heartrate/include/HeartPresenter.h"
-#include "heartrate/include/HeartCheckView.h"
-#include "heartrate/include/HeartBandoffView.h"
-#include "health_service.h"
-#include "cywee_service.h"
-#include "custom_utils.h"
-
-#define HEARTKEYABLE 1
-
-namespace OHOS
-{
- static HeartPresenter *g_pMainView = nullptr;
- HeartView *g_pheartview = HeartView::GetInstance();
-
- static constexpr uint16_t PROGRESS_VALUE_MIN = 0;
- static constexpr uint16_t PROGRESS_VALUE_MAX = 10;
-
- uint32_t HeartPresenter::GetCurrentTime()
- {
-#if 0
- /*优化为更安全的localtime_r()*/
- struct timeval tv;
- gettimeofday(&tv, NULL);
- struct tm tblock;
- localtime_r(&tv.tv_sec, &tblock);
-
- uint32_t current_time = tblock.tm_hour * 60 + tblock.tm_min;
- return current_time;
-#endif
- 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 HeartPresenter::GetTDOA(uint32_t new_time, uint32_t old_time)
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "new_time is %d old_time is %d", new_time, 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;
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "time_diff_seconds is %d time_diff_minute is %d", time_diff_seconds, time_diff_minutes);
- return time_diff_minutes;
- }
-
- HeartPresenter::HeartPresenter()
- {
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "HeartPresenter::new HeartPresenter");
- g_pMainView = this;
- }
-
- HeartPresenter::~HeartPresenter()
- {
- g_pMainView = nullptr;
- }
-
- HeartPresenter *HeartPresenter::GetInstance()
- {
- return g_pMainView;
- }
-
- void HeartPresenter::OnStart()
- {
- Presenter<HeartView>::OnStart();
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "HeartPresenter::On Start ");
- }
-
- void HeartPresenter::OnPause(void) {}
-
- void HeartPresenter::OnResume(void) {}
-
- void HeartPresenter::OnStop(void) {}
-
- bool HeartPresenter::CheckPointersValue()
- {
- 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)
- {
- NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST);
- return true;
- }
- return false;
- }
- // 增加按键事件
- bool HeartPresenter::OnKeyAct(UIView &view, const KeyEvent &event)
- {
-#if HEARTKEYABLE
- unsigned short keyID = event.GetKeyId();
- unsigned short keyState = event.GetState();
- // 如果是power键,且是亮屏状态,按键释放就返回上一级
- if (keyID == static_cast<uint16_t>(ZliteKeyCode::ZLITE_KEY_POWER) && keyState == 0 && uapi_get_screen_state() == 0)
- {
- // 关闭心率检测
- HeartModel::GetInstance()->Heart_Control(HeartState::End, HeartCheck::INITIATIVE);
- // 复原标志位
- startheart = true;
- HeartModel::GetInstance()->Heart_Stop();
- // 回退
- NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST, TransitionType::TRANSITION_ZOOM);
- }
- return true;
-#endif
- }
-
- bool HeartPresenter::OnClick(UIView &view, const ClickEvent &event)
- {
- UNUSED(view);
- UNUSED(event);
- // 主界面点击开始检测
- if (strcmp(view.GetViewId(), "checkbegin") == 0)
- {
- 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);
- HeartView::GetInstance()->UpHeartText(); // 更新主界面数据
- HeartModel::GetInstance()->SetHeartCheckViewStatus(false);
- HeartModel::GetInstance()->Heart_Stop();
- }
- // 从检测失败界面回到检测界面
- if (strcmp(view.GetViewId(), "ReCheck") == 0)
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HEARTRESULT->HEARTCHECKVIEW");
- HeartView::GetInstance()->ChangeView(HEARTRESULT, HEARTCHECKVIEW);
- HeartModel::GetInstance()->SetHeartResultViewStatus(false);
- HeartModel::GetInstance()->SetHeartCheckViewStatus(true);
- HeartCheckView::GetInstance()->GetImageAnimator()->Start(); // 播放检测界面动画
- HeartModel::GetInstance()->Heart_Start(); // 开始检测
- return true;
- }
- // 从检测失败界面回到主界面
- if (strcmp(view.GetViewId(), "StCheck") == 0)
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HEARTRESULT->HEARTVIEW");
- HeartView::GetInstance()->ChangeView(HEARTRESULT, HEARTVIEW);
- HeartModel::GetInstance()->SetHeartResultViewStatus(false);
- HeartView::GetInstance()->UpHeartText(); // 更新主界面数据
- HeartModel::GetInstance()->Heart_Stop();
- return true;
- }
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HeartPresenter::OnClick");
- return false;
- }
- void HeartPresenter::ProgressNotify(void)
- {
-
- // 当检测状态为结束检测,结束检测
- if (HeartModel::GetInstance()->GetCheckStatus() == false)
- {
- if (startheart == false)
- {
- HeartCheckView::GetInstance()->GetImageAnimator()->Stop();
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetCheckStatus false");
- // 关闭心率检测
- HeartModel::GetInstance()->Heart_Control(HeartState::End, HeartCheck::INITIATIVE);
- startheart = true;
- }
- }
-
- if (HeartModel::GetInstance()->GetHeartCheckViewStatus() == false)
- {
- return;
- }
-
- // 当检测状态为开始检测,开始检测
- if (HeartModel::GetInstance()->GetCheckStatus() == true)
- {
- HeartCheckView::GetInstance()->UpShowHeartText(); // 更新检测界面
- if (startheart == true)
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetCheckStatus true");
- // 开启心率检测 [UI优先级最高直接打断正在检测 重新检测]
- HeartModel::GetInstance()->Heart_Control(HeartState::End, HeartCheck::INITIATIVE);
- HeartModel::GetInstance()->Heart_Control(HeartState::Start, HeartCheck::INITIATIVE);
- startheart = false;
- }
- }
-
- // 监测佩戴状态
- if (HeartModel::GetInstance()->GetWearStatus() == false)
- {
- if (HeartModel::GetInstance()->GetHeartCheckViewStatus() == true)
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GetWearStatus false");
- HeartCheckView::GetInstance()->GetImageAnimator()->Stop();
- // 跳转到异常检测界面
- HeartView::GetInstance()->ChangeView(HEARTCHECKVIEW, HEARTRESULT);
- HeartModel::GetInstance()->SetHeartCheckViewStatus(false);
- HeartModel::GetInstance()->SetHeartResultViewStatus(true);
- HeartModel::GetInstance()->Heart_Stop();
- }
- }
- }
-
- void HeartPresenter::ReturnInterface()
- {
- // 佩戴动画播放完毕,前往检测界面
- if (HeartModel::GetInstance()->GetHeartBandoffViewStatus() == true)
- {
- if (HeartBandoffView::GetInstance()->GetImageAnimator()->GetState() == false)
- {
- HeartView::GetInstance()->ChangeView(HEARTBANDVIEW, HEARTCHECKVIEW);
- HeartModel::GetInstance()->SetHeartBandoffViewStatus(false);
- // 检测界面状态
- HeartModel::GetInstance()->SetHeartCheckViewStatus(true);
- HeartCheckView::GetInstance()->GetImageAnimator()->Start();
- HeartModel::GetInstance()->Heart_Start(); // 开始检测
- }
- }
-
- // 检测动画播放完毕
- if (HeartModel::GetInstance()->GetHeartCheckViewStatus() == true)
- {
- if (HeartCheckView::GetInstance()->GetImageAnimator()->GetState() == false)
- {
- // 测试失败
- if (HeartModel::GetInstance()->GetShowHeartdata() == 0)
- {
- HeartView::GetInstance()->ChangeView(HEARTCHECKVIEW, HEARTRESULT);
- HeartModel::GetInstance()->SetHeartResultViewStatus(true);
- }
- // 测试成功
- else
- {
- HeartView::GetInstance()->ChangeView(HEARTCHECKVIEW, HEARTVIEW);
- HeartView::GetInstance()->UpHeartText();
- }
- HeartModel::GetInstance()->SetHeartCheckViewStatus(false);
- HeartModel::GetInstance()->Heart_Stop();
- }
- }
- if (HeartModel::GetInstance()->GetHeartResultViewStaus() == true)
- {
- HeartModel::GetInstance()->Heart_Stop();
- }
- }
- void HeartPresenter::Notify(void)
- {
- ProgressNotify();
- ReturnInterface();
- }
-}
\ No newline at end of file