#ifndef TJD_UI_APP_SPORT_PAGE_H #define TJD_UI_APP_SPORT_PAGE_H #include "TjdUiAppIds.h" #include "TjdUiAppSportView.h" #include "TjdUiAppTimerView.h" #include "TjdUiMemManage.h" #include "components/tjd_ui_time_picker.h" #include "components/tjd_ui_transform_list_group.h" #include "components/ui_picker.h" #include "graphic_timer.h" #include "list.h" namespace TJD { #pragma region 运动设置主界面(运动目标页) enum GoalSelectView { DISTANCE_SELECT_VIEW, TIME_SELECT_VIEW, CALORIES_SELECT_VIEW, FREE_TRAINING_SELECT_VIEW, MAX_SELECT_VIEW_INDEX }; struct GoalSelectViewInfo { GoalSelectView index; int imgIconResId; // char *name; uint16_t nameId; // char *goal; uint16_t goalId; char *itemId; }; // ---------------------------------------------------------------------------- // 运动消息弹窗 // ---------------------------------------------------------------------------- enum PopupMsgType { SPORT_POPUP_MSG_TYPE_DISTANCE, SPORT_POPUP_MSG_TYPE_TIME, SPORT_POPUP_MSG_TYPE_CALORIES, SPORT_POPUP_MSG_TYPE_PER_DISTANCE, SPORT_POPUP_MSG_TYPE_PER_TIME, SPORT_POPUP_MSG_TYPE_PER_HEARTRATE_TYPE_1, SPORT_POPUP_MSG_TYPE_PER_HEARTRATE_TYPE_2, SPORT_POPUP_MSG_TYPE_PER_HEARTRATE_TYPE_3, SPORT_POPUP_MSG_TYPE_PER_HEARTRATE_TYPE_4, SPORT_POPUP_TYPE_END_30_MIN_REMIND, // 30分钟结束提醒 SPORT_POPUP_TYPE__END_50_MIN_REMIND, // 50分钟结束提醒 SPORT_POPUP_TYPE__END_60_MIN_REMIND, // 60分钟结束提醒 SPORT_POPUP_TYPE__END_65_MIN_REMIND, // 65分钟结束提醒 SPORT_POPUP_TYPE__END_70_MIN_REMIND, // 70分钟结束提醒 SPORT_POPUP_MSG_TYPE_MAX }; class SportPopupWindowListener : public OHOS::UIView::OnClickListener, public OHOS::RootView::OnKeyActListener { public: SportPopupWindowListener(){}; ~SportPopupWindowListener(){}; bool OnClick(OHOS::UIView &view, const OHOS::ClickEvent &event); bool OnKeyAct(OHOS::UIView &view, const OHOS::KeyEvent &event); private: int16_t dragStartX_{0}; int16_t dragCurrentX_{0}; int32_t dragDistance_{0}; }; class SportPopupWindow : public OHOS::UIViewGroup // 运动主弹窗 { public: SportPopupWindow(PopupMsgType msgType, char *goal); ~SportPopupWindow() { RemoveAll(); }; static SportPopupWindow *GetInstance(void); private: OHOS::UIImageView sportIcon_; OHOS::UIImageView achieveIcon_; OHOS::UIImageView heartrateIcon_; OHOS::UIImageView distanceIcon_; OHOS::UIImageView timeIcon_; OHOS::UILabelExt popupContent_; OHOS::UILabelExt tip_; SportPopupWindowListener onclickListener_; SportPopupWindowListener onkeyListener_; }; // ---------------------------------------------------------------------------- // 运动目标页列表项 // ---------------------------------------------------------------------------- class ItemViewOnclickListener : public OHOS::UIView::OnClickListener { public: ItemViewOnclickListener(){}; ~ItemViewOnclickListener(){}; virtual bool OnClick(OHOS::UIView &view, const OHOS::ClickEvent &event); private: }; class ItemView : public OHOS::UITransformGroup { public: ItemView(GoalSelectViewInfo &info, uint8_t i); ~ItemView() { RemoveAll(); }; void UpdateView(GoalSelectViewInfo &info, uint8_t index); friend class SportGoalSelectView; OHOS::UILabelExt goal_; private: // bool OnClickEvent(const OHOS::ClickEvent &event) override; ItemViewOnclickListener itemViewOnclickListener; OHOS::UIImageView icon_; OHOS::UIImageView moreIcon_; OHOS::UILabelExt name_; }; // ---------------------------------------------------------------------------- // 运动目标页 // ---------------------------------------------------------------------------- class SportGoalSelectAdapter : public OHOS::AbstractAdapter { public: SportGoalSelectAdapter() {} ~SportGoalSelectAdapter(); OHOS::UIView *GetView(OHOS::UIView *inView, int16_t index) override; uint16_t GetCount() override; private: ItemView *itemView_{nullptr}; // OHOS::UIView::OnClickListener *onClickListener_{nullptr}; }; class SportGoalSelectView : public SportViewBase { public: SportGoalSelectView(); ~SportGoalSelectView(); void ReMeasure(); static SportGoalSelectView *GetInstance(void); void SportGoalSelectViewRefresh(); void SportGoalSelectVDataRefresh(); virtual void ShowView(); void HideView(); void InitList(); void SetListTitleVisible(bool visible); std::list *ItemList_ = nullptr; OHOS::UITransformList *sportGoalSelectList_{nullptr}; ItemView *itemViews_[MAX_SELECT_VIEW_INDEX]{nullptr}; friend class SportGoalSelectAdapter; private: OHOS::UILabelExt mainTitle_; OHOS::UIView hide_; bool ifDistance = false; // 是否有距离 // SportGoalListScrollListener listScrollListener; OHOS::ImageInfo *imgItemInfo[MAX_SELECT_VIEW_INDEX]{nullptr}; }; #pragma endregion #pragma region 通用目标页 enum CommonViewItemIndex { GOAL_SELECT_ITEM, REMIND_SELECT_ITEM, MAX_COMMON_VIEW_ITEM_INDEX }; class CommonGoalItemOnclickListener : public OHOS::UIView::OnClickListener { public: CommonGoalItemOnclickListener(){}; ~CommonGoalItemOnclickListener(){}; virtual bool OnClick(OHOS::UIView &view, const OHOS::ClickEvent &event); void EnterCallBack(OHOS::UIView &view); private: }; class CommonGoalItemView : public OHOS::UITransformGroup { public: CommonGoalItemView(GoalSelectViewInfo &info); ~CommonGoalItemView() { RemoveAll(); }; static CommonGoalItemView *GetInstance(); void CommonGoalItemViewRefresh(); OHOS::UILabel *GetGoalLabel() { return &goal_; }; friend class CommonViewGoalPage; private: // bool OnClickEvent(const OHOS::ClickEvent &event) override; CommonGoalItemOnclickListener goalItemOnclickListener; OHOS::UIImageView icon_; OHOS::UIImageView moreIcon_; OHOS::UILabelExt name_; OHOS::UILabelExt goal_; GoalSelectView index_; }; class CommonViewGoalPage : public SportViewBase { public: CommonViewGoalPage(GoalSelectView index); ~CommonViewGoalPage(); static CommonViewGoalPage *GetInstance(void); void ShowView(); void HideView(); void GoalPageDataRefresh(); static uint8_t CurSelectGoalView; void UpdateLocalTime(); // int32_t hour = 1; // 保存当前选择的小时 // int32_t minute = 0; // 保存当前选择的分钟 private: OHOS::GraphicTimer *timeTimer_ = nullptr; OHOS::UILabel timeTitle_; OHOS::UIImageView startIcon_; CommonGoalItemOnclickListener startIconOnclickListener; CommonGoalItemView *goalItemViews_[MAX_COMMON_VIEW_ITEM_INDEX]{nullptr}; }; #pragma endregion #pragma region 距离、时间选择CommonUiPicker, 监听器 class GoalOnclickListener : public OHOS::UIView::OnClickListener { public: GoalOnclickListener(){}; ~GoalOnclickListener(){}; virtual bool OnClick(OHOS::UIView &view, const OHOS::ClickEvent &event); private: }; class CommonUiPicker : public SportViewBase { public: CommonUiPicker(const char *uiPickerId, OHOS::ColorType highlightColor, const char *uiPickerData[], uint8_t len, int64_t highlightBgColor); ~CommonUiPicker() { RemoveAll(); }; static CommonUiPicker *GetInstance(void); OHOS::UIPicker uiPicker_; friend class DistnaceGoalSelectView; void ViewRequestFocus(); private: OHOS::UIImageView highLightBg_; }; #pragma endregion #pragma region 距离目标选择 class DistnaceGoalSelectView : public SportViewBase { public: DistnaceGoalSelectView(); ~DistnaceGoalSelectView(); static DistnaceGoalSelectView *GetInstance(void); void ShowView(); void HideView(); uint16_t GetSelectedDistance() { return distancePickIndex; }; private: uint8_t distancePickIndex = 5; // 距离目标选择索引 OHOS::UILabelExt lbTitle_; OHOS::UIImageView imgConfirm; CommonUiPicker *distancePicker_; GoalOnclickListener distnaceGoalOnclickListener; }; #pragma endregion #pragma region 时间目标选择 class SportTimerPickerOnListener : public TjdUITimePicker::ItemSelectdEnterListener { public: SportTimerPickerOnListener(){}; ~SportTimerPickerOnListener(){}; void OnSelectTimePicker(OHOS::UIPicker &picker); void OnEnter(int32_t hour, int32_t minute); private: }; class TimeGoalSelectView : public SportViewBase { public: TimeGoalSelectView(); ~TimeGoalSelectView() { RemoveAll(); if (timePicker != nullptr) { delete timePicker; timePicker = nullptr; } } private: SportTimerPickerOnListener timePickerOnListener; TjdUITimePicker *timePicker{nullptr}; }; #pragma endregion #pragma region 卡路里目标选择 class CaloriesGoalSelectView : public SportViewBase { public: CaloriesGoalSelectView(); ~CaloriesGoalSelectView(); static CaloriesGoalSelectView *GetInstance(void); uint16_t GetSelectedCalories() { return caloriesPickIndex; }; void ShowView(); void HideView(); private: uint8_t caloriesPickIndex = 1; // 卡路里目标选择索引 OHOS::UILabelExt lbTitle_; OHOS::UIImageView imgConfirm; CommonUiPicker *caloriesPicker_; GoalOnclickListener caloriesGoalOnclickListener; }; #pragma endregion #pragma region 提醒目标页 enum RemindGoalListItemIndex { HEART_RATE_INDEX, TIME_INDEX, ONCE_INDEX, REMIND_GOAL_MAX_INDEX, }; struct RemindItemInfo { RemindGoalListItemIndex index; int iconResId; // char *name; uint16_t nameId; // char *goal; uint16_t goalId; char *itemId; }; class RemindGoalListItemOnclickListener : public OHOS::UIView::OnClickListener { public: RemindGoalListItemOnclickListener(){}; ~RemindGoalListItemOnclickListener(){}; virtual bool OnClick(OHOS::UIView &view, const OHOS::ClickEvent &event); private: }; class RemindGoalListItemView : public OHOS::UITransformGroup // 提醒列表item项 { public: RemindGoalListItemView(RemindItemInfo &info); ~RemindGoalListItemView() { RemoveAll(); }; OHOS::UILabelExt goal_; private: OHOS::UIImageView icon_; OHOS::UIImageView moreIcon_; OHOS::UILabelExt name_; RemindGoalListItemOnclickListener remindGoalListItemOnclickListener; }; class RemindGoalListView : public SportViewBase { public: RemindGoalListView(); ~RemindGoalListView(); static RemindGoalListView *GetInstance(void); void ShowView(); void RemindGoalListViewRefresh(); int heartRateIndex[5] = {0}; // 心率区间选择索引 private: OHOS::UILabelExt remindTitle_; RemindGoalListItemView *remindItemViews_[REMIND_GOAL_MAX_INDEX]{nullptr}; }; #pragma endregion #pragma region 心率提醒区间选择 enum HeartRatePickIndex { FIRAT_SECTOR_INDEX, SECOND_SECTOR_INDEX, THREE_SECTOR_INDEX, FOUR_SECTOR_INDEX, NONE_SECTOR_INDEX, HEART_RATE_MAX_INDEX, }; struct HeartRateItemInfo { HeartRatePickIndex index; int imgIconResId; // char *content; uint16_t contentId; // char *unit; uint16_t unitId; }; class HeartRateItemView : public ItemConstructor // 心率区间选择控件 { public: HeartRateItemView(const HeartRateItemInfo &info); ~HeartRateItemView() { RemoveAll(); }; void RefreshItem(const HeartRateItemInfo &itemInfo, int16_t index); bool OnClickEvent(const OHOS::ClickEvent &event); // OHOS::UICheckBox checkBox_; OHOS::UIImageView switch_; OHOS::UIImageView icon_; OHOS::UILabelExt content_; private: uint8_t selectedZoomCount = 1; OHOS::UIImageView moreIcon_; OHOS::UILabelExt unit_; OHOS::ImageInfo *selectRes_{nullptr}; OHOS::ImageInfo *unSelectRes_{nullptr}; OHOS::ImageInfo *iconRes_{nullptr}; }; class HeartRatePickView : public SportViewBase { public: HeartRatePickView(); ~HeartRatePickView(); void ShowView(); void HideView(); HeartRateItemView *heartRateItemViews_[HEART_RATE_MAX_INDEX]{nullptr}; uint8_t heartRateZoomPick[HEART_RATE_MAX_INDEX] = {0}; // 保存当前选择的心率区间索引 private: OHOS::UIView hide_; OHOS::UILabelExt heartRateTitle_; uint8_t selectedZoomCount = 1; // 当前选择的心率区间数量 std::list heartRateListItemInfo_; TjdUITransformListGroup *heartRateListView_{nullptr}; TjdUITransformListGroupAdapter> *heartRateAdapterPtr_{nullptr}; }; #pragma endregion #pragma region 时间提醒、距离提醒item struct TimeOrDistRemindItemInfo { uint8_t index; // char *content; uint16_t contentId; uint8_t type; //0代表为时间提醒,1代表为距离提醒 }; class TimeOrDistRemindItemView : public ItemConstructor { public: TimeOrDistRemindItemView(const TimeOrDistRemindItemInfo &info); ~TimeOrDistRemindItemView() { RemoveAll(); }; void RefreshItem(const TimeOrDistRemindItemInfo &itemInfo, int16_t index); void TimeRemindOnClickEventHandle(void); void DistanceRemindOnClickEventHandle(void); bool OnClickEvent(const OHOS::ClickEvent &event); void SetCurSelectIndex(uint8_t index) { curSelectIndex = index; }; uint8_t GetCurSelectIndex() { return curSelectIndex; }; // OHOS::UICheckBox checkBox_; OHOS::UIImageView switch_; private: uint8_t curSelectIndex = 0; OHOS::UILabelExt content_; OHOS::ImageInfo *selectRes_{nullptr}; OHOS::ImageInfo *unSelectRes_{nullptr}; }; #pragma endregion #pragma region 时间提醒区间选择 enum TimeRemindPickIndex { PER_TEN_MIN_INDEX, PER_TWENTY_MIN_INDEX, PER_THIRTY_MIN_INDEX, PER_FORTY_MIN_INDEX, PER_FIFTY_MIN_INDEX, PER_SIXTY_MIN_INDEX, UNSELECT_MIN_INDEX, MAX_MIN_INDEX, }; class TimeRemindPickView : public SportViewBase { public: TimeRemindPickView(); ~TimeRemindPickView(); void ShowView(); void HideView(); TimeOrDistRemindItemView *timeItemViews_[MAX_MIN_INDEX]{nullptr}; static uint8_t curSelectTimeIndex; private: OHOS::UIView hide_; OHOS::UILabelExt timeRemindTitle_; std::list timeListItemInfo_; TjdUITransformListGroup *timeListView_{nullptr}; TjdUITransformListGroupAdapter> *timeAdapterPtr_{nullptr}; }; #pragma endregion #pragma region 距离提醒区间选择 enum DistanceRemindPickIndex { PER_500_METERS_INDEX, PER_1000_METERS_INDEX, PER_2000_METERS_INDEX, PER_3000_METERS_INDEX, PER_5000_METERS_INDEX, UNSELECT_DISTANCE_INDEX, MAX_DISTANCE_INDEX, }; class DistanceRemindPickView : public SportViewBase { public: DistanceRemindPickView(); ~DistanceRemindPickView(); void ShowView(); void HideView(); TimeOrDistRemindItemView *distItemViews_[MAX_DISTANCE_INDEX]{nullptr}; static uint8_t curSelectDistanceIndex; private: OHOS::UIView hide_; OHOS::UILabelExt distRemindTitle_; std::list distanceListItemInfo_; TjdUITransformListGroup *distanceListView_{nullptr}; TjdUITransformListGroupAdapter> *distanceAdapterPtr_{nullptr}; }; #pragma endregion #pragma region 运动结束提醒 class SportFinishRemindOnclickListener : public OHOS::UIView::OnClickListener, public OHOS::RootView::OnKeyActListener { public: SportFinishRemindOnclickListener(){}; ~SportFinishRemindOnclickListener(){}; virtual bool OnClick(OHOS::UIView &view, const OHOS::ClickEvent &event); bool OnKeyAct(OHOS::UIView &view, const OHOS::KeyEvent &event); private: }; class SportFinishRemindView : public SportViewBase { public: SportFinishRemindView(uint8_t time_stamp); ~SportFinishRemindView(); static SportFinishRemindView *GetInstance(void); private: OHOS::UILabel remindContent_; OHOS::UIImageView cancelImage_; OHOS::UIImageView confirmImage_; SportFinishRemindOnclickListener listener_; SportFinishRemindOnclickListener onkeyListener_; }; #pragma endregion } // namespace TJD #endif