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