ff2e74b017a366fd08f941b1fcb34603c8aa05bd
[mirrors/FD230.git] /
1 /*
2  * @Author: luozheng 1732036298@qq.com
3  * @Date: 2024-09-29 15:57:59
4  * @LastEditors: luozheng 1732036298@qq.com
5  * @LastEditTime: 2024-11-05 14:40:12
6  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/src/RespiratoryTrainingDurationSelectionView.cpp
7  */
8 #include "respiratorytraining/include/RespiratoryTrainingDurationSelectionView.h"
9 #include "respiratorytraining/include/RespiratoryTrainingPresenter.h"
10 #include "respiratorytraining/include/RespiratoryTrainingModel.h"
11 #include "wearable_log.h"
12 #include "UiConfig.h"
13 #include "dock/focus_manager.h"
14 #include "ui_resource_string.h"
15 #include "common/screen.h"
16 namespace OHOS
17 {
18
19     static RespiratoryTrainingDurationSelectionView *g_pRespiratoryTrainingDurationSelectionView{nullptr};
20     RespiratoryTrainingDurationSelectionView::RespiratoryTrainingDurationSelectionView(/* args */)
21     {
22         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingDurationSelectionView::RespiratoryTrainingDurationSelectionView");
23         g_pRespiratoryTrainingDurationSelectionView = this;
24     }
25
26     RespiratoryTrainingDurationSelectionView::~RespiratoryTrainingDurationSelectionView()
27     {
28         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingDurationSelectionView::~RespiratoryTrainingDurationSelectionView");
29         ClearAll();
30         g_pRespiratoryTrainingDurationSelectionView = nullptr;
31     }
32
33     RespiratoryTrainingDurationSelectionView *RespiratoryTrainingDurationSelectionView::GetInstance(void)
34     {
35         return g_pRespiratoryTrainingDurationSelectionView;
36     }
37
38     void RespiratoryTrainingDurationSelectionView::ClearAll(void)
39     {
40         if (scrollView)
41         {
42             scrollView->RemoveAll();
43             delete TitleLabel;
44             TitleLabel = nullptr;
45             for (int i = 0; i < MAX_NUM_TRAINING_DURATION; i++)
46             {
47                 delete DurationLabel[i];
48                 DurationLabel[i] = nullptr;
49                 delete DurationButton[i];
50                 DurationButton[i] = nullptr;
51             }
52             delete temp;
53             temp = nullptr;
54             delete scrollView;
55             scrollView = nullptr;
56         }
57     }
58
59     UILabelExt *RespiratoryTrainingDurationSelectionView::LabelViewinit(LabelConfig &labelconfig)
60     {
61         UILabelExt *label = new UILabelExt();
62         if (label == nullptr)
63         {
64             return nullptr;
65         }
66         label->SetPosition(labelconfig.left, labelconfig.top, labelconfig.width, labelconfig.height);
67         label->SetStyle(STYLE_TEXT_FONT, labelconfig.fontSize);
68         label->SetStyle(STYLE_LINE_HEIGHT, labelconfig.lineHeigh);
69         label->SetTextId(labelconfig.textId);
70         // label->SetText(labelconfig.text);
71         label->SetLineBreakMode(labelconfig.lineBreakMode);
72         label->SetAlign(TEXT_ALIGNMENT_LEFT, TEXT_ALIGNMENT_CENTER);
73         label->SetRollSpeed(23);
74         label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, labelconfig.fontSize);
75         return label;
76     }
77
78     UILabelButtonExt *RespiratoryTrainingDurationSelectionView::LabelButtonViewInit(LabelButtonConfig &labelbuttonconfig)
79     {
80         UILabelButtonExt *labelButton = new UILabelButtonExt();
81         if (labelButton == nullptr)
82         {
83             return nullptr;
84         }
85         labelButton->SetPosition(labelbuttonconfig.left, labelbuttonconfig.top);
86         labelButton->Resize(labelbuttonconfig.width, labelbuttonconfig.height);
87         labelButton->SetViewId(labelbuttonconfig.viewId);
88         labelButton->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919);
89         labelButton->SetImagePosition(300, 30);
90         labelButton->SetImageSrc(PNG_CHECKBOX_OFF_IMAGE, PNG_CHECKBOX_OFF_IMAGE);
91         // labelButton->SetTextId(labelbuttonconfig.textId);
92         // labelButton->SetAlign(TEXT_ALIGNMENT_LEFT);
93         // labelButton->SetLabelPosition(100, 0);
94         // labelButton->SetFont(DEFAULT_VECTOR_FONT_FILENAME, labelbuttonconfig.fontSize);
95         // labelButton->SetStyle(STYLE_LINE_HEIGHT, labelbuttonconfig.lineHeigh);
96         labelButton->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff000000, UIButton::PRESSED);
97         return labelButton;
98     }
99
100     UIScrollView *RespiratoryTrainingDurationSelectionView::RespiratoryTrainingDurationSelectionViewInit(void)
101     {
102         if (scrollView == nullptr)
103         {
104             WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThemeStyleView::InitThemeStyleScrollView");
105             scrollView = new UIScrollView();
106             if (scrollView == nullptr)
107             {
108                 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "scrollView new fail!");
109                 return nullptr;
110             }
111             scrollView->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());
112             scrollView->SetViewId(RESPIRATORYTRAINING_DURATIONSELECTION_VIEW);
113             scrollView->SetScrollBlankSize(30);
114             scrollView->SetReboundSize(30);
115             scrollView->SetDirection(1);
116             scrollView->SetTouchable(true);
117             scrollView->SetDraggable(true);
118             scrollView->SetThrowDrag(true);         // 设置手指抬起屏幕后是否继续滚动。
119             scrollView->SetMaxScrollDistance(1000); // 设置手指抬起屏幕后的最大滚动距离。
120             scrollView->SetSwipeACCLevel(200);      /*设置手指抬起屏幕后的补偿距离。*/
121             scrollView->SetRotateFactor(1.0);
122             FocusManager::GetInstance()->RequestFocus(scrollView);
123             FocusManager::GetInstance()->RequestFocusByDirection(FOCUS_DIRECTION_UP);
124             UIView::OnDragListener *dragListener = static_cast<UIView::OnDragListener *>(RespiratoryTrainingPresenter::GetInstance());
125             if (dragListener == nullptr)
126             {
127                 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "dragListener is nullptr!");
128                 return nullptr;
129             }
130             scrollView->SetOnDragListener(dragListener);
131             /* -------------------------------------------------------------------------- */
132             TitleLabel = new UILabelExt();
133             if (TitleLabel == nullptr)
134             {
135                 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TitleLabel new fail!");
136                 return nullptr;
137             }
138             TitleLabel->SetPosition(83, 50, 300, 35);
139             TitleLabel->SetTextId(STR_DURATION_SETTINGS); // 时长设置
140             TitleLabel->SetStyle(STYLE_TEXT_FONT, 30);
141             TitleLabel->SetStyle(STYLE_LINE_HEIGHT, 35);
142             TitleLabel->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);
143             TitleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
144             TitleLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
145             scrollView->Add(TitleLabel);
146             /* -------------------------------------------------------------------------- */
147             UIView::OnClickListener *clickListener = static_cast<UIView::OnClickListener *>(RespiratoryTrainingPresenter::GetInstance());
148             if (clickListener == nullptr)
149             {
150                 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "clickListener is nullptr!");
151                 return nullptr;
152             }
153             LabelButtonConfig labelbuttonconfig;
154             const char *viewId[MAX_NUM_TRAINING_DURATION] = {TRAINING_DURATION_ONE_MIN, TRAINING_DURATION_TWO_MIN, TRAINING_DURATION_THREE_MIN, TRAINING_DURATION_FOUR_MIN, TRAINING_DURATION_FIVE_MIN};
155             for (int i = 0; i < MAX_NUM_TRAINING_DURATION; i++)
156             {
157                 labelbuttonconfig.left = 43;
158                 labelbuttonconfig.top = 120 + 120 * i;
159                 labelbuttonconfig.width = 380;
160                 labelbuttonconfig.height = 100;
161                 labelbuttonconfig.viewId = viewId[i];
162                 DurationButton[i] = LabelButtonViewInit(labelbuttonconfig);
163                 if (DurationButton[i] == nullptr)
164                 {
165                     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DurationButton[%d] is nullptr", i);
166                     return nullptr;
167                 }
168                 DurationButton[i]->SetOnClickListener(clickListener);
169                 scrollView->Add(DurationButton[i]);
170             }
171             /* -------------------------------------------------------------------------- */
172             int16_t textId[MAX_NUM_TRAINING_DURATION] = {STR_1_MIN, STR_2_MIN,STR_3_MIN,STR_4_MIN, STR_5_MIN};
173             // const char *text[MAX_NUM_TRAINING_DURATION] = {"1分钟", "2分钟", "3分钟", "4分钟", "5分钟"};
174             LabelConfig labelConfig = {
175                 .left = 103,
176                 .top = 153,
177                 .width = 210,
178                 .height = 35,
179                 .fontSize = 30,
180                 .lineHeigh = 35,
181                 .textId = 0,
182                 .lineBreakMode = UILabel::LINE_BREAK_OSCILLATION,
183             };
184             for (int16_t i = 0; i < MAX_NUM_TRAINING_DURATION; i++)
185             {
186                 labelConfig.top = 153 + 120 * i;
187                 labelConfig.textId = textId[i];
188                 // labelConfig.text = text[i];
189                 DurationLabel[i] = LabelViewinit(labelConfig);
190                 if (DurationLabel[i] == nullptr)
191                 {
192                     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DurationLabel[%d] is nullptr", i);
193                     return nullptr;
194                 }
195                 scrollView->Add(DurationLabel[i]);
196             }
197             /* -------------------------------------------------------------------------- */
198             if (temp == nullptr)
199             {
200                 temp = new UIImageView();
201                 if (temp == nullptr)
202                 {
203                     return nullptr;
204                 }
205                 int y = DurationButton[MAX_NUM_TRAINING_DURATION - 1]->GetY() + DurationButton[MAX_NUM_TRAINING_DURATION - 1]->GetHeight();
206                 temp->SetPosition(43, y, 380, 40);
207                 temp->SetVisible(false);
208                 scrollView->Add(temp);
209             }
210         }
211         UpdateRespiratoryTrainingDurationSelectionView();
212         return scrollView;
213     }
214
215     void RespiratoryTrainingDurationSelectionView::UpdateRespiratoryTrainingDurationSelectionView(void)
216     {
217         for (int i = 0; i < MAX_NUM_TRAINING_DURATION; i++)
218         {
219             if (i == RespiratoryTrainingModel::GetInstance().GetRespiratoryTrainingSelectTime() - 1)
220             {
221                 DurationButton[i]->SetImageSrc(PNG_CHECKBOX_ON_IMAGE, PNG_CHECKBOX_ON_IMAGE);
222             }
223             else
224             {
225                 DurationButton[i]->SetImageSrc(PNG_CHECKBOX_OFF_IMAGE, PNG_CHECKBOX_OFF_IMAGE);
226             }
227             DurationButton[i]->Invalidate();
228         }
229     }
230 }