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