1 /*
2 * Copyright (c) 2020-2021 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "ui_test_rotate_input.h"
17
18 #include "components/ui_label.h"
19 #include "components/ui_label_button.h"
20 #include "cstdio"
21 #include "dock/focus_manager.h"
22 #include "dock/vibrator_manager.h"
23 #include "engines/gfx/gfx_engine_manager.h"
24
25 #if ENABLE_ROTATE_INPUT
26 namespace OHOS {
27 static int16_t g_blank = 20;
28 static int16_t g_listW = 200;
29 static int16_t g_listH = 400;
30 static int16_t g_scrollH = 200;
31 static int16_t g_scrollW = 400;
32 static int16_t g_buttonH = 500;
33 static int16_t g_buttonW = 500;
34 static int16_t g_smallButtonH = 80;
35 static int16_t g_smallButtonW = 200;
36 static int16_t g_swipeH = 200;
37 static int16_t g_swipeW = 400;
38 static int16_t g_sliderW = 40;
39 static int16_t g_sliderH = 300;
40 static int16_t g_testButtonW = 80;
41 static int16_t g_testButtonH = 40;
42 static const char* g_pickerRange[] = {"A0", "B1", "C2", "D3", "E4", "F5", "G6", "H7", "I8", "J9", "K10", "L11"};
43
44 #if ENABLE_VIBRATOR
Print(VibratorType vibratorType)45 void Print(VibratorType vibratorType)
46 {
47 switch (vibratorType) {
48 case VibratorType::VIBRATOR_TYPE_ONE:
49 printf("VIBRATOR_TYPE_ONE\n");
50 break;
51 case VibratorType::VIBRATOR_TYPE_TWO:
52 printf("VIBRATOR_TYPE_TWO\n");
53 break;
54 case VibratorType::VIBRATOR_TYPE_THREE:
55 printf("VIBRATOR_TYPE_THREE\n");
56 break;
57 default:
58 break;
59 }
60 }
61 #endif
62
63 class TestSetRotateFactorListener : public UIView::OnClickListener {
64 public:
TestSetRotateFactorListener(UIView * view,float factor)65 TestSetRotateFactorListener(UIView* view, float factor) : view_(view), factor_(factor) {}
~TestSetRotateFactorListener()66 ~TestSetRotateFactorListener() {}
67
OnClick(UIView & view,const ClickEvent & event)68 bool OnClick(UIView& view, const ClickEvent& event) override
69 {
70 switch (view_->GetViewType()) {
71 case UI_SWIPE_VIEW:
72 static_cast<UISwipeView*>(view_)->SetRotateFactor(factor_);
73 break;
74 case UI_SCROLL_VIEW:
75 static_cast<UIScrollView*>(view_)->SetRotateFactor(factor_);
76 break;
77 default:
78 break;
79 }
80 return true;
81 }
82
83 private:
84 UIView* view_ = nullptr;
85 float factor_ = 0;
86 };
87
SetUp()88 void UITestRotateInput::SetUp()
89 {
90 if (container_ == nullptr) {
91 container_ = new UIScrollView();
92 container_->SetOnTouchListener(this);
93 container_->Resize(Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());
94 container_->SetThrowDrag(true);
95 container_->SetRotateFactor(20); // 20 : rotate factor for container
96 container_->RequestFocus();
97 container_->SetReboundSize(50); // 50 : rebound size
98 }
99 if (adapterData_ == nullptr) {
100 adapterData_ = new List<const char*>();
101 adapterData_->PushBack("000");
102 adapterData_->PushBack("111");
103 adapterData_->PushBack("222");
104 adapterData_->PushBack("333");
105 adapterData_->PushBack("444");
106 adapterData_->PushBack("555");
107 adapterData_->PushBack("666");
108 adapterData_->PushBack("777");
109 adapterData_->PushBack("888");
110 adapterData_->PushBack("999");
111 adapterData_->PushBack("///");
112 adapterData_->PushBack("***");
113 adapterData_->PushBack("+++");
114 adapterData_->PushBack("---");
115 adapterData_->PushBack("...");
116 adapterData_->PushBack("@@@");
117 adapterData_->PushBack("000");
118 adapterData_->PushBack("111");
119 adapterData_->PushBack("222");
120 adapterData_->PushBack("333");
121 adapterData_->PushBack("444");
122 adapterData_->PushBack("555");
123 adapterData_->PushBack("666");
124 adapterData_->PushBack("777");
125 adapterData_->PushBack("888");
126 adapterData_->PushBack("999");
127 adapterData_->PushBack("///");
128 adapterData_->PushBack("***");
129 adapterData_->PushBack("+++");
130 adapterData_->PushBack("---");
131 adapterData_->PushBack("...");
132 adapterData_->PushBack("@@@");
133 }
134 #if ENABLE_VIBRATOR
135 VibratorManager::GetInstance()->RegisterVibratorFunc(Print);
136 #endif
137 }
138
TearDown()139 void UITestRotateInput::TearDown()
140 {
141 if (listener1_ != nullptr) {
142 delete listener1_;
143 listener1_ = nullptr;
144 }
145 if (listener2_ != nullptr) {
146 delete listener2_;
147 listener2_ = nullptr;
148 }
149 if (listener3_ != nullptr) {
150 delete listener3_;
151 listener3_ = nullptr;
152 }
153 if (listener4_ != nullptr) {
154 delete listener4_;
155 listener4_ = nullptr;
156 }
157 if (listener5_ != nullptr) {
158 delete listener5_;
159 listener5_ = nullptr;
160 }
161 container_->ClearFocus();
162 container_->Remove(timePicker_);
163 container_->Remove(picker_);
164 DeleteChildren(container_);
165 container_ = nullptr;
166 if (adapterData_ != nullptr) {
167 adapterData_->Clear();
168 delete adapterData_;
169 adapterData_ = nullptr;
170 }
171 if (adapter_ != nullptr) {
172 delete adapter_;
173 adapter_ = nullptr;
174 }
175 lastX_ = 0;
176 lastY_ = 0;
177 list_ = nullptr;
178 scroll_ = nullptr;
179 swipe_ = nullptr;
180 timePicker_ = nullptr;
181 slider_ = nullptr;
182 picker_ = nullptr;
183 }
184
GetTestView()185 const UIView* UITestRotateInput::GetTestView()
186 {
187 UIKit_Rotate_Event_List_001();
188 UIKit_Rotate_Event_Scroll_View_002();
189 UIKit_Rotate_Event_Swipe_View_003();
190 UIKit_Rotate_Event_Slider_004();
191 UIKit_Rotate_Event_Time_Picker_005();
192 UIKit_Rotate_Event_Picker_006();
193 return container_;
194 }
195
UIKit_Rotate_Event_List_001()196 void UITestRotateInput::UIKit_Rotate_Event_List_001()
197 {
198 if (container_ == nullptr) {
199 return;
200 }
201 UILabel* label = GetTitleLabel("UIList Test");
202 container_->Add(label);
203 label->SetPosition(0, lastY_ + g_blank);
204 if (adapter_ == nullptr) {
205 adapter_ = new TextAdapter();
206 }
207 adapter_->SetData(adapterData_);
208 if (list_ == nullptr) {
209 list_ = new UIList(UIList::VERTICAL);
210 }
211 list_->SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);
212 list_->SetPosition(0, label->GetY() + g_blank, g_listW, g_listH - 200); // 200: mean list reduce height
213 list_->SetStartIndex(6); // 6 : list start index
214 list_->SetAdapter(adapter_);
215 list_->SetOnTouchListener(this);
216 list_->SetThrowDrag(true);
217 list_->SetRotateFactor(10); // 10 : rotate factor
218 list_->SetReboundSize(50); // 50 : rebound size
219 list_->SetIntercept(true);
220 list_->SetLoopState(true);
221 container_->Add(list_);
222 SetLastPos(list_);
223 }
224
UIKit_Rotate_Event_Scroll_View_002()225 void UITestRotateInput::UIKit_Rotate_Event_Scroll_View_002()
226 {
227 if (container_ == nullptr) {
228 return;
229 }
230 UILabel* label = GetTitleLabel("UIScrollView Test");
231 container_->Add(label);
232 label->SetPosition(0, lastY_ + g_blank);
233 if (scroll_ == nullptr) {
234 scroll_ = new UIScrollView();
235 }
236 scroll_->SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);
237 scroll_->SetPosition(0, label->GetY() + g_blank, g_scrollW, g_scrollH);
238 if (Screen::GetInstance().GetScreenShape() == ScreenShape::RECTANGLE) {
239 scroll_->SetXScrollBarVisible(true);
240 }
241 scroll_->SetYScrollBarVisible(true);
242 scroll_->SetRotateFactor(10); // 10 : rotateFactor
243 UIButton* btn = new UIButton();
244 btn->SetPosition(0, 0, g_buttonW, g_buttonH);
245 scroll_->Add(btn);
246 scroll_->SetThrowDrag(true);
247 scroll_->SetOnTouchListener(this);
248 scroll_->SetReboundSize(50); // 50 : rebound size
249 scroll_->SetIntercept(true);
250 container_->Add(scroll_);
251 SetTestLabelButton(label, scroll_);
252 SetLastPos(scroll_);
253 }
254
UIKit_Rotate_Event_Swipe_View_003()255 void UITestRotateInput::UIKit_Rotate_Event_Swipe_View_003()
256 {
257 if (container_ == nullptr) {
258 return;
259 }
260 UILabel* label = GetTitleLabel("UISwipeView Test");
261 container_->Add(label);
262 label->SetPosition(0, lastY_ + g_blank);
263 if (swipe_ == nullptr) {
264 swipe_ = new UISwipeView(UISwipeView::HORIZONTAL);
265 }
266 swipe_->SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);
267 swipe_->SetPosition(0, label->GetY() + g_blank, g_swipeW, g_swipeH);
268 swipe_->SetBlankSize(100); // 100 is blank size
269 UILabelButton* btn1 = new UILabelButton();
270 UILabelButton* btn2 = new UILabelButton();
271 UILabelButton* btn3 = new UILabelButton();
272 UILabelButton* btn4 = new UILabelButton();
273 UILabelButton* btn5 = new UILabelButton();
274 UILabelButton* btn6 = new UILabelButton();
275 UILabelButton* btn7 = new UILabelButton();
276 btn1->SetPosition(0, 0, g_smallButtonW, g_smallButtonH);
277 btn2->SetPosition(0, 0, g_smallButtonW, g_smallButtonH);
278 btn3->SetPosition(0, 0, g_smallButtonW, g_smallButtonH);
279 btn4->SetPosition(0, 0, g_smallButtonW, g_smallButtonH);
280 btn5->SetPosition(0, 0, g_smallButtonW, g_smallButtonH);
281 btn6->SetPosition(0, 0, g_smallButtonW, g_smallButtonH);
282 btn7->SetPosition(0, 0, g_smallButtonW, g_smallButtonH);
283 btn1->SetText("Button 1");
284 btn2->SetText("Button 2");
285 btn3->SetText("Button 3");
286 btn4->SetText("Button 4");
287 btn5->SetText("Button 5");
288 btn6->SetText("Button 6");
289 btn7->SetText("Button 7");
290 swipe_->Add(btn1);
291 swipe_->Add(btn2);
292 swipe_->Add(btn3);
293 swipe_->Add(btn4);
294 swipe_->Add(btn5);
295 swipe_->Add(btn6);
296 swipe_->Add(btn7);
297 swipe_->SetOnTouchListener(this);
298 swipe_->SetRotateFactor(30); // 30 : rotate factor
299 swipe_->SetIntercept(true);
300 container_->Add(swipe_);
301 SetTestLabelButton(label, swipe_);
302 SetLastPos(swipe_);
303 }
304
UIKit_Rotate_Event_Slider_004()305 void UITestRotateInput::UIKit_Rotate_Event_Slider_004()
306 {
307 if (container_ == nullptr) {
308 return;
309 }
310 UILabel* label = GetTitleLabel("UISlider Test");
311 container_->Add(label);
312 label->SetPosition(0, lastY_ + g_blank);
313 if (slider_ == nullptr) {
314 slider_ = new UISlider();
315 }
316 slider_->SetPosition(50, label->GetY() + g_blank, g_sliderW, g_sliderH); // 50: position x
317 slider_->SetValidHeight(200); // 200: valid height
318 slider_->SetValue(0); // 0: progress bar current value
319 slider_->SetDirection(UISlider::Direction::DIR_BOTTOM_TO_TOP);
320 slider_->SetStyle(STYLE_BACKGROUND_COLOR, Color::Gray().full);
321 slider_->SetOnTouchListener(this);
322 container_->Add(slider_);
323 SetLastPos(slider_);
324 }
325
UIKit_Rotate_Event_Time_Picker_005()326 void UITestRotateInput::UIKit_Rotate_Event_Time_Picker_005()
327 {
328 if (container_ == nullptr) {
329 return;
330 }
331 UILabel* label = GetTitleLabel("UITimePicker Test");
332 container_->Add(label);
333 label->SetPosition(0, lastY_ + g_blank);
334 if (timePicker_ == nullptr) {
335 timePicker_ = new UITimePicker();
336 }
337 timePicker_->EnableSecond(true);
338 timePicker_->SetPosition(0, label->GetY() + g_blank, g_listW, g_listH);
339 timePicker_->SetItemHeight(50); // 50 height
340 timePicker_->SetIntercept(true);
341
342 UIView* hour = timePicker_->GetChildById("hour");
343 if (hour == nullptr) {
344 return;
345 }
346 static_cast<UIList*>(hour)->SetRotateFactor(5); // 5: rotate factor
347 hour->SetOnTouchListener(this);
348
349 UIView* minute = timePicker_->GetChildById("minute");
350 if (minute == nullptr) {
351 return;
352 }
353 static_cast<UIList*>(minute)->SetRotateFactor(5); // 5: rotate factor
354 minute->SetOnTouchListener(this);
355
356 UIView* second = timePicker_->GetChildById("second");
357 if (second == nullptr) {
358 return;
359 }
360 static_cast<UIList*>(second)->SetRotateFactor(5); // 5: rotate factor
361 second->SetOnTouchListener(this);
362
363 container_->Add(timePicker_);
364 SetLastPos(timePicker_);
365 }
366
UIKit_Rotate_Event_Picker_006()367 void UITestRotateInput::UIKit_Rotate_Event_Picker_006()
368 {
369 if (container_ == nullptr) {
370 return;
371 }
372 UILabel* label = GetTitleLabel("UIPicker Test");
373 container_->Add(label);
374 label->SetPosition(0, lastY_ + g_blank);
375 if (picker_ == nullptr) {
376 picker_ = new UIPicker();
377 }
378 picker_->SetPosition(0, label->GetY() + g_blank, g_listW, g_listH);
379 picker_->SetItemHeight(50); // 50: height
380 picker_->SetValues(g_pickerRange, sizeof(g_pickerRange) / sizeof(g_pickerRange[0]));
381 picker_->SetOnTouchListener(this);
382 picker_->SetRotateFactor(5); // 5: rotate factor
383 container_->Add(picker_);
384 SetLastPos(picker_);
385 }
OnPress(UIView & view,const PressEvent & event)386 bool UITestRotateInput::OnPress(UIView& view, const PressEvent& event)
387 {
388 if (&view == container_) {
389 container_->RequestFocus();
390 return true;
391 } else if (&view == list_) {
392 list_->RequestFocus();
393 return true;
394 } else if (&view == scroll_) {
395 scroll_->RequestFocus();
396 return true;
397 } else if (&view == swipe_) {
398 swipe_->RequestFocus();
399 return true;
400 } else if (&view == slider_) {
401 slider_->RequestFocus();
402 return true;
403 } else if (&view == timePicker_->GetChildById(UITimePicker::HOUR_LIST_NAME)) {
404 view.RequestFocus();
405 return true;
406 } else if (&view == timePicker_->GetChildById(UITimePicker::MIN_LIST_NAME)) {
407 view.RequestFocus();
408 return true;
409 } else if (&view == timePicker_->GetChildById(UITimePicker::SEC_LIST_NAME)) {
410 view.RequestFocus();
411 return true;
412 } else if (&view == picker_) {
413 picker_->RequestFocus();
414 return true;
415 }
416 return false;
417 }
SetLastPos(UIView * view)418 void UITestRotateInput::SetLastPos(UIView* view)
419 {
420 if (view == nullptr) {
421 return;
422 }
423 lastX_ = view->GetX();
424 lastY_ = view->GetY() + view->GetHeight();
425 }
426
CreateLabelButton(int16_t x,int16_t y,UIView::OnClickListener * listener,const char * text)427 void UITestRotateInput::CreateLabelButton(int16_t x, int16_t y, UIView::OnClickListener* listener, const char* text)
428 {
429 UILabelButton* labelButton = new UILabelButton();
430 labelButton->SetPosition(x, y, g_testButtonW, g_testButtonH);
431 labelButton->SetOnClickListener(listener);
432 labelButton->SetText(text);
433 labelButton->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 15);
434 container_->Add(labelButton);
435 SetLastPos(labelButton);
436 }
437
SetTestLabelButton(UILabel * label,UIView * view)438 void UITestRotateInput::SetTestLabelButton(UILabel* label, UIView* view)
439 {
440 if (listener1_ == nullptr) {
441 listener1_ = static_cast<UIView::OnClickListener*>(new TestSetRotateFactorListener(view, 0));
442 }
443 CreateLabelButton(g_swipeW + g_blank, label->GetY() + g_blank, listener1_, "factor: 0");
444 if (listener2_ == nullptr) {
445 listener2_ =
446 static_cast<UIView::OnClickListener*>(new TestSetRotateFactorListener(view, 15)); // 15: rotate factor
447 }
448 CreateLabelButton(g_swipeW + g_blank, lastY_ + g_blank, listener2_, "factor: 15");
449 if (listener3_ == nullptr) {
450 listener3_ =
451 static_cast<UIView::OnClickListener*>(new TestSetRotateFactorListener(view, -15)); // -15: rotate factor
452 }
453 CreateLabelButton(g_swipeW + g_blank, lastY_ + g_blank, listener3_, "factor: -15");
454 if (listener4_ == nullptr) {
455 listener4_ =
456 static_cast<UIView::OnClickListener*>(new TestSetRotateFactorListener(view, 30)); // 30: rotate factor
457 }
458 int16_t x = lastX_ + g_testButtonW + g_blank;
459 CreateLabelButton(x, label->GetY() + g_blank, listener4_, "factor: 30");
460 if (listener5_ == nullptr) {
461 listener5_ =
462 static_cast<UIView::OnClickListener*>(new TestSetRotateFactorListener(view, -30)); // -30: rotate factor
463 }
464 CreateLabelButton(x, lastY_ + g_blank, listener5_, "factor: -30");
465 }
466 } // namespace OHOS
467 #endif
468