• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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