• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2022-2025 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_extension_context.h"
17 #include "accessible_ability_client.h"
18 #include "hilog_wrapper.h"
19 #include "ability_manager_client.h"
20 #include "accessibility_permission.h"
21 #include "api_reporter_helper.h"
22 
23 using namespace std;
24 
25 namespace OHOS {
26 namespace Accessibility {
27 int AccessibilityExtensionContext::illegalRequestCode_(-1);
28 const std::string WANT_VERIFY = "";
GetFocus(const int32_t focusType,AccessibilityElementInfo & elementInfo,bool systemApi)29 RetError AccessibilityExtensionContext::GetFocus(
30     const int32_t focusType, AccessibilityElementInfo& elementInfo, bool systemApi)
31 {
32     HILOG_DEBUG();
33     sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
34     if (aaClient == nullptr) {
35         HILOG_ERROR("aaClient is nullptr");
36         return RET_ERR_NULLPTR;
37     }
38     return aaClient->GetFocus(focusType, elementInfo, systemApi);
39 }
40 
GetFocusByElementInfo(const AccessibilityElementInfo & sourceInfo,const int32_t focusType,AccessibilityElementInfo & elementInfo)41 RetError AccessibilityExtensionContext::GetFocusByElementInfo(const AccessibilityElementInfo &sourceInfo,
42     const int32_t focusType, AccessibilityElementInfo &elementInfo)
43 {
44     HILOG_DEBUG();
45     sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
46     if (aaClient == nullptr) {
47         HILOG_ERROR("aaClient is nullptr");
48         return RET_ERR_NULLPTR;
49     }
50     return aaClient->GetFocusByElementInfo(sourceInfo, focusType, elementInfo);
51 }
52 
InjectGesture(const std::shared_ptr<AccessibilityGestureInjectPath> & gesturePath)53 RetError AccessibilityExtensionContext::InjectGesture(
54     const std::shared_ptr<AccessibilityGestureInjectPath> &gesturePath)
55 {
56     HILOG_DEBUG();
57     sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
58     if (aaClient == nullptr) {
59         HILOG_ERROR("aaClient is nullptr");
60         return RET_ERR_NULLPTR;
61     }
62     return aaClient->InjectGesture(gesturePath);
63 }
64 
GetRoot(AccessibilityElementInfo & elementInfo,bool systemApi)65 RetError AccessibilityExtensionContext::GetRoot(AccessibilityElementInfo &elementInfo, bool systemApi)
66 {
67     HILOG_DEBUG();
68     sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
69     if (aaClient == nullptr) {
70         HILOG_ERROR("aaClient is nullptr");
71         return RET_ERR_NULLPTR;
72     }
73     return aaClient->GetRoot(elementInfo, systemApi);
74 }
75 
GetRootByWindow(const AccessibilityWindowInfo & windowInfo,AccessibilityElementInfo & elementInfo,bool systemApi)76 RetError AccessibilityExtensionContext::GetRootByWindow(const AccessibilityWindowInfo &windowInfo,
77     AccessibilityElementInfo &elementInfo, bool systemApi)
78 {
79     HILOG_DEBUG();
80     sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
81     if (aaClient == nullptr) {
82         HILOG_ERROR("aaClient is nullptr");
83         return RET_ERR_NULLPTR;
84     }
85     return aaClient->GetRootByWindow(windowInfo, elementInfo, systemApi);
86 }
87 
GetWindows(std::vector<AccessibilityWindowInfo> & windows,bool systemApi)88 RetError AccessibilityExtensionContext::GetWindows(std::vector<AccessibilityWindowInfo> &windows, bool systemApi)
89 {
90     HILOG_DEBUG();
91     sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
92     if (aaClient == nullptr) {
93         HILOG_ERROR("aaClient is nullptr");
94         return RET_ERR_NULLPTR;
95     }
96     return aaClient->GetWindows(windows, systemApi);
97 }
98 
GetWindows(const uint64_t displayId,std::vector<AccessibilityWindowInfo> & windows,bool systemApi)99 RetError AccessibilityExtensionContext::GetWindows(const uint64_t displayId,
100     std::vector<AccessibilityWindowInfo> &windows, bool systemApi)
101 {
102     HILOG_DEBUG();
103     sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
104     if (aaClient == nullptr) {
105         HILOG_ERROR("aaClient is nullptr");
106         return RET_ERR_NULLPTR;
107     }
108     return aaClient->GetWindows(displayId, windows, systemApi);
109 }
110 
GetNext(const AccessibilityElementInfo & elementInfo,const FocusMoveDirection direction,AccessibilityElementInfo & nextElementInfo)111 RetError AccessibilityExtensionContext::GetNext(const AccessibilityElementInfo &elementInfo,
112     const FocusMoveDirection direction, AccessibilityElementInfo &nextElementInfo)
113 {
114     HILOG_DEBUG();
115     sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
116     if (aaClient == nullptr) {
117         HILOG_ERROR("aaClient is nullptr");
118         return RET_ERR_NULLPTR;
119     }
120     return aaClient->GetNext(elementInfo, direction, nextElementInfo);
121 }
122 
GetChildElementInfo(const int32_t index,const AccessibilityElementInfo & parent,AccessibilityElementInfo & child)123 RetError AccessibilityExtensionContext::GetChildElementInfo(const int32_t index,
124     const AccessibilityElementInfo &parent, AccessibilityElementInfo &child)
125 {
126     HILOG_DEBUG();
127     sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
128     if (aaClient == nullptr) {
129         HILOG_ERROR("aaClient is nullptr");
130         return RET_ERR_NULLPTR;
131     }
132     return aaClient->GetChildElementInfo(index, parent, child);
133 }
134 
GetByContent(const AccessibilityElementInfo & elementInfo,const std::string & text,std::vector<AccessibilityElementInfo> & elementInfos)135 RetError AccessibilityExtensionContext::GetByContent(const AccessibilityElementInfo &elementInfo,
136     const std::string &text, std::vector<AccessibilityElementInfo> &elementInfos)
137 {
138     HILOG_DEBUG();
139     sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
140     if (aaClient == nullptr) {
141         HILOG_ERROR("aaClient is nullptr");
142         return RET_ERR_NULLPTR;
143     }
144     return aaClient->GetByContent(elementInfo, text, elementInfos);
145 }
146 
GetParentElementInfo(const AccessibilityElementInfo & child,AccessibilityElementInfo & parent)147 RetError AccessibilityExtensionContext::GetParentElementInfo(const AccessibilityElementInfo &child,
148     AccessibilityElementInfo &parent)
149 {
150     HILOG_DEBUG();
151     sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
152     if (aaClient == nullptr) {
153         HILOG_ERROR("aaClient is nullptr");
154         return RET_ERR_NULLPTR;
155     }
156     return aaClient->GetParentElementInfo(child, parent);
157 }
158 
ExecuteAction(const AccessibilityElementInfo & elementInfo,const ActionType action,const std::map<std::string,std::string> & actionArguments)159 RetError AccessibilityExtensionContext::ExecuteAction(const AccessibilityElementInfo &elementInfo,
160     const ActionType action, const std::map<std::string, std::string> &actionArguments)
161 {
162     HILOG_DEBUG();
163     sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
164     if (aaClient == nullptr) {
165         HILOG_ERROR("aaClient is nullptr");
166         return RET_ERR_NULLPTR;
167     }
168     return aaClient->ExecuteAction(elementInfo, action, actionArguments);
169 }
170 
SetTargetBundleName(const std::vector<std::string> & targetBundleNames)171 RetError AccessibilityExtensionContext::SetTargetBundleName(const std::vector<std::string> &targetBundleNames)
172 {
173     HILOG_DEBUG();
174     sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
175     if (aaClient == nullptr) {
176         HILOG_ERROR("aaClient is nullptr");
177         return RET_ERR_NULLPTR;
178     }
179     return aaClient->SetTargetBundleName(targetBundleNames);
180 }
181 
StartAbility(const AAFwk::Want & want)182 RetError AccessibilityExtensionContext::StartAbility(const AAFwk::Want &want)
183 {
184     HILOG_DEBUG();
185 #ifdef ACCESSIBILITY_EMULATOR_DEFINED
186     ApiReportHelper reporter("AccessibilityExtensionContext.StartAbility");
187 #endif // ACCESSIBILITY_EMULATOR_DEFINED
188     if (!Permission::IsSystemApp()) {
189         HILOG_ERROR("Not system app");
190         return RET_ERR_NOT_SYSTEM_APP;
191     }
192 
193     if (want.GetBundle() == WANT_VERIFY || want.GetElement().GetAbilityName() == WANT_VERIFY) {
194         HILOG_ERROR("Start ability failed, Want Parameter error.");
195         return RET_ERR_INVALID_PARAM;
196     }
197     HILOG_DEBUG("bundleName: %{public}s, abilityName: %{public}s",
198         want.GetBundle().c_str(), want.GetElement().GetAbilityName().c_str());
199 
200     auto ret = AAFwk::AbilityManagerClient::GetInstance()->StartAbility(want, token_, illegalRequestCode_);
201     if (ret != ERR_OK) {
202         HILOG_ERROR("StartAbility is failed %{public}d", ret);
203         return RET_ERR_FAILED;
204     }
205     return RET_OK;
206 }
207 
EnableScreenCurtain(const bool isEnable)208 RetError AccessibilityExtensionContext::EnableScreenCurtain(const bool isEnable)
209 {
210     HILOG_DEBUG();
211     sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
212     if (aaClient == nullptr) {
213         HILOG_ERROR("aaClient is nullptr");
214         return RET_ERR_NULLPTR;
215     }
216     return aaClient->EnableScreenCurtain(isEnable);
217 }
218 
GetElements(const int32_t windowId,const int64_t elementId,std::vector<AccessibilityElementInfo> & elementInfos)219 RetError AccessibilityExtensionContext::GetElements(const int32_t windowId, const int64_t elementId,
220     std::vector<AccessibilityElementInfo> &elementInfos)
221 {
222     HILOG_DEBUG();
223     sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
224     if (aaClient == nullptr) {
225         HILOG_ERROR("aaClient is nullptr");
226         return RET_ERR_NULLPTR;
227     }
228     return aaClient->GetElements(windowId, elementId, elementInfos);
229 }
230 
GetDefaultFocusedElementIds(const int32_t windowId,std::vector<AccessibilityElementInfo> & elementInfos)231 RetError AccessibilityExtensionContext::GetDefaultFocusedElementIds(const int32_t windowId,
232     std::vector<AccessibilityElementInfo> &elementInfos)
233 {
234     HILOG_DEBUG();
235     sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
236     if (aaClient == nullptr) {
237         HILOG_ERROR("aaClient is nullptr");
238         return RET_ERR_NULLPTR;
239     }
240     return aaClient->GetDefaultFocusedElementIds(windowId, elementInfos);
241 }
242 
HoldRunningLock()243 RetError AccessibilityExtensionContext::HoldRunningLock()
244 {
245     HILOG_DEBUG();
246     sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
247     if (aaClient == nullptr) {
248         HILOG_ERROR("aaClient is nullptr");
249         return RET_ERR_NULLPTR;
250     }
251     return aaClient->HoldRunningLock();
252 }
253 
UnholdRunningLock()254 RetError AccessibilityExtensionContext::UnholdRunningLock()
255 {
256     HILOG_DEBUG();
257     sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
258     if (aaClient == nullptr) {
259         HILOG_ERROR("aaClient is nullptr");
260         return RET_ERR_NULLPTR;
261     }
262     return aaClient->UnholdRunningLock();
263 }
264 
RegisterDisconnectCallback(std::shared_ptr<DisconnectCallback> & callback)265 RetError AccessibilityExtensionContext::RegisterDisconnectCallback(std::shared_ptr<DisconnectCallback> &callback)
266 {
267     HILOG_DEBUG();
268     sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
269     if (aaClient == nullptr) {
270         HILOG_ERROR("aaClient is nullptr");
271         return RET_ERR_NULLPTR;
272     }
273     return aaClient->RegisterDisconnectCallback(callback);
274 }
275 
UnRegisterDisconnectCallback(std::shared_ptr<DisconnectCallback> & callback)276 RetError AccessibilityExtensionContext::UnRegisterDisconnectCallback(std::shared_ptr<DisconnectCallback> &callback)
277 {
278     HILOG_DEBUG();
279     sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
280     if (aaClient == nullptr) {
281         HILOG_ERROR("aaClient is nullptr");
282         return RET_ERR_NULLPTR;
283     }
284     return aaClient->UnRegisterDisconnectCallback(callback);
285 }
286 
NotifyDisconnect()287 RetError AccessibilityExtensionContext::NotifyDisconnect()
288 {
289     HILOG_DEBUG();
290     sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
291     if (aaClient == nullptr) {
292         HILOG_ERROR("aaClient is nullptr");
293         return RET_ERR_NULLPTR;
294     }
295     return aaClient->NotifyDisconnect();
296 }
297 } // namespace Accessibility
298 } // namespace OHOS