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