1 /*
2  * Copyright (c) 2022 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 "window_utils_test.h"
17 
18 #include "define_multimodal.h"
19 #include "mmi_log.h"
20 #include "wm_common.h"
21 
22 #undef MMI_LOG_TAG
23 #define MMI_LOG_TAG "WindowUtilsTest"
24 
25 namespace OHOS {
26 namespace MMI {
27 namespace {
28 constexpr int32_t IMAGE_WIDTH = 720;
29 constexpr int32_t IMAGE_HEIGHT = 1280;
30 constexpr uint32_t defaultWindowId = -1;
31 std::string windowName = "WindowUtilsTest";
32 } // namespace
33 
~WindowUtilsTest()34 WindowUtilsTest::~WindowUtilsTest()
35 {
36     ClearTestWindow();
37 }
38 
GetInstance()39 std::shared_ptr<WindowUtilsTest> WindowUtilsTest::GetInstance()
40 {
41     if (windowUtils_ == nullptr) {
42         windowUtils_ = std::make_shared<WindowUtilsTest>();
43     }
44     return windowUtils_;
45 }
46 
ClearTestWindow()47 void WindowUtilsTest::ClearTestWindow()
48 {
49     CALL_DEBUG_ENTER;
50     CHKPV(testWindow_);
51     testWindow_->Destroy();
52 }
53 
DrawTestWindow()54 bool WindowUtilsTest::DrawTestWindow()
55 {
56     CALL_DEBUG_ENTER;
57     testWindow_ = Rosen::Window::Find(windowName);
58     if (testWindow_ == nullptr) {
59         CreateSmoothWindow();
60     }
61 
62     CHKPF(testWindow_);
63     return testWindow_->Show() == Rosen::WMError::WM_OK;
64 }
65 
GetWindow()66 sptr<Rosen::Window>& WindowUtilsTest::GetWindow()
67 {
68     return testWindow_;
69 }
70 
GetWindowId()71 uint32_t WindowUtilsTest::GetWindowId()
72 {
73     CHKPR(testWindow_, defaultWindowId);
74     return testWindow_->GetWindowId();
75 }
76 
CreateSmoothWindow()77 void WindowUtilsTest::CreateSmoothWindow()
78 {
79     TestWindowInfo info = {
80         .name = windowName,
81         .rect = {
82             .posX_ = 0,
83             .posY_ = 0,
84             .width_ = IMAGE_WIDTH,
85             .height_ = IMAGE_HEIGHT,
86         },
87         .type = Rosen::WindowType::WINDOW_TYPE_SCREENSHOT,
88         .mode = Rosen::WindowMode::WINDOW_MODE_FULLSCREEN,
89         .needAvoid = false,
90         .parentLimit = false,
91         .parentId = Rosen::INVALID_WINDOW_ID,
92     };
93     testWindow_ = CreateWindow(info);
94 }
95 
CreateWindow(const TestWindowInfo & info)96 sptr<Rosen::Window> WindowUtilsTest::CreateWindow(const TestWindowInfo& info)
97 {
98     sptr<Rosen::WindowOption> option = new (std::nothrow) Rosen::WindowOption();
99     CHKPP(option);
100     option->SetWindowRect(info.rect);
101     option->SetWindowType(info.type);
102     option->SetWindowMode(info.mode);
103     option->SetFocusable(info.focusable_);
104     option->SetTurnScreenOn(true);
105     option->SetDisplayId(0);
106     option->SetRequestedOrientation(info.orientation_);
107     option->SetMainHandlerAvailable(false);
108     if (info.parentId != Rosen::INVALID_WINDOW_ID) {
109         option->SetParentId(info.parentId);
110     }
111     if (info.needAvoid) {
112         option->AddWindowFlag(Rosen::WindowFlag::WINDOW_FLAG_NEED_AVOID);
113     } else {
114         option->RemoveWindowFlag(Rosen::WindowFlag::WINDOW_FLAG_NEED_AVOID);
115     }
116     if (info.parentLimit) {
117         option->AddWindowFlag(Rosen::WindowFlag::WINDOW_FLAG_PARENT_LIMIT);
118     } else {
119         option->RemoveWindowFlag(Rosen::WindowFlag::WINDOW_FLAG_PARENT_LIMIT);
120     }
121     return Rosen::Window::Create(info.name, option);
122 }
123 } // namespace MMI
124 } // namespace OHOS