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 "accessibility_display_manager.h"
17 #include "accessible_ability_manager_service.h"
18 #include "hilog_wrapper.h"
19
20 namespace OHOS {
21 namespace Accessibility {
22
23 constexpr int32_t DEFAULT_DPI = 540;
24 constexpr int32_t DEFAULT_WIDTH = 1260;
25 constexpr int32_t DEFAULT_HEIGHT = 2720;
26
AccessibilityDisplayManager()27 AccessibilityDisplayManager::AccessibilityDisplayManager()
28 {
29 }
30
~AccessibilityDisplayManager()31 AccessibilityDisplayManager::~AccessibilityDisplayManager()
32 {
33 UnregisterDisplayListener();
34 }
35
GetDisplay(uint64_t id)36 const sptr<Rosen::Display> AccessibilityDisplayManager::GetDisplay(uint64_t id)
37 {
38 HILOG_DEBUG();
39 return Rosen::DisplayManager::GetInstance().GetDisplayById(id);
40 }
41
GetDisplays()42 std::vector<sptr<Rosen::Display>> AccessibilityDisplayManager::GetDisplays()
43 {
44 HILOG_DEBUG();
45 return Rosen::DisplayManager::GetInstance().GetAllDisplays();
46 }
47
GetDefaultDisplay()48 const sptr<Rosen::Display> AccessibilityDisplayManager::GetDefaultDisplay()
49 {
50 HILOG_DEBUG();
51 return Rosen::DisplayManager::GetInstance().GetDefaultDisplay();
52 }
53
GetDefaultDisplayId()54 uint64_t AccessibilityDisplayManager::GetDefaultDisplayId()
55 {
56 HILOG_DEBUG();
57 return Rosen::DisplayManager::GetInstance().GetDefaultDisplayId();
58 }
59
GetWidth()60 int32_t AccessibilityDisplayManager::GetWidth()
61 {
62 HILOG_DEBUG();
63 sptr<Rosen::Display> displaySync = GetDefaultDisplaySync();
64 if (displaySync == nullptr) {
65 HILOG_ERROR("default displaySync is null");
66 return DEFAULT_WIDTH;
67 }
68
69 return displaySync->GetWidth();
70 }
71
GetHeight()72 int32_t AccessibilityDisplayManager::GetHeight()
73 {
74 HILOG_DEBUG();
75 sptr<Rosen::Display> displaySync = GetDefaultDisplaySync();
76 if (displaySync == nullptr) {
77 HILOG_ERROR("default displaySync is null");
78 return DEFAULT_HEIGHT;
79 }
80
81 return displaySync->GetHeight();
82 }
83
GetOrientation()84 OHOS::Rosen::DisplayOrientation AccessibilityDisplayManager::GetOrientation()
85 {
86 HILOG_DEBUG();
87 sptr<Rosen::Display> displaySync = GetDefaultDisplaySync();
88 if (displaySync == nullptr) {
89 HILOG_ERROR("default displaySync is null");
90 return OHOS::Rosen::DisplayOrientation::PORTRAIT;
91 }
92
93 auto displayInfo = displaySync->GetDisplayInfo();
94 if (displayInfo == nullptr) {
95 HILOG_ERROR("default displayInfo is null");
96 return OHOS::Rosen::DisplayOrientation::PORTRAIT;
97 }
98
99 return displayInfo->GetDisplayOrientation();
100 }
101
GetDefaultDisplaySync()102 sptr<Rosen::Display> AccessibilityDisplayManager::GetDefaultDisplaySync()
103 {
104 HILOG_DEBUG();
105 return Rosen::DisplayManager::GetInstance().GetDefaultDisplaySync();
106 }
107
GetDefaultDisplayDpi()108 int32_t AccessibilityDisplayManager::GetDefaultDisplayDpi()
109 {
110 HILOG_DEBUG();
111 if (GetDefaultDisplay() == nullptr) {
112 HILOG_ERROR("default display is null");
113 return DEFAULT_DPI;
114 }
115
116 return GetDefaultDisplay()->GetDpi();
117 }
118
IsFoldable()119 bool AccessibilityDisplayManager::IsFoldable()
120 {
121 HILOG_DEBUG();
122 return Rosen::DisplayManager::GetInstance().IsFoldable();
123 }
124
GetFoldDisplayMode()125 Rosen::FoldDisplayMode AccessibilityDisplayManager::GetFoldDisplayMode()
126 {
127 HILOG_DEBUG();
128 return Rosen::DisplayManager::GetInstance().GetFoldDisplayMode();
129 }
130
GetFoldStatus()131 Rosen::FoldStatus AccessibilityDisplayManager::GetFoldStatus()
132 {
133 HILOG_DEBUG();
134 return Rosen::DisplayManager::GetInstance().GetFoldStatus();
135 }
136
SetDisplayScale(const uint64_t screenId,float scaleX,float scaleY,float pivotX,float pivotY)137 void AccessibilityDisplayManager::SetDisplayScale(const uint64_t screenId,
138 float scaleX, float scaleY, float pivotX, float pivotY)
139 {
140 HILOG_DEBUG("scaleX = %{public}f, scaleY = %{public}f, pivotX = %{public}f, pivotY = %{public}f",
141 scaleX, scaleY, pivotX, pivotY);
142 Rosen::DisplayManager::GetInstance().SetDisplayScale(screenId, scaleX,
143 scaleY, pivotX, pivotY);
144 }
145
RegisterDisplayListener(const std::shared_ptr<AppExecFwk::EventHandler> & handler)146 void AccessibilityDisplayManager::RegisterDisplayListener(
147 const std::shared_ptr<AppExecFwk::EventHandler> &handler)
148 {
149 HILOG_DEBUG();
150 if (listener_) {
151 HILOG_DEBUG("Display listener is already registed!");
152 return;
153 }
154 handler_ = handler;
155 listener_ = new(std::nothrow) DisplayListener();
156 if (!listener_) {
157 HILOG_ERROR("Create display listener fail!");
158 return;
159 }
160 Rosen::DisplayManager::GetInstance().RegisterDisplayListener(listener_);
161 }
162
UnregisterDisplayListener()163 void AccessibilityDisplayManager::UnregisterDisplayListener()
164 {
165 HILOG_DEBUG();
166 if (listener_) {
167 Rosen::DisplayManager::GetInstance().UnregisterDisplayListener(listener_);
168 listener_ = nullptr;
169 handler_ = nullptr;
170 }
171 }
172 } // namespace Accessibility
173 } // namespace OHOS