• 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_button.h"
17 
18 #include "common/screen.h"
19 #include "components/root_view.h"
20 #include "components/ui_digital_clock.h"
21 #include "components/ui_label.h"
22 #include "components/ui_label_button.h"
23 #include "components/ui_radio_button.h"
24 #include "components/ui_toggle_button.h"
25 #include "font/ui_font.h"
26 #include "test_resource_config.h"
27 
28 namespace OHOS {
SetUp()29 void UITestBUTTON::SetUp()
30 {
31     if (container_ == nullptr) {
32         container_ = new UIScrollView();
33         container_->Resize(Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight() - BACK_BUTTON_HEIGHT);
34         container_->SetHorizontalScrollState(false);
35     }
36 }
37 
TearDown()38 void UITestBUTTON::TearDown()
39 {
40     if (checkBoxChangeListener_ != nullptr) {
41         delete checkBoxChangeListener_;
42         checkBoxChangeListener_ = nullptr;
43     }
44     if (checkBoxChangeListener1_ != nullptr) {
45         delete checkBoxChangeListener1_;
46         checkBoxChangeListener1_ = nullptr;
47     }
48     if (checkBoxChangeListener2_ != nullptr) {
49         delete checkBoxChangeListener2_;
50         checkBoxChangeListener2_ = nullptr;
51     }
52     if (radioChangeListener_ != nullptr) {
53         delete radioChangeListener_;
54         radioChangeListener_ = nullptr;
55     }
56     if (radioChangeListener1_ != nullptr) {
57         delete radioChangeListener1_;
58         radioChangeListener1_ = nullptr;
59     }
60     if (radioChangeListener2_ != nullptr) {
61         delete radioChangeListener2_;
62         radioChangeListener2_ = nullptr;
63     }
64     if (toggleChangeListener_ != nullptr) {
65         delete toggleChangeListener_;
66         toggleChangeListener_ = nullptr;
67     }
68     if (toggleChangeListener1_ != nullptr) {
69         delete toggleChangeListener1_;
70         toggleChangeListener1_ = nullptr;
71     }
72     if (toggleChangeListener2_ != nullptr) {
73         delete toggleChangeListener2_;
74         toggleChangeListener2_ = nullptr;
75     }
76     if (clickEnableVisiableListener_ != nullptr) {
77         delete clickEnableVisiableListener_;
78         clickEnableVisiableListener_ = nullptr;
79     }
80     if (clickDisableVisiableListener_ != nullptr) {
81         delete clickDisableVisiableListener_;
82         clickDisableVisiableListener_ = nullptr;
83     }
84     if (clickEnableTouchableListener_ != nullptr) {
85         delete clickEnableTouchableListener_;
86         clickEnableTouchableListener_ = nullptr;
87     }
88     if (clickDisableTouchableListener_ != nullptr) {
89         delete clickDisableTouchableListener_;
90         clickDisableTouchableListener_ = nullptr;
91     }
92     if (clickColorToWhiteListener_ != nullptr) {
93         delete clickColorToWhiteListener_;
94         clickColorToWhiteListener_ = nullptr;
95     }
96     if (clickColorToRedListener_ != nullptr) {
97         delete clickColorToRedListener_;
98         clickColorToRedListener_ = nullptr;
99     }
100     if (clickRevetColorListener_ != nullptr) {
101         delete clickRevetColorListener_;
102         clickRevetColorListener_ = nullptr;
103     }
104     if (clickRevetToOriginListener_ != nullptr) {
105         delete clickRevetToOriginListener_;
106         clickRevetToOriginListener_ = nullptr;
107     }
108     if (clickBigListener_ != nullptr) {
109         delete clickBigListener_;
110         clickBigListener_ = nullptr;
111     }
112     if (clickLeftListener_ != nullptr) {
113         delete clickLeftListener_;
114         clickLeftListener_ = nullptr;
115     }
116     if (clickRightListener_ != nullptr) {
117         delete clickRightListener_;
118         clickRightListener_ = nullptr;
119     }
120     if (clickUpListener_ != nullptr) {
121         delete clickUpListener_;
122         clickUpListener_ = nullptr;
123     }
124     if (clickDownListener_ != nullptr) {
125         delete clickDownListener_;
126         clickDownListener_ = nullptr;
127     }
128     if (clickSmallListener_ != nullptr) {
129         delete clickSmallListener_;
130         clickSmallListener_ = nullptr;
131     }
132     if (enableAnimationListener_ != nullptr) {
133         delete enableAnimationListener_;
134         enableAnimationListener_ = nullptr;
135     }
136     if (disableAnimationListener_ != nullptr) {
137         delete disableAnimationListener_;
138         disableAnimationListener_ = nullptr;
139     }
140     DeleteChildren(container_);
141     container_ = nullptr;
142 }
143 
144 class TestBtnOnStateChangeListener : public OHOS::UICheckBox::OnChangeListener {
145 public:
TestBtnOnStateChangeListener(UILabel * uiLabel)146     explicit TestBtnOnStateChangeListener(UILabel* uiLabel) : uiLabel_(uiLabel) {}
147 
~TestBtnOnStateChangeListener()148     ~TestBtnOnStateChangeListener() {}
149 
OnChange(UICheckBox::UICheckBoxState state)150     bool OnChange(UICheckBox::UICheckBoxState state) override
151     {
152         if (state == UICheckBox::UICheckBoxState::SELECTED) {
153             uiLabel_->SetText("ON");
154         } else {
155             uiLabel_->SetText("OFF");
156         }
157         uiLabel_->Invalidate();
158         return true;
159     }
160 
161 private:
162     UILabel* uiLabel_;
163 };
164 
GetTestView()165 const UIView* UITestBUTTON::GetTestView()
166 {
167     UIKitCheckBoxTest001();
168     UIKitRadioButtonTest001();
169     UIKitToggleButtonTest001();
170     UIKitCheckBoxTest002();
171     UIKitRadioButtonTest002();
172     UIKitToggleButtonTest002();
173     UIKitButtonTest001();
174     return container_;
175 }
176 
CreateButtonGroup(int16_t posX,int16_t posY,int16_t width,int16_t height,UICheckBox::OnChangeListener ** listener,const char * id,UIViewType type,const char * name)177 UIViewGroup* UITestBUTTON::CreateButtonGroup(int16_t posX,
178                                              int16_t posY,
179                                              int16_t width,
180                                              int16_t height,
181                                              UICheckBox::OnChangeListener** listener,
182                                              const char* id,
183                                              UIViewType type,
184                                              const char* name)
185 {
186     UIViewGroup* group = new UIViewGroup();
187     group->SetPosition(posX, posY, 300, 150); // 300: width, 150: height
188     UILabel* label = new UILabel();
189     group->Add(label);
190     label->SetPosition(10, 30, 80, 20); // 10: posX 30 posY 80 width 20 height
191     label->SetText("State: ");
192 
193     UILabel* label1 = new UILabel();
194     group->Add(label1);
195     label1->SetPosition(70, 30, 40, 20); // 70: posX 30 posY 40 width 20 height
196     *listener = static_cast<UICheckBox::OnChangeListener*>(new TestBtnOnStateChangeListener(label1));
197 
198     UICheckBox* checkBox = nullptr;
199     if (type == UIViewType::UI_TOGGLE_BUTTON) {
200         checkBox = static_cast<UICheckBox*>(new UIToggleButton());
201     } else if (type == UIViewType::UI_RADIO_BUTTON) {
202         checkBox = static_cast<UICheckBox*>(new UIRadioButton(name));
203     } else {
204         checkBox = new UICheckBox();
205         checkBox->SetImages("", "");
206     }
207     group->Add(checkBox);
208     checkBox->SetViewId(id);
209     checkBox->SetOnChangeListener(*listener);
210     checkBox->SetPosition(100, 0, width, height); // 100: posX 0: posY
211     if (checkBox->GetState() == UICheckBox::SELECTED) {
212         label1->SetText("ON");
213     } else {
214         label1->SetText("OFF");
215     }
216     return group;
217 }
218 
UIKitCheckBoxTest001()219 void UITestBUTTON::UIKitCheckBoxTest001()
220 {
221     if (container_ != nullptr) {
222         UILabel* label = new UILabel();
223         container_->Add(label);
224         label->SetPosition(TEXT_DISTANCE_TO_LEFT_SIDE, 5, // 5: y-coordinate
225                            Screen::GetInstance().GetWidth(), TITLE_LABEL_DEFAULT_HEIGHT);
226         label->SetText("checkbox功能");
227         label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_DEFAULT_SIZE);
228         // 40: posX 35 posY 100 width 100 height
229         UIViewGroup* group = CreateButtonGroup(40, 35, 100, 100, &checkBoxChangeListener_, UI_TEST_CHECKBOX_1);
230         // 250: posX 35 posY 100 width 100 height
231         UIViewGroup* group1 = CreateButtonGroup(250, 35, 100, 100, &checkBoxChangeListener1_, UI_TEST_CHECKBOX_2);
232         // 500: posX 35 posY 100 width 100 height
233         UIViewGroup *group2 = CreateButtonGroup(500, 35, 100, 100, &checkBoxChangeListener2_, UI_TEST_CHECKBOX_3);
234         container_->Add(group);
235         container_->Add(group1);
236         container_->Add(group2);
237     }
238 }
239 
UIKitRadioButtonTest001()240 void UITestBUTTON::UIKitRadioButtonTest001()
241 {
242     if (container_ != nullptr) {
243         UILabel* label = new UILabel();
244         container_->Add(label);
245         // 0:x-coordinate, 130:y-coordinate, 20:new height
246         label->SetPosition(TEXT_DISTANCE_TO_LEFT_SIDE, 130, Screen::GetInstance().GetWidth(),
247                            TITLE_LABEL_DEFAULT_HEIGHT);
248         label->SetText("radiobutton功能");
249         label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_DEFAULT_SIZE);
250         // 40: posX 160 posY 100 width 100 height
251         UIViewGroup* group = CreateButtonGroup(40, 160, 100, 100, &radioChangeListener_, UI_TEST_RADIO_BUTTON_1,
252                                                UIViewType::UI_RADIO_BUTTON, "bb");
253         // 250: posX 160 posY 100 width 100 height
254         UIViewGroup* group1 = CreateButtonGroup(250, 160, 100, 100, &radioChangeListener1_, UI_TEST_RADIO_BUTTON_2,
255                                                 UIViewType::UI_RADIO_BUTTON, "bb");
256         // 500: posX 160 posY 100 width 100 height
257         UIViewGroup* group2 = CreateButtonGroup(500, 160, 100, 100, &radioChangeListener2_, UI_TEST_RADIO_BUTTON_3,
258                                                 UIViewType::UI_RADIO_BUTTON, "bb");
259         container_->Add(group);
260         container_->Add(group1);
261         container_->Add(group2);
262     }
263 }
264 
UIKitToggleButtonTest001()265 void UITestBUTTON::UIKitToggleButtonTest001()
266 {
267     if (container_ != nullptr) {
268         UILabel* label = new UILabel();
269         container_->Add(label);
270         // 0:x-coordinate, 270:y-coordinate, 20:new height
271         label->SetPosition(TEXT_DISTANCE_TO_LEFT_SIDE, 270, Screen::GetInstance().GetWidth(),
272                            TITLE_LABEL_DEFAULT_HEIGHT);
273         label->SetText("togglebutton功能");
274         label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_DEFAULT_SIZE);
275 
276         // 40: posX 300 posY 100 width 100 height
277         UIViewGroup* group = CreateButtonGroup(40, 300, 100, 100, &toggleChangeListener_, UI_TEST_TOGGLE_BUTTON_1,
278                                                UIViewType::UI_TOGGLE_BUTTON);
279         // 250: posX 300 posY 100 width 100 height
280         UIViewGroup* group1 = CreateButtonGroup(250, 300, 100, 100, &toggleChangeListener1_, UI_TEST_TOGGLE_BUTTON_2,
281                                                 UIViewType::UI_TOGGLE_BUTTON);
282         // 500: posX 300 posY 100 width 100 height
283         UIViewGroup* group2 = CreateButtonGroup(500, 300, 100, 100, &toggleChangeListener2_, UI_TEST_TOGGLE_BUTTON_3,
284                                                 UIViewType::UI_TOGGLE_BUTTON);
285         container_->Add(group);
286         container_->Add(group1);
287         container_->Add(group2);
288     }
289 }
UIKitCheckBoxTest002() const290 void UITestBUTTON::UIKitCheckBoxTest002() const
291 {
292     if (container_ != nullptr) {
293         UILabel* label = new UILabel();
294         container_->Add(label);
295         // 0:x-coordinate, 400:y-coordinate, 20:new height
296         label->SetPosition(TEXT_DISTANCE_TO_LEFT_SIDE, 400, Screen::GetInstance().GetWidth(),
297                            TITLE_LABEL_DEFAULT_HEIGHT);
298         label->SetText("checkbox SetImage功能");
299         label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_DEFAULT_SIZE);
300 
301         UICheckBox* checkbox = new UICheckBox();
302         checkbox->SetPosition(30, 430); // 30: x-coordinate, 430: y-coordinate
303         checkbox->SetWidth(130);        // 130: width
304         checkbox->SetHeight(130);       // 130: height
305         checkbox->SetViewId(UI_TEST_CHECKBOX_SETIMAGE_1);
306         checkbox->SetImages(BLUE_IMAGE_PATH, YELLOW_IMAGE_PATH);
307 
308         UICheckBox* checkbox2 = new UICheckBox();
309         checkbox2->SetPosition(200, 430); // 200: x-coordinate, 430: y-coordinate
310         checkbox2->SetWidth(130);         // 130: width
311         checkbox2->SetHeight(130);        // 130: height
312         checkbox2->SetViewId(UI_TEST_CHECKBOX_SETIMAGE_2);
313         checkbox2->SetImages(GREEN_IMAGE_PATH, RED_IMAGE_PATH);
314 
315         UICheckBox* checkbox3 = new UICheckBox();
316         checkbox3->SetPosition(350, 430); // 350: x-coordinate, 430: y-coordinate
317         checkbox3->SetViewId(UI_TEST_CHECKBOX_SETIMAGE_3);
318 
319         UICheckBox* checkbox4 = new UICheckBox();
320         checkbox4->SetPosition(450, 430); // 450: x-coordinate, 430: y-coordinate
321         checkbox4->SetViewId(UI_TEST_CHECKBOX_SETIMAGE_4);
322 
323         container_->Add(checkbox);
324         container_->Add(checkbox2);
325         container_->Add(checkbox3);
326         container_->Add(checkbox4);
327     }
328 }
329 
UIKitRadioButtonTest002() const330 void UITestBUTTON::UIKitRadioButtonTest002() const
331 {
332     if (container_ != nullptr) {
333         UILabel* label = new UILabel();
334         container_->Add(label);
335         // 0:x-coordinate, 570:y-coordinate, 20:new height
336         label->SetPosition(TEXT_DISTANCE_TO_LEFT_SIDE, 570, Screen::GetInstance().GetWidth(),
337                            TITLE_LABEL_DEFAULT_HEIGHT);
338         label->SetText("radiobutton SetImage功能");
339         label->SetViewId("radiobuttonLabel");
340         label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_DEFAULT_SIZE);
341 
342         UIRadioButton* radioButton = new UIRadioButton("aaa");
343         radioButton->SetPosition(30, 10); // 30: x-coordinate, 10: y-coordinate
344         radioButton->SetWidth(130);       // 130: width
345         radioButton->SetHeight(130);      // 130: height
346         radioButton->SetViewId(UI_TEST_RADIO_SETIMAGE_1);
347         radioButton->SetImages(BLUE_IMAGE_PATH, YELLOW_IMAGE_PATH);
348 
349         UIRadioButton* radioButton2 = new UIRadioButton("aaa");
350         radioButton2->SetPosition(200, 10); // 200: x-coordinate, 10: y-coordinate
351         radioButton2->SetWidth(130);        // 130: width
352         radioButton2->SetHeight(130);       // 130: height
353         radioButton2->SetViewId(UI_TEST_RADIO_SETIMAGE_2);
354         radioButton2->SetImages(GREEN_IMAGE_PATH, RED_IMAGE_PATH);
355 
356         OHOS::UIViewGroup* viewGroup = new UIViewGroup();
357         viewGroup->SetPosition(0, 600);                              // 0: x-coordinate, 600: y-coordinate
358         viewGroup->SetWidth(Screen::GetInstance().GetWidth());       // 2: half width
359         viewGroup->SetHeight(Screen::GetInstance().GetHeight() / 2); // 2: half height
360 
361         viewGroup->Add(radioButton);
362         viewGroup->Add(radioButton2);
363         viewGroup->SetStyle(STYLE_BACKGROUND_OPA, 0);
364 
365         container_->Add(viewGroup);
366     }
367 }
368 
UIKitToggleButtonTest002()369 void UITestBUTTON::UIKitToggleButtonTest002()
370 {
371     if (container_ != nullptr) {
372         UILabel* label = new UILabel();
373         container_->Add(label);
374         // 0:x-coordinate, 740:y-coordinate, 20:new height
375         label->SetPosition(TEXT_DISTANCE_TO_LEFT_SIDE, 740, Screen::GetInstance().GetWidth(),
376                            TITLE_LABEL_DEFAULT_HEIGHT);
377         label->SetText("togglebutton SetImage功能");
378         label->SetViewId("togglebuttonLabel");
379         label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_DEFAULT_SIZE);
380 
381         UIToggleButton* togglebutton = new UIToggleButton();
382         togglebutton->SetPosition(30, 770);              // 30: x-coordinate, 770: y-coordinate
383         togglebutton->SetStyle(STYLE_BACKGROUND_OPA, 0); // 0: opacity
384         togglebutton->SetState(true);
385         togglebutton->SetWidth(130);  // 130: width
386         togglebutton->SetHeight(130); // 130: height
387         togglebutton->SetViewId(UI_TEST_TOGGLE_SETIMAGE_1);
388         togglebutton->SetImages(BLUE_IMAGE_PATH, YELLOW_IMAGE_PATH);
389 
390         UIToggleButton* togglebutton2 = new UIToggleButton();
391         togglebutton2->SetPosition(200, 770);             // 200: x-coordinate, 770: y-coordinate
392         togglebutton2->SetStyle(STYLE_BACKGROUND_OPA, 0); // 0: opacity
393         togglebutton2->SetState(false);
394         togglebutton2->SetWidth(130);  // 130: width
395         togglebutton2->SetHeight(130); // 130: height
396         togglebutton2->SetViewId(UI_TEST_TOGGLE_SETIMAGE_2);
397         togglebutton2->SetImages(GREEN_IMAGE_PATH, RED_IMAGE_PATH);
398 
399         container_->Add(togglebutton);
400         container_->Add(togglebutton2);
401     }
402 }
403 
404 class TestBtnOnClickShapeChangeListener : public UIView::OnClickListener {
405 public:
TestBtnOnClickShapeChangeListener(UIView * uiView,int16_t grid)406     TestBtnOnClickShapeChangeListener(UIView* uiView, int16_t grid) : uiView_(uiView), changeGrid_(grid) {}
407 
~TestBtnOnClickShapeChangeListener()408     ~TestBtnOnClickShapeChangeListener() {}
409 
OnClick(UIView & view,const ClickEvent & event)410     bool OnClick(UIView& view, const ClickEvent& event) override
411     {
412         int16_t width = uiView_->GetWidth() + changeGrid_;
413         int16_t height = uiView_->GetHeight() + changeGrid_;
414         if (changeGrid_ < 0) {
415             uiView_->Invalidate();
416         }
417         uiView_->Resize(width, height);
418         uiView_->Invalidate();
419         return true;
420     }
421 
422 private:
423     UIView* uiView_;
424     int16_t changeGrid_;
425 };
426 
427 class TestBtnOnClickPositionChangeListener : public OHOS::UIView::OnClickListener {
428 public:
429     enum class MoveType {
430         MOVE_LEFT,
431         MOVE_RIGHT,
432         MOVE_TOP,
433         MOVE_BOTTOM,
434     };
TestBtnOnClickPositionChangeListener(UIView * uiView,MoveType moveType,uint16_t grid)435     TestBtnOnClickPositionChangeListener(UIView* uiView, MoveType moveType, uint16_t grid)
436         : uiView_(uiView), moveType_(moveType), grid_(grid)
437     {
438     }
439 
~TestBtnOnClickPositionChangeListener()440     ~TestBtnOnClickPositionChangeListener() {}
441 
OnClick(UIView & view,const ClickEvent & event)442     bool OnClick(UIView& view, const ClickEvent& event) override
443     {
444         int16_t xPos = uiView_->GetX();
445         int16_t yPos = uiView_->GetY();
446         uiView_->Invalidate();
447         if (moveType_ == MoveType::MOVE_LEFT) {
448             xPos = xPos - grid_;
449         } else if (moveType_ == MoveType::MOVE_RIGHT) {
450             xPos = xPos + grid_;
451         } else if (moveType_ == MoveType::MOVE_TOP) {
452             yPos = yPos - grid_;
453         } else if (moveType_ == MoveType::MOVE_BOTTOM) {
454             yPos = yPos + grid_;
455         }
456         uiView_->SetX(xPos);
457         uiView_->SetY(yPos);
458         uiView_->Invalidate();
459         return true;
460     }
461 
462 private:
463     UIView* uiView_;
464     MoveType moveType_;
465     uint16_t grid_;
466 };
467 
468 class TestBtnOnClickVisableListener : public OHOS::UIView::OnClickListener {
469 public:
TestBtnOnClickVisableListener(UIView * uiView,bool visible)470     TestBtnOnClickVisableListener(UIView* uiView, bool visible) : uiView_(uiView), visible_(visible) {}
471 
~TestBtnOnClickVisableListener()472     ~TestBtnOnClickVisableListener() {}
473 
OnClick(UIView & view,const ClickEvent & event)474     bool OnClick(UIView& view, const ClickEvent& event) override
475     {
476         uiView_->SetVisible(visible_);
477         uiView_->Invalidate();
478         return true;
479     }
480 
481 private:
482     UIView* uiView_;
483     bool visible_;
484 };
485 
486 class TestBtnOnClickTouchableListener : public UIView::OnClickListener {
487 public:
TestBtnOnClickTouchableListener(UIView * uiView,bool touchable)488     TestBtnOnClickTouchableListener(UIView* uiView, bool touchable) : uiView_(uiView), touchable_(touchable) {}
489 
~TestBtnOnClickTouchableListener()490     ~TestBtnOnClickTouchableListener() {}
491 
OnClick(UIView & view,const ClickEvent & event)492     bool OnClick(UIView& view, const ClickEvent& event) override
493     {
494         uiView_->SetTouchable(touchable_);
495         uiView_->Invalidate();
496         return true;
497     }
498 
499 private:
500     UIView* uiView_;
501     bool touchable_;
502 };
503 
504 class TestBtnOnClickChangeColorListener : public OHOS::UIView::OnClickListener {
505 public:
TestBtnOnClickChangeColorListener(UIView * uiView,uint16_t red,uint16_t green,uint16_t blue)506     TestBtnOnClickChangeColorListener(UIView* uiView, uint16_t red, uint16_t green, uint16_t blue)
507         : uiView_(uiView), red_(red), green_(green), blue_(blue)
508     {
509     }
510 
~TestBtnOnClickChangeColorListener()511     ~TestBtnOnClickChangeColorListener() {}
512 
OnClick(UIView & view,const ClickEvent & event)513     bool OnClick(UIView& view, const ClickEvent& event) override
514     {
515         ColorType color;
516         color.full = uiView_->GetStyle(STYLE_BACKGROUND_COLOR);
517         color.red = red_;
518         color.green = green_;
519         color.blue = blue_;
520         uiView_->SetStyle(STYLE_BACKGROUND_COLOR, color.full);
521         uiView_->Invalidate();
522         return true;
523     }
524 
525 private:
526     UIView* uiView_;
527     uint16_t red_;
528     uint16_t green_;
529     uint16_t blue_;
530 };
531 
532 class TestBtnOnClickRevertColorListener : public UIView::OnClickListener {
533 public:
TestBtnOnClickRevertColorListener(UIView * uiView)534     explicit TestBtnOnClickRevertColorListener(UIView* uiView) : uiView_(uiView), originColor_(0)
535     {
536         if (uiView != nullptr) {
537             originColor_ = uiView->GetStyle(STYLE_BACKGROUND_COLOR);
538         }
539     }
540 
~TestBtnOnClickRevertColorListener()541     ~TestBtnOnClickRevertColorListener() {}
542 
OnClick(UIView & view,const ClickEvent & event)543     bool OnClick(UIView& view, const ClickEvent& event) override
544     {
545         uiView_->SetStyle(STYLE_BACKGROUND_COLOR, originColor_);
546         uiView_->Invalidate();
547         return true;
548     }
549 
550 private:
551     UIView* uiView_;
552     uint32_t originColor_;
553 };
554 
555 class TestBtnOnClickRevertToOriginStateListener : public UIView::OnClickListener {
556 public:
TestBtnOnClickRevertToOriginStateListener(UIView * uiView)557     explicit TestBtnOnClickRevertToOriginStateListener(UIView* uiView)
558         : uiView_(uiView), originColor_(0), width_(0), height_(0), visible_(false), touchable_(false)
559     {
560         if (uiView != nullptr) {
561             originColor_ = uiView->GetStyle(STYLE_BACKGROUND_COLOR);
562             width_ = uiView->GetWidth();
563             height_ = uiView->GetHeight();
564             visible_ = uiView->IsVisible();
565             touchable_ = uiView->IsTouchable();
566         }
567     }
568 
~TestBtnOnClickRevertToOriginStateListener()569     ~TestBtnOnClickRevertToOriginStateListener() {}
570 
OnClick(UIView & view,const ClickEvent & event)571     bool OnClick(UIView& view, const ClickEvent& event) override
572     {
573         uiView_->Invalidate();
574         uiView_->SetStyle(STYLE_BACKGROUND_COLOR, originColor_);
575         uiView_->SetWidth(width_);
576         uiView_->SetHeight(height_);
577         uiView_->SetVisible(visible_);
578         uiView_->SetTouchable(touchable_);
579         (reinterpret_cast<UIButton*>(uiView_))->Invalidate();
580         return true;
581     }
582 
583 private:
584     UIView* uiView_;
585     uint32_t originColor_;
586     uint32_t width_;
587     uint32_t height_;
588     bool visible_;
589     bool touchable_;
590 };
591 
592 #if defined(DEFAULT_ANIMATION) && DEFAULT_ANIMATION
593 class TestBtnAnimationListener : public UIView::OnClickListener {
594 public:
TestBtnAnimationListener(UIView * uiView,bool enableAnimation)595     TestBtnAnimationListener(UIView* uiView, bool enableAnimation) : uiView_(uiView), enableAnimation_(enableAnimation)
596     {
597     }
598 
~TestBtnAnimationListener()599     ~TestBtnAnimationListener() {}
600 
OnClick(UIView & view,const ClickEvent & event)601     bool OnClick(UIView& view, const ClickEvent& event) override
602     {
603         static_cast<UIButton*>(uiView_)->EnableButtonAnimation(enableAnimation_);
604         return true;
605     }
606 
607 private:
608     UIView* uiView_;
609     bool enableAnimation_;
610 };
611 #endif
612 
GetTestUILabel(const char * titlename)613 UILabel* GetTestUILabel(const char* titlename)
614 {
615     if (titlename == nullptr) {
616         return nullptr;
617     }
618 
619     UILabel* label = new UILabel();
620     // 900:y-coordinate
621     label->SetPosition(TEXT_DISTANCE_TO_LEFT_SIDE, 900, Screen::GetInstance().GetWidth(), TITLE_LABEL_DEFAULT_HEIGHT);
622     label->SetText(titlename);
623     label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_DEFAULT_SIZE);
624     return label;
625 }
626 
GetTestUIButton(const char * buttonText,int16_t x,int16_t y,UIButton * button,const char * id)627 UILabelButton* GetTestUIButton(const char* buttonText, int16_t x, int16_t y, UIButton* button, const char* id)
628 {
629     if (buttonText == nullptr) {
630         return nullptr;
631     }
632 
633     UILabelButton* labelButton = new UILabelButton();
634     // 150: x-coordinate, 440: y-coordinate
635     labelButton->SetPosition(x, y);
636     labelButton->Resize(BUTTON_WIDHT1, BUTTON_HEIGHT1);
637     labelButton->SetText(buttonText);
638     labelButton->SetViewId(id);
639     labelButton->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_DEFAULT_SIZE);
640     labelButton->SetStyleForState(STYLE_BORDER_RADIUS, BUTTON_STYLE_BORDER_RADIUS_VALUE, UIButton::PRESSED);
641     labelButton->SetStyleForState(STYLE_BORDER_RADIUS, BUTTON_STYLE_BORDER_RADIUS_VALUE, UIButton::INACTIVE);
642     labelButton->SetStyleForState(STYLE_BACKGROUND_COLOR, BUTTON_STYLE_BACKGROUND_COLOR_VALUE, UIButton::RELEASED);
643     labelButton->SetStyleForState(STYLE_BACKGROUND_COLOR, BUTTON_STYLE_BACKGROUND_COLOR_VALUE, UIButton::PRESSED);
644     labelButton->SetStyleForState(STYLE_BACKGROUND_COLOR, BUTTON_STYLE_BACKGROUND_COLOR_VALUE, UIButton::INACTIVE);
645     return labelButton;
646 }
647 
UIKitButtonTest002(UIScrollView * container,UIButton * button)648 void UITestBUTTON::UIKitButtonTest002(UIScrollView* container, UIButton* button)
649 {
650     if ((container == nullptr) || (button == nullptr)) {
651         return;
652     }
653     UILabelButton* button8 =
654         GetTestUIButton("隐藏", 430, 940, button, UI_TEST_BUTTON_7); // 430: x-coordinate, 940: y-coordinate
655     if (clickEnableVisiableListener_ == nullptr) {
656         clickEnableVisiableListener_ =
657             static_cast<UIView::OnClickListener*>(
658                 new TestBtnOnClickVisableListener(reinterpret_cast<UIView*>(button), false));
659     }
660     button8->SetOnClickListener(clickEnableVisiableListener_);
661 
662     UILabelButton* button9 =
663         GetTestUIButton("显示", 430, 990, button, UI_TEST_BUTTON_8); // 430: x-coordinate, 990: y-coordinate
664     if (clickDisableVisiableListener_ == nullptr) {
665         clickDisableVisiableListener_ =
666             static_cast<UIView::OnClickListener*>(
667                 new TestBtnOnClickVisableListener(reinterpret_cast<UIView*>(button), true));
668     }
669     button9->SetOnClickListener(clickDisableVisiableListener_);
670 
671     UILabelButton* button10 =
672         GetTestUIButton("可触摸 ", 520, 940, button, UI_TEST_BUTTON_9); // 520: x-coordinate, 940: y-coordinate
673     if (clickEnableTouchableListener_ == nullptr) {
674         clickEnableTouchableListener_ =
675             static_cast<UIView::OnClickListener*>(
676                 new TestBtnOnClickTouchableListener(reinterpret_cast<UIView*>(button), true));
677     }
678     button10->SetOnClickListener(clickEnableTouchableListener_);
679 
680     UILabelButton* button11 =
681         GetTestUIButton("不可触摸", 520, 990, button, UI_TEST_BUTTON_10); // 520: x-coordinate, 990: y-coordinate
682     if (clickDisableTouchableListener_ == nullptr) {
683         clickDisableTouchableListener_ =
684             static_cast<UIView::OnClickListener*>(
685                 new TestBtnOnClickTouchableListener(reinterpret_cast<UIView*>(button), false));
686     }
687     button11->SetOnClickListener(clickDisableTouchableListener_);
688 
689     UILabelButton* button12 =
690         GetTestUIButton("变白", 160, 1040, button, UI_TEST_BUTTON_11); // 160: x-coordinate, 1040: y-coordinate
691     if (clickColorToWhiteListener_ == nullptr) {
692         clickColorToWhiteListener_ = static_cast<UIView::OnClickListener*>(
693             new TestBtnOnClickChangeColorListener(reinterpret_cast<UIView*>(button), 0xFF, 0xFF, 0xFF));
694     }
695     button12->SetOnClickListener(clickColorToWhiteListener_);
696 
697     UILabelButton* button13 =
698         GetTestUIButton("变红", 160, 1090, button, UI_TEST_BUTTON_12); // 160: x-coordinate, 1090: y-coordinate
699     if (clickColorToRedListener_ == nullptr) {
700         clickColorToRedListener_ =
701             static_cast<UIView::OnClickListener*>(
702                 new TestBtnOnClickChangeColorListener(reinterpret_cast<UIView*>(button), 0xFF, 0, 0));
703     }
704     button13->SetOnClickListener(clickColorToRedListener_);
705 
706     UILabelButton* button14 =
707         GetTestUIButton("色彩还原", 250, 1040, button, UI_TEST_BUTTON_13); // 250: x-coordinate, 1040: y-coordinate
708     if (clickRevetColorListener_ == nullptr) {
709         clickRevetColorListener_ =
710             static_cast<UIView::OnClickListener*>(
711                 new TestBtnOnClickRevertColorListener(reinterpret_cast<UIView*>(button)));
712     }
713     button14->SetOnClickListener(clickRevetColorListener_);
714 
715     UILabelButton* button15 =
716         GetTestUIButton("全部还原", 250, 1090, button, UI_TEST_BUTTON_14); // 250: x-coordinate, 1090: y-coordinate
717     if (clickRevetToOriginListener_ == nullptr) {
718         clickRevetToOriginListener_ =
719             static_cast<UIView::OnClickListener*>(
720                 new TestBtnOnClickRevertToOriginStateListener(reinterpret_cast<UIView*>(button)));
721     }
722     button15->SetOnClickListener(clickRevetToOriginListener_);
723 
724     container->Add(button8);
725     container->Add(button9);
726     container->Add(button10);
727     container->Add(button11);
728     container->Add(button12);
729     container->Add(button13);
730     container->Add(button14);
731     container->Add(button15);
732 
733 #if defined(DEFAULT_ANIMATION) && DEFAULT_ANIMATION
734     // 340: x-coordinate, 1040: y-coordinate
735     UILabelButton* button16 = GetTestUIButton("开启动效", 340, 1040, button, UI_TEST_BUTTON_15);
736     if (enableAnimationListener_ == nullptr) {
737         enableAnimationListener_ =
738             static_cast<UIView::OnClickListener*>(
739                 new TestBtnAnimationListener(reinterpret_cast<UIView*>(button), true));
740     }
741     button16->SetOnClickListener(enableAnimationListener_);
742 
743     // 340: x-coordinate, 1090: y-coordinate
744     UILabelButton* button17 = GetTestUIButton("关闭动效", 340, 1090, button, UI_TEST_BUTTON_16);
745     if (disableAnimationListener_ == nullptr) {
746         disableAnimationListener_ = static_cast<UIView::OnClickListener*>(
747             new TestBtnAnimationListener(reinterpret_cast<UIView*>(button), false));
748     }
749     button17->EnableButtonAnimation(false);
750     button17->SetOnClickListener(disableAnimationListener_);
751 
752     container->Add(button16);
753     container->Add(button17);
754 #endif
755 }
756 
UIKitButtonTest001()757 void UITestBUTTON::UIKitButtonTest001()
758 {
759     if (container_ != nullptr) {
760         UILabel* label = GetTestUILabel("普通button功能效果");
761         container_->Add(label);
762 
763         UIButton* button = new UIButton();
764         button->SetPosition(10, 935); // 10: x-coordinate, 935: y-coordinate
765         button->SetWidth(80);         // 80: width
766         button->SetHeight(60);        // 60: height
767         button->SetImageSrc(BLUE_IMAGE_PATH, YELLOW_IMAGE_PATH);
768         button->SetViewId(UI_TEST_BUTTON_17);
769 
770         UILabelButton* button2 =
771             GetTestUIButton("放大", 160, 940, button, UI_TEST_BUTTON_1); // 160: x-coordinate, 940: y-coordinate
772         if (clickBigListener_ == nullptr) {
773             clickBigListener_ =
774                 static_cast<UIView::OnClickListener*>(new TestBtnOnClickShapeChangeListener(button, CHANGE_SIZE));
775         }
776         button2->SetOnClickListener(clickBigListener_);
777 
778         UILabelButton* button3 =
779             GetTestUIButton("缩小", 160, 990, button, UI_TEST_BUTTON_2); // 160: x-coordinate, 990: y-coordinate
780         if (clickSmallListener_ == nullptr) {
781             clickSmallListener_ =
782                 static_cast<UIView::OnClickListener*>(new TestBtnOnClickShapeChangeListener(button, -CHANGE_SIZE));
783         }
784         button3->SetOnClickListener(clickSmallListener_);
785 
786         UILabelButton* button4 =
787             GetTestUIButton("左移", 250, 940, button, UI_TEST_BUTTON_3); // 250: x-coordinate, 940: y-coordinate
788         if (clickLeftListener_ == nullptr) {
789             clickLeftListener_ = static_cast<UIView::OnClickListener*>(new TestBtnOnClickPositionChangeListener(
790                 reinterpret_cast<UIView*>(button),
791                 TestBtnOnClickPositionChangeListener::MoveType::MOVE_LEFT, CHANGE_SIZE));
792         }
793         button4->SetOnClickListener(clickLeftListener_);
794 
795         UILabelButton* button5 =
796             GetTestUIButton("右移", 250, 990, button, UI_TEST_BUTTON_4); // 250: x-coordinate, 990: y-coordinate
797         button5->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_DEFAULT_SIZE);
798         if (clickRightListener_ == nullptr) {
799             clickRightListener_ = static_cast<UIView::OnClickListener*>(new TestBtnOnClickPositionChangeListener(
800                 reinterpret_cast<UIView*>(button),
801                 TestBtnOnClickPositionChangeListener::MoveType::MOVE_RIGHT, CHANGE_SIZE));
802         }
803         button5->SetOnClickListener(clickRightListener_);
804 
805         UILabelButton* button6 =
806             GetTestUIButton("上移", 340, 940, button, UI_TEST_BUTTON_5); // 340: x-coordinate, 940: y-coordinate
807         button6->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_DEFAULT_SIZE);
808         if (clickUpListener_ == nullptr) {
809             clickUpListener_ = static_cast<UIView::OnClickListener*>(new TestBtnOnClickPositionChangeListener(
810                 reinterpret_cast<UIView*>(button),
811                 TestBtnOnClickPositionChangeListener::MoveType::MOVE_TOP, CHANGE_SIZE));
812         }
813         button6->SetOnClickListener(clickUpListener_);
814 
815         UILabelButton* button7 =
816             GetTestUIButton("下移", 340, 990, button, UI_TEST_BUTTON_6); // 340: x-coordinate, 990: y-coordinate
817         if (clickDownListener_ == nullptr) {
818             clickDownListener_ = static_cast<UIView::OnClickListener*>(new TestBtnOnClickPositionChangeListener(
819                 reinterpret_cast<UIView*>(button),
820                 TestBtnOnClickPositionChangeListener::MoveType::MOVE_BOTTOM, CHANGE_SIZE));
821         }
822         button7->SetOnClickListener(clickDownListener_);
823 
824         container_->Add(button);
825         container_->Add(button2);
826         container_->Add(button3);
827         container_->Add(button4);
828         container_->Add(button5);
829         container_->Add(button6);
830         container_->Add(button7);
831 
832         UIKitButtonTest002(container_, button);
833     }
834 }
835 } // namespace OHOS
836