• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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