244 lines
7.6 KiB
C++
244 lines
7.6 KiB
C++
#include "TjdUiAppHrPresenter.h"
|
||
#include "TjdUiAppHrModel.h"
|
||
#include "TjdUiAppHrView.h"
|
||
#include "TjdUiRegisterManager.h"
|
||
#include "TjdUiScreenManage.h"
|
||
#include "dock/input_device.h"
|
||
#include "power_display_service.h"
|
||
#include "rtc_api.h"
|
||
#include "sql_setting.h"
|
||
#include "sys_config.h"
|
||
#include "ui_screennotify.h"
|
||
|
||
// #include "core/render_manager.h"
|
||
#define CHECK_MEMORY_LEAK 0
|
||
#if CHECK_MEMORY_LEAK
|
||
#include "gfx_utils/mem_check.h"
|
||
#endif
|
||
#include "motor.h"
|
||
|
||
using namespace OHOS;
|
||
|
||
#define ENABLE_PRINT_INFO 1
|
||
#define DEBUG_ENABLE 0
|
||
#if ENABLE_PRINT_INFO
|
||
#define static_print_info(...) sys_ui_log_i(__VA_ARGS__) // 一般信息打印宏控制
|
||
#define static_print_warn(...) sys_ui_log_w(__VA_ARGS__) // 警告信息打印一般常开
|
||
#define static_print_error(...) sys_ui_log_e(__VA_ARGS__) // 错误信息打印一般常开
|
||
#if DEBUG_ENABLE
|
||
#define static_print_debug(...) sys_ui_log_d(__VA_ARGS__)
|
||
#else
|
||
#define static_print_debug(...)
|
||
#endif
|
||
#else
|
||
#define static_print_info(...)
|
||
#define static_print_warn(...)
|
||
#define static_print_error(...)
|
||
#endif
|
||
|
||
namespace TJD {
|
||
|
||
TJD_REGIST_NATIVE_MENU(TJD_APP_VIEW_HR, TjdUiAppHrView, TjdUiAppHrPresenter, IMG_MENU_LIST_MENU_HEARTRATE,
|
||
STR_ID_00);
|
||
|
||
static TjdUiAppHrPresenter *g_pv_HrPresenter = nullptr;
|
||
|
||
TjdUiAppHrPresenter::TjdUiAppHrPresenter()
|
||
{
|
||
static_print_info("TjdUiAppHrPresenter::construct...");
|
||
#if CHECK_MEMORY_LEAK
|
||
MemCheck::GetInstance()->EnableLeakCheck(true);
|
||
#endif
|
||
g_pv_HrPresenter = this;
|
||
}
|
||
|
||
TjdUiAppHrPresenter::~TjdUiAppHrPresenter()
|
||
{
|
||
static_print_info("~TjdUiAppHrPresenter::destruct...");
|
||
#if CHECK_MEMORY_LEAK
|
||
MemCheck::GetInstance()->EnableLeakCheck(false);
|
||
#endif
|
||
g_pv_HrPresenter = nullptr;
|
||
}
|
||
|
||
TjdUiAppHrPresenter *TjdUiAppHrPresenter::GetInstance(void) { return g_pv_HrPresenter; }
|
||
|
||
void TjdUiAppHrPresenter::OnStart()
|
||
{
|
||
static_print_info("TjdUiAppHrPresenter::OnStart...");
|
||
TjdUiCommonOnKeyListener::GetInstance()->SetOnKeyActListener(this, KeyModelType::APP_KEY_TYPE);
|
||
TimeTaskStart();
|
||
SetPeriod(1000);
|
||
}
|
||
void TjdUiAppHrPresenter::OnPause()
|
||
{
|
||
static_print_info("TjdUiAppHrPresenter::OnPause...");
|
||
UIImageAnimatorView *animator = TjdUiAppHrView::GetInstance()->GetAnimatorView();
|
||
if (animator != nullptr) {
|
||
if (animator->GetState() == Animator::RUNNING)
|
||
animator->Pause();
|
||
}
|
||
Presenter<TjdUiAppHrView>::OnPause();
|
||
|
||
if (view_->GetSwipeView()) {
|
||
view_->GetSwipeView()->ClearFocus();
|
||
}
|
||
}
|
||
void TjdUiAppHrPresenter::OnResume()
|
||
{
|
||
static_print_info("TjdUiAppHrPresenter::OnResume...");
|
||
UIImageAnimatorView *animator = TjdUiAppHrView::GetInstance()->GetAnimatorView();
|
||
if (animator != nullptr) {
|
||
if (animator->GetState() == Animator::PAUSE)
|
||
animator->Resume();
|
||
else if (animator->GetState() == Animator::STOP)
|
||
animator->Start();
|
||
}
|
||
Presenter<TjdUiAppHrView>::OnResume();
|
||
|
||
if (view_->GetSwipeView()) {
|
||
view_->GetSwipeView()->RequestFocus();
|
||
view_->GetSwipeView()->SetRotateFactor(1.0);
|
||
}
|
||
}
|
||
void TjdUiAppHrPresenter::OnStop()
|
||
{
|
||
static_print_info("TjdUiAppHrPresenter::OnStop...");
|
||
TjdUiCommonOnKeyListener::GetInstance()->ClearOnKeyActListener(KeyModelType::APP_KEY_TYPE);
|
||
TimeTaskStop();
|
||
}
|
||
|
||
void TjdUiAppHrPresenter::OnSwipe(UISwipeView &view) { static_print_info("swipeView page:%d", view.GetCurrentPage()); }
|
||
|
||
void TjdUiAppHrPresenter::Notify(void)
|
||
{
|
||
// printf("fps: %lf\n",RenderManager::GetInstance().GetFPS());
|
||
// static_print_info("TjdUiAppHrPresenter::Notify");
|
||
if (timerFlag) {
|
||
HrProcess();
|
||
}
|
||
}
|
||
|
||
void TjdUiAppHrPresenter::ViewExitEvent(OHOS::UIView &view, const OHOS::DragEvent &event)
|
||
{
|
||
if (HR_SWIPEVIEW_ID == std::string(view.GetViewId())) {
|
||
ExitHrView();
|
||
}
|
||
static_print_info("OnDragEnd:HR_SWIPEVIEW");
|
||
}
|
||
|
||
bool TjdUiAppHrPresenter::OnClick(UIView &view, const ClickEvent &event) { return false; }
|
||
|
||
bool TjdUiAppHrPresenter::OnKeyAct(OHOS::UIView &view, const OHOS::KeyEvent &event)
|
||
{
|
||
if (!TjdUiCommonOnKeyListener::CheckIsExitEvent(event)) {
|
||
return true;
|
||
}
|
||
ExitHrView();
|
||
|
||
return false;
|
||
}
|
||
|
||
void TjdUiAppHrPresenter::ExitHrView(void) { OHOS::NativeAbility::GetInstance().ChangePreSlice(); }
|
||
|
||
void TjdUiAppHrPresenter::HrProcess(void)
|
||
{
|
||
uint32_t index = GetCurTimeIndex();
|
||
TjdUiAppHrModel::GetInstance().UpdateHrCurValue();
|
||
uint8_t hrValue = TjdUiAppHrModel::GetInstance().GetHrCurValue();
|
||
|
||
TjdUiAppHrModel::GetInstance().HeartRateControlHandler(HeartRateAction::GetStatus, nullptr);
|
||
printf("hrValue is %d", hrValue);
|
||
if ( TjdUiAppHrView::herarRateWaitTime_ >= 10)
|
||
view_->UpdateHrViewData(index, hrValue);
|
||
|
||
if (hrValue && exitTimerCount_++ > 5) {
|
||
TimeTaskStop();
|
||
motor_param_t motorParam = {.cycle1_on = 250, .cycle1_off = 750, .cycle1_cnt = 1, .duty = 100};
|
||
tjd_driver_motor_user_start(&motorParam);
|
||
}
|
||
}
|
||
|
||
uint8_t TjdUiAppHrPresenter::HeartRateGetWearStatus(void)
|
||
{
|
||
TjdUiAppHrModel::GetInstance().UpdateWearStatus();
|
||
uint8_t wearStatus = TjdUiAppHrModel::GetInstance().GetWearStatus();
|
||
// sys_ui_log_i("wearStatus is %s", wearStatus ? (wearStatus == 1 ? "weared" : "init") : "no wear");
|
||
if (wearStatus == 0) {
|
||
if (refreshStatus && refreshCount++ > 1) {
|
||
refreshStatus = false;
|
||
refreshCount = 0;
|
||
TimeTaskStop();
|
||
TjdUiAppHrView::GetInstance()->ChangedView(HR_UNWEAR_VIEW, HR_SWIPE_VIEW);
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
refreshCount = 0; // 若已配带,刷新计数
|
||
|
||
if (wearStatus == 1) {
|
||
return 1;
|
||
}
|
||
|
||
return 2;
|
||
}
|
||
|
||
uint32_t TjdUiAppHrPresenter::GetCurTimeIndex(void)
|
||
{
|
||
struct rtc_time local_time;
|
||
struct rtc_class_ops *handel = tjd_driver_rtc_get_ops();
|
||
handel->get_rtc_time(&local_time);
|
||
|
||
uint32_t totalMinutes = local_time.tm_hour * 60 + local_time.tm_min;
|
||
// 计算索引值(每5分钟一个索引)
|
||
uint32_t index = totalMinutes / 5;
|
||
|
||
return index;
|
||
}
|
||
|
||
#define SCREEN_AUTO_OFF_TIME (1000 * 60 * 60)
|
||
|
||
void TjdUiAppHrPresenter::TimeTaskStart(void)
|
||
{
|
||
if (timerFlag != true) {
|
||
needsUpdate_ = true;
|
||
TjdUiAppHrModel::GetInstance().HeartRateControlHandler(HeartRateAction::Start, nullptr);
|
||
TjdUiScreenManage::SetScreenKeepOnTimeout(SCREEN_AUTO_OFF_TIME);
|
||
timerFlag = true;
|
||
exitTimerCount_ = 0;
|
||
refreshStatus = true;
|
||
if (TjdUiAppHrView::GetInstance()->flickerTimer) {
|
||
TjdUiAppHrView::GetInstance()->flickerTimer->Start();
|
||
}
|
||
|
||
if (TjdUiAppHrView::GetInstance()->imageAnimator1_) {
|
||
TjdUiAppHrView::GetInstance()->imageAnimator1_->Start();
|
||
}
|
||
}
|
||
}
|
||
|
||
void TjdUiAppHrPresenter::TimeTaskStop(void)
|
||
{
|
||
if (timerFlag != false) {
|
||
timerFlag = false;
|
||
needsUpdate_ = false;
|
||
refreshCount = 0;
|
||
exitTimerCount_ = 0;
|
||
TjdUiAppHrView::herarRateWaitTime_ = 0;
|
||
TjdUiScreenManage::ResetScreenKeepOnTimeout();
|
||
if (TjdUiAppHrView::GetInstance()->flickerTimer) {
|
||
TjdUiAppHrView::GetInstance()->flickerTimer->Stop();
|
||
}
|
||
|
||
if (TjdUiAppHrView::GetInstance()->imageAnimator1_) {
|
||
TjdUiAppHrView::GetInstance()->imageAnimator1_->Stop();
|
||
}
|
||
|
||
TjdUiAppHrModel::GetInstance().HeartRateControlHandler(HeartRateAction::Stop, nullptr);
|
||
TjdUiAppHrModel::GetInstance().InitWeekHrViewInfo();
|
||
TjdUiAppHrView::GetInstance()->UpdateRodViewGroup();
|
||
}
|
||
}
|
||
|
||
} // namespace TJD
|