/*---------------------------------------------------------------------------- * Copyright (c) TJD Technologies Co., Ltd. 2024. All rights reserved. * * Description: * * Author: wuchangxin * * Create: 2024-6-23 *--------------------------------------------------------------------------*/ #ifndef TJDUI_APP_SPO2_H #define TJDUI_APP_SPO2_H #include "ChangeSliceListener.h" #include "TjdUiAppBloodOxygenPresenter.h" #include "View.h" #include "components/ui_chart.h" #include "components/ui_image_animator.h" #include "components/ui_image_view.h" #include "components/ui_label.h" #include "components/ui_swipe_view_nested.h" #include "graphic_timer.h" #include "ui_label_ext.h" #include "ui_swipe_view.h" namespace TJD { class SpO2FlickerTimer : public OHOS::GraphicTimer { public: SpO2FlickerTimer(int32_t periodMs, GraphicTimerCb cb, void *arg, bool isPeriodic = false) : OHOS::GraphicTimer(periodMs, cb, arg, isPeriodic) { label_ = static_cast(arg); } ~SpO2FlickerTimer() {} void Start(); void Stop(); private: OHOS::UILabel *label_{nullptr}; }; class Spo2ScrollPickerCallback : public OHOS::AnimatorCallback { public: Spo2ScrollPickerCallback() {} ~Spo2ScrollPickerCallback() {} void Callback(OHOS::UIView *view); void OnStop(OHOS::UIView &view) {} void SetAnimator(OHOS::Animator *animator) { animator_ = animator; } bool GetState() { return state_; }; private: bool state_{false}; OHOS::Animator *animator_{nullptr}; uint8_t cnt = 0; void CycleLabelsUp(OHOS::UIView *view); // 数字向下循环(0→1→2→0) void CycleLabelsDown(OHOS::UIView *view); }; class Spo2ScrollPicker : public OHOS::UIScrollView { public: Spo2ScrollPicker(); ~Spo2ScrollPicker(); void DateInit(uint8_t value); void UpdateLabels(); void ResetLabelPositions(); bool CheckValueChanges(uint8_t value); uint8_t spo2Values_; uint8_t preValues_; bool needsUpdate_{false}; bool directions_{false}; private: OHOS::UILabel label[3]; }; class TjdUiAppSpO2OnClickedListener : public OHOS::UIView::OnClickListener { public: TjdUiAppSpO2OnClickedListener(void) {} virtual ~TjdUiAppSpO2OnClickedListener(void) {} virtual bool OnClick(OHOS::UIView &view, const OHOS::ClickEvent &event); private: }; class TjdUiAppSpO2Presenter; class TjdUiAppSpO2View : public OHOS::View, public OHOS::UIViewGroup { public: TjdUiAppSpO2View(); ~TjdUiAppSpO2View(); static TjdUiAppSpO2View *GetInstance(void); void InitSpO2List(); void OnStart() override; void OnStop() override; void ChangedView(SpO2View view, SpO2View hideView); OHOS::UIImageAnimatorView *GetAnimatorView(void); void UpdateSpO2ViewData(uint32_t index, uint8_t SpO2Value); SpO2View curView; SpO2FlickerTimer *flickerTimer_{nullptr}; OHOS::UILabel *SpO2_Cur_ = nullptr; void SetScrollPickerVisible(bool visible) { unit_->SetVisible(visible); leftScrollPicker->SetVisible(visible); rightScrollPicker->SetVisible(visible); } void ScrollPickerDataInit(uint16_t value) { leftScrollPicker->DateInit(value / 100); rightScrollPicker->DateInit(value % 10); } void UpdateRodViewGroup(void); void InitRodViewInfo(void); static uint8_t spo2WaitTime_; private: OHOS::UILabel *lblTitle_{nullptr}; void SpO2MainViewInit(void); void SpO2AverageViewInit(void); void SpO2RemindViewInit(void); void SpO2UnwearViewInit(void); void ImageInfoInit(void); bool ShowSwipeView(SpO2View hideView); bool ShowRemindView(SpO2View hideView); bool ShowUnwearView(SpO2View hideView); uint8_t SpO2ValueRodValue(uint8_t SpO2Value); OHOS::UIViewGroup *groupList_[SpO2View::SPO2MAX_VIEW]{nullptr}; OHOS::UISwipeView::OnSwipeListener *onSwipeListener_{nullptr}; OHOS::UIView::OnDragListener *OnDragListener_{nullptr}; OHOS::UISwipeViewNested *swipeContainer_ = nullptr; // SpO2MainViewInit OHOS::Point array[288]; OHOS::UIViewGroup *SpO2_container_{nullptr}; OHOS::UIViewGroup *containerAll_{nullptr}; OHOS::UIImageView *image_chart_time = nullptr; OHOS::UIChartDataSerial *dataSerial_ = nullptr; OHOS::UIChartPolyline *uiChart1_ = nullptr; OHOS::UIImageView *image_high = nullptr; OHOS::UIImageView *image_pull_up = nullptr; OHOS::UIImageView *image_about = nullptr; OHOS::UIImageView *image_low = nullptr; OHOS::UILabel *labelNum100_ = nullptr; OHOS::UILabel *labelNum90_ = nullptr; OHOS::UILabel *labelNum80_ = nullptr; OHOS::UILabel *labelNum70_ = nullptr; OHOS::UILabel *SpO2_Max_ = nullptr; OHOS::UILabel *SpO2_Min_ = nullptr; OHOS::UIImageAnimatorView *imageAnimator_ = nullptr; // SpO2AverageViewInit OHOS::UIViewGroup *Average_container_{nullptr}; OHOS::UIImageView *image5_ = nullptr; OHOS::UIImageView *image6_ = nullptr; OHOS::UILabel *label2Num100_ = nullptr; OHOS::UILabel *label2Num90_ = nullptr; OHOS::UILabel *label2Num80_ = nullptr; OHOS::UILabel *label2Num70_ = nullptr; OHOS::UILabelExt *SpO2_Text1_ = nullptr; OHOS::UILabelExt *SpO2_Text2_ = nullptr; OHOS::UIView *view1_ = nullptr; UIView *rodViewGroup[7]{nullptr}; uint8_t rodViewY[7]{0}; uint8_t rodViewHeight[7]{0}; // SpO2RemindViewInit OHOS::UIViewGroup *RemindView_ = nullptr; OHOS::UILabelExt *remindText = nullptr; OHOS::UIImageView *remindImg = nullptr; // SpO2UnwearViewInit OHOS::UIViewGroup *UnwearView_ = nullptr; OHOS::UILabelExt *unwearText1 = nullptr; OHOS::UILabelExt *unwearText2 = nullptr; OHOS::UIImageView *unwearImg1 = nullptr; OHOS::UIImageView *unwearImg2 = nullptr; TjdUiAppSpO2OnClickedListener *imgAboutListener_{nullptr}; TjdUiAppSpO2OnClickedListener *imgRemindListener_{nullptr}; TjdUiAppSpO2OnClickedListener *imgUnwearListener_{nullptr}; SpO2ChangeView viewMapper_[SPO2MAX_VIEW] = { &TjdUiAppSpO2View::ShowSwipeView, &TjdUiAppSpO2View::ShowRemindView, &TjdUiAppSpO2View::ShowUnwearView, }; OHOS::UILabel *unit_ = nullptr; Spo2ScrollPicker *leftScrollPicker = nullptr; Spo2ScrollPicker *rightScrollPicker = nullptr; OHOS::Animator *leftAnimator_{nullptr}; OHOS::Animator *rightAnimator_{nullptr}; Spo2ScrollPickerCallback *leftCallback_ = nullptr; Spo2ScrollPickerCallback *rightCallback_ = nullptr; }; } // namespace TJD #endif