573 lines
16 KiB
C++
573 lines
16 KiB
C++
#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<GoalSelectViewInfo> *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<HeartRateItemInfo> // 心率区间选择控件
|
||
{
|
||
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<HeartRateItemInfo> heartRateListItemInfo_;
|
||
TjdUITransformListGroup *heartRateListView_{nullptr};
|
||
TjdUITransformListGroupAdapter<HeartRateItemInfo, HeartRateItemView, std::list<HeartRateItemInfo>>
|
||
*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<TimeOrDistRemindItemInfo>
|
||
{
|
||
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<TimeOrDistRemindItemInfo> timeListItemInfo_;
|
||
TjdUITransformListGroup *timeListView_{nullptr};
|
||
TjdUITransformListGroupAdapter<TimeOrDistRemindItemInfo, TimeOrDistRemindItemView, std::list<TimeOrDistRemindItemInfo>>
|
||
*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<TimeOrDistRemindItemInfo> distanceListItemInfo_;
|
||
TjdUITransformListGroup *distanceListView_{nullptr};
|
||
TjdUITransformListGroupAdapter<TimeOrDistRemindItemInfo, TimeOrDistRemindItemView, std::list<TimeOrDistRemindItemInfo>>
|
||
*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 |