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_screenshot.h"
17 #if ENABLE_DEBUG
18 #include "common/screen.h"
19 #include "components/ui_image_view.h"
20 #include "imgdecode/cache_manager.h"
21 #include "test_resource_config.h"
22 
23 namespace OHOS {
SetUp()24 void UITestScreenshot::SetUp()
25 {
26     if (container_ == nullptr) {
27         container_ = new UIScrollView();
28         container_->Resize(Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight() - BACK_BUTTON_HEIGHT);
29         container_->SetStyle(STYLE_BACKGROUND_COLOR, Color::Gray().full);
30     }
31 }
32 
TearDown()33 void UITestScreenshot::TearDown()
34 {
35     if (clickLeftListener_ != nullptr) {
36         delete clickLeftListener_;
37         clickLeftListener_ = nullptr;
38     }
39     if (clickRightListener_ != nullptr) {
40         delete clickRightListener_;
41         clickRightListener_ = nullptr;
42     }
43     DeleteChildren(container_);
44     container_ = nullptr;
45 }
46 
GetTestView()47 const UIView* UITestScreenshot::GetTestView()
48 {
49     UIKit_SCREENSHOT_TEST_001();
50     return container_;
51 }
52 
53 class TestScreenshotOnClickListener : public UIView::OnClickListener {
54 public:
TestScreenshotOnClickListener(UIView * uiView)55     explicit TestScreenshotOnClickListener(UIView* uiView) : uiView_(uiView) {}
~TestScreenshotOnClickListener()56     ~TestScreenshotOnClickListener() {}
OnClick(UIView & view,const ClickEvent & event)57     bool OnClick(UIView& view, const ClickEvent& event) override
58     {
59         UIScreenshot::GetInstance()->ScreenshotToFile("/storage/data/screenshot.bin");
60         uiView_->Invalidate();
61         return true;
62     }
63 
64 private:
65     UIView* uiView_;
66 };
67 
68 class TestSetScreenshotOnClickListener : public UIView::OnClickListener {
69 public:
TestSetScreenshotOnClickListener(UIView * uiView)70     explicit TestSetScreenshotOnClickListener(UIView* uiView) : uiView_(uiView) {}
~TestSetScreenshotOnClickListener()71     ~TestSetScreenshotOnClickListener() {}
OnClick(UIView & view,const ClickEvent & event)72     bool OnClick(UIView& view, const ClickEvent& event) override
73     {
74         static_cast<UIImageView*>(uiView_)->SetSrc("/storage/data/screenshot.bin");
75         uiView_->Invalidate();
76         return true;
77     }
78 
79 private:
80     UIView* uiView_;
81 };
82 
UIKit_SCREENSHOT_TEST_001()83 void UITestScreenshot::UIKit_SCREENSHOT_TEST_001()
84 {
85     const int16_t titleLableHeight = 29;
86     const int16_t labelButtonWidth = 80;
87     const int16_t labelButtonHeight = 40;
88     if (container_ == nullptr) {
89         return;
90     }
91     UILabel* label = GetTitleLabel("截屏功能测试");
92     container_->Add(label);
93     label->SetPosition(TEXT_DISTANCE_TO_LEFT_SIDE, TEXT_DISTANCE_TO_TOP_SIDE,
94         Screen::GetInstance().GetWidth() - TEXT_DISTANCE_TO_LEFT_SIDE, titleLableHeight);
95     UILabelButton* labelButton = SetUpButton("截屏");
96     container_->Add(labelButton);
97     labelButton->SetPosition(210, 50); // 210: position x; 50: position y
98     labelButton->SetWidth(labelButtonWidth);
99     labelButton->SetHeight(labelButtonHeight);
100     labelButton->SetFont(DEFAULT_VECTOR_FONT_FILENAME, BUTTON_LABEL_SIZE);
101     if (clickLeftListener_ == nullptr) {
102         clickLeftListener_ = static_cast<UIView::OnClickListener*>(
103             new TestScreenshotOnClickListener(reinterpret_cast<UIView*>(labelButton)));
104     }
105     labelButton->SetOnClickListener(clickLeftListener_);
106     UILabel* label2 = GetTitleLabel("显示截屏图片 ");
107     container_->Add(label2);
108     label2->SetPosition(VIEW_DISTANCE_TO_LEFT_SIDE, 255,  // 255: y-coordinate
109         Screen::GetInstance().GetWidth() - TEXT_DISTANCE_TO_LEFT_SIDE, titleLableHeight);
110     UIImageView* imageView = new UIImageView();
111     imageView->SetAutoEnable(false);
112     imageView->SetPosition(0, 290); // 290: y-coordinate
113     imageView->SetWidth(Screen::GetInstance().GetWidth());
114     imageView->SetHeight(Screen::GetInstance().GetHeight() + 100); // 100: increase height
115     imageView->SetSrc(BLUE_RGB565_IMAGE_PATH);
116     Style style;
117     CacheEntry entry;
118     RetCode ret = CacheManager::GetInstance().Open(imageView->GetPath(), style, entry);
119     if (ret != RetCode::OK) {
120         return;
121     }
122     container_->Add(imageView);
123     UILabelButton* labelButton2 = SetUpButton("显示");
124     container_->Add(labelButton2);
125     labelButton2->SetPosition(300, 50); // 300: position x; 50: position y
126     labelButton2->SetWidth(labelButtonWidth);
127     labelButton2->SetHeight(labelButtonHeight);
128     if (clickRightListener_ == nullptr) {
129         clickRightListener_ = static_cast<UIView::OnClickListener*>(
130             new TestSetScreenshotOnClickListener(static_cast<UIView*>(imageView)));
131     }
132     labelButton2->SetOnClickListener(clickRightListener_);
133 }
134 } // namespace OHOS
135 #endif
136