1 /*
2 * Copyright (C) 2022-2023 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_ui_test_ability_impl.h"
17
18 #include "accessible_ability_client_impl.h"
19 #include "ffrt.h"
20 #include "hilog_wrapper.h"
21 #include "if_system_ability_manager.h"
22 #include "iservice_registry.h"
23 #include "system_ability_definition.h"
24
25 namespace OHOS {
26 namespace Accessibility {
27 static ffrt::mutex g_Mutex;
28 static std::shared_ptr<AccessibilityUITestAbilityImpl> g_Instance = nullptr;
29
GetInstance()30 std::shared_ptr<AccessibilityUITestAbility> AccessibilityUITestAbility::GetInstance()
31 {
32 std::lock_guard<ffrt::mutex> lock(g_Mutex);
33 if (!g_Instance) {
34 g_Instance = std::make_shared<AccessibilityUITestAbilityImpl>();
35 }
36 return g_Instance;
37 }
38
RegisterAbilityListener(const std::shared_ptr<AccessibleAbilityListener> & listener)39 RetError AccessibilityUITestAbilityImpl::RegisterAbilityListener(
40 const std::shared_ptr<AccessibleAbilityListener> &listener)
41 {
42 HILOG_DEBUG();
43 if (!listener) {
44 HILOG_ERROR("listener is nullptr.");
45 return RET_ERR_INVALID_PARAM;
46 }
47
48 sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
49 if (!aaClient) {
50 HILOG_ERROR("aaClient is nullptr");
51 return RET_ERR_NULLPTR;
52 }
53
54 auto ret = aaClient->CheckExtensionAbilityPermission();
55 if (ret != RET_OK) {
56 HILOG_ERROR("extension ability permission check failed!");
57 return ret;
58 }
59 return aaClient->RegisterAbilityListener(listener);
60 }
61
Connect()62 RetError AccessibilityUITestAbilityImpl::Connect()
63 {
64 HILOG_INFO();
65 sptr<AccessibleAbilityClientImpl> aaClient = AccessibleAbilityClientImpl::GetAbilityClientImplement();
66 if (!aaClient) {
67 HILOG_ERROR("aaClient is nullptr");
68 return RET_ERR_NULLPTR;
69 }
70 return aaClient->Connect();
71 }
72
Disconnect()73 RetError AccessibilityUITestAbilityImpl::Disconnect()
74 {
75 HILOG_INFO();
76 sptr<AccessibleAbilityClientImpl> aaClient = AccessibleAbilityClientImpl::GetAbilityClientImplement();
77 if (!aaClient) {
78 HILOG_ERROR("aaClient is nullptr");
79 return RET_ERR_NULLPTR;
80 }
81 return aaClient->Disconnect();
82 }
83
GetFocus(const int32_t focusType,AccessibilityElementInfo & elementInfo)84 RetError AccessibilityUITestAbilityImpl::GetFocus(
85 const int32_t focusType, AccessibilityElementInfo &elementInfo)
86 {
87 HILOG_DEBUG();
88 sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
89 if (!aaClient) {
90 HILOG_ERROR("aaClient is nullptr");
91 return RET_ERR_NULLPTR;
92 }
93 return aaClient->GetFocus(focusType, elementInfo);
94 }
95
GetFocusByElementInfo(const AccessibilityElementInfo & sourceInfo,const int32_t focusType,AccessibilityElementInfo & elementInfo)96 RetError AccessibilityUITestAbilityImpl::GetFocusByElementInfo(const AccessibilityElementInfo &sourceInfo,
97 const int32_t focusType, AccessibilityElementInfo &elementInfo)
98 {
99 HILOG_DEBUG();
100 sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
101 if (!aaClient) {
102 HILOG_ERROR("aaClient is nullptr");
103 return RET_ERR_NULLPTR;
104 }
105 return aaClient->GetFocusByElementInfo(sourceInfo, focusType, elementInfo);
106 }
107
InjectGesture(const std::shared_ptr<AccessibilityGestureInjectPath> & gesturePath)108 RetError AccessibilityUITestAbilityImpl::InjectGesture(
109 const std::shared_ptr<AccessibilityGestureInjectPath> &gesturePath)
110 {
111 HILOG_DEBUG();
112 sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
113 if (!aaClient) {
114 HILOG_ERROR("aaClient is nullptr");
115 return RET_ERR_NULLPTR;
116 }
117 return aaClient->InjectGesture(gesturePath);
118 }
119
GetRoot(AccessibilityElementInfo & elementInfo)120 RetError AccessibilityUITestAbilityImpl::GetRoot(AccessibilityElementInfo &elementInfo)
121 {
122 HILOG_DEBUG();
123 sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
124 if (!aaClient) {
125 HILOG_ERROR("aaClient is nullptr");
126 return RET_ERR_NULLPTR;
127 }
128 return aaClient->GetRoot(elementInfo);
129 }
130
GetRootByWindow(const AccessibilityWindowInfo & windowInfo,AccessibilityElementInfo & elementInfo)131 RetError AccessibilityUITestAbilityImpl::GetRootByWindow(const AccessibilityWindowInfo &windowInfo,
132 AccessibilityElementInfo &elementInfo)
133 {
134 HILOG_DEBUG();
135 sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
136 if (!aaClient) {
137 HILOG_ERROR("aaClient is nullptr");
138 return RET_ERR_NULLPTR;
139 }
140 return aaClient->GetRootByWindow(windowInfo, elementInfo);
141 }
142
GetRootBatch(std::vector<AccessibilityElementInfo> & elementInfos)143 RetError AccessibilityUITestAbilityImpl::GetRootBatch(std::vector<AccessibilityElementInfo>& elementInfos)
144 {
145 HILOG_DEBUG();
146 sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
147 if (!aaClient) {
148 HILOG_ERROR("aaClient is nullptr");
149 return RET_ERR_NULLPTR;
150 }
151 return aaClient->GetRootBatch(elementInfos);
152 }
153
GetRootByWindowBatch(const AccessibilityWindowInfo & windowInfo,std::vector<AccessibilityElementInfo> & elementInfos,bool isFilter,bool needCut)154 RetError AccessibilityUITestAbilityImpl::GetRootByWindowBatch(const AccessibilityWindowInfo& windowInfo,
155 std::vector<AccessibilityElementInfo>& elementInfos, bool isFilter, bool needCut)
156 {
157 HILOG_DEBUG();
158 sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
159 if (!aaClient) {
160 HILOG_ERROR("aaClient is nullptr");
161 return RET_ERR_NULLPTR;
162 }
163 return aaClient->GetRootByWindowBatch(windowInfo, elementInfos, isFilter, needCut);
164 }
165
GetWindow(const int32_t windowId,AccessibilityWindowInfo & windowInfo)166 RetError AccessibilityUITestAbilityImpl::GetWindow(const int32_t windowId, AccessibilityWindowInfo &windowInfo)
167 {
168 HILOG_DEBUG();
169 sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
170 if (!aaClient) {
171 HILOG_ERROR("aaClient is nullptr");
172 return RET_ERR_NULLPTR;
173 }
174 return aaClient->GetWindow(windowId, windowInfo);
175 }
176
GetWindows(std::vector<AccessibilityWindowInfo> & windows)177 RetError AccessibilityUITestAbilityImpl::GetWindows(std::vector<AccessibilityWindowInfo> &windows)
178 {
179 HILOG_DEBUG();
180 sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
181 if (!aaClient) {
182 HILOG_ERROR("aaClient is nullptr");
183 return RET_ERR_NULLPTR;
184 }
185 return aaClient->GetWindows(windows);
186 }
187
GetWindows(const uint64_t displayId,std::vector<AccessibilityWindowInfo> & windows)188 RetError AccessibilityUITestAbilityImpl::GetWindows(const uint64_t displayId,
189 std::vector<AccessibilityWindowInfo> &windows)
190 {
191 HILOG_DEBUG();
192 sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
193 if (!aaClient) {
194 HILOG_ERROR("aaClient is nullptr");
195 return RET_ERR_NULLPTR;
196 }
197 return aaClient->GetWindows(displayId, windows);
198 }
199
GetNext(const AccessibilityElementInfo & elementInfo,const FocusMoveDirection direction,AccessibilityElementInfo & nextElementInfo)200 RetError AccessibilityUITestAbilityImpl::GetNext(const AccessibilityElementInfo &elementInfo,
201 const FocusMoveDirection direction, AccessibilityElementInfo &nextElementInfo)
202 {
203 HILOG_DEBUG();
204 sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
205 if (!aaClient) {
206 HILOG_ERROR("aaClient is nullptr");
207 return RET_ERR_NULLPTR;
208 }
209 return aaClient->GetNext(elementInfo, direction, nextElementInfo);
210 }
211
GetChildElementInfo(const int32_t index,const AccessibilityElementInfo & parent,AccessibilityElementInfo & child)212 RetError AccessibilityUITestAbilityImpl::GetChildElementInfo(const int32_t index,
213 const AccessibilityElementInfo &parent, AccessibilityElementInfo &child)
214 {
215 HILOG_DEBUG();
216 sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
217 if (!aaClient) {
218 HILOG_ERROR("aaClient is nullptr");
219 return RET_ERR_NULLPTR;
220 }
221 return aaClient->GetChildElementInfo(index, parent, child);
222 }
223
GetByContent(const AccessibilityElementInfo & elementInfo,const std::string & text,std::vector<AccessibilityElementInfo> & elementInfos)224 RetError AccessibilityUITestAbilityImpl::GetByContent(const AccessibilityElementInfo &elementInfo,
225 const std::string &text, std::vector<AccessibilityElementInfo> &elementInfos)
226 {
227 HILOG_DEBUG();
228 sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
229 if (!aaClient) {
230 HILOG_ERROR("aaClient is nullptr");
231 return RET_ERR_NULLPTR;
232 }
233 return aaClient->GetByContent(elementInfo, text, elementInfos);
234 }
235
GetSource(const AccessibilityEventInfo & eventInfo,AccessibilityElementInfo & elementInfo)236 RetError AccessibilityUITestAbilityImpl::GetSource(const AccessibilityEventInfo &eventInfo,
237 AccessibilityElementInfo &elementInfo)
238 {
239 HILOG_DEBUG();
240 sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
241 if (!aaClient) {
242 HILOG_ERROR("aaClient is nullptr");
243 return RET_ERR_NULLPTR;
244 }
245 return aaClient->GetSource(eventInfo, elementInfo);
246 }
247
GetParentElementInfo(const AccessibilityElementInfo & child,AccessibilityElementInfo & parent)248 RetError AccessibilityUITestAbilityImpl::GetParentElementInfo(const AccessibilityElementInfo &child,
249 AccessibilityElementInfo &parent)
250 {
251 HILOG_DEBUG();
252 sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
253 if (!aaClient) {
254 HILOG_ERROR("aaClient is nullptr");
255 return RET_ERR_NULLPTR;
256 }
257 return aaClient->GetParentElementInfo(child, parent);
258 }
259
ExecuteAction(const AccessibilityElementInfo & elementInfo,const ActionType action,const std::map<std::string,std::string> & actionArguments)260 RetError AccessibilityUITestAbilityImpl::ExecuteAction(const AccessibilityElementInfo &elementInfo,
261 const ActionType action, const std::map<std::string, std::string> &actionArguments)
262 {
263 HILOG_DEBUG();
264 sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
265 if (!aaClient) {
266 HILOG_ERROR("aaClient is nullptr");
267 return RET_ERR_NULLPTR;
268 }
269 return aaClient->ExecuteAction(elementInfo, action, actionArguments);
270 }
271
SetTargetBundleName(const std::vector<std::string> & targetBundleNames)272 RetError AccessibilityUITestAbilityImpl::SetTargetBundleName(const std::vector<std::string> &targetBundleNames)
273 {
274 HILOG_DEBUG();
275 sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
276 if (!aaClient) {
277 HILOG_ERROR("aaClient is nullptr");
278 return RET_ERR_NULLPTR;
279 }
280 return aaClient->SetTargetBundleName(targetBundleNames);
281 }
282
GetChildren(const AccessibilityElementInfo & parent,std::vector<AccessibilityElementInfo> & children)283 RetError AccessibilityUITestAbilityImpl::GetChildren(const AccessibilityElementInfo &parent,
284 std::vector<AccessibilityElementInfo> &children)
285 {
286 HILOG_DEBUG();
287 return AccessibleAbilityClient::GetInstance()->GetChildren(parent, children);
288 }
289
SetCacheMode(const int32_t cacheMode)290 RetError AccessibilityUITestAbilityImpl::SetCacheMode(const int32_t cacheMode)
291 {
292 HILOG_DEBUG();
293 return AccessibleAbilityClient::GetInstance()->SetCacheMode(cacheMode);
294 }
295
SearchElementInfoByAccessibilityId(const int32_t windowId,const int64_t elementId,const uint32_t mode,AccessibilityElementInfo & info,bool isFilter)296 RetError AccessibilityUITestAbilityImpl::SearchElementInfoByAccessibilityId(const int32_t windowId,
297 const int64_t elementId, const uint32_t mode, AccessibilityElementInfo &info, bool isFilter)
298 {
299 HILOG_DEBUG();
300 return AccessibleAbilityClient::GetInstance()->SearchElementInfoByAccessibilityId(windowId,
301 elementId, mode, info, isFilter);
302 }
303
ConfigureEvents(const std::vector<uint32_t> needEvents)304 RetError AccessibilityUITestAbilityImpl::ConfigureEvents(const std::vector<uint32_t> needEvents)
305 {
306 HILOG_DEBUG();
307 return AccessibleAbilityClient::GetInstance()->ConfigureEvents(needEvents);
308 }
309 } // namespace Accessibility
310 } // namespace OHOS