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)29 RetError AccessibilityExtensionContext::GetFocus(const int32_t focusType, AccessibilityElementInfo &elementInfo)
30 {
31 HILOG_DEBUG();
32 sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
33 if (aaClient == nullptr) {
34 HILOG_ERROR("aaClient is nullptr");
35 return RET_ERR_NULLPTR;
36 }
37 return aaClient->GetFocus(focusType, elementInfo);
38 }
39
GetFocusByElementInfo(const AccessibilityElementInfo & sourceInfo,const int32_t focusType,AccessibilityElementInfo & elementInfo)40 RetError AccessibilityExtensionContext::GetFocusByElementInfo(const AccessibilityElementInfo &sourceInfo,
41 const int32_t focusType, AccessibilityElementInfo &elementInfo)
42 {
43 HILOG_DEBUG();
44 sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
45 if (aaClient == nullptr) {
46 HILOG_ERROR("aaClient is nullptr");
47 return RET_ERR_NULLPTR;
48 }
49 return aaClient->GetFocusByElementInfo(sourceInfo, focusType, elementInfo);
50 }
51
InjectGesture(const std::shared_ptr<AccessibilityGestureInjectPath> & gesturePath)52 RetError AccessibilityExtensionContext::InjectGesture(
53 const std::shared_ptr<AccessibilityGestureInjectPath> &gesturePath)
54 {
55 HILOG_DEBUG();
56 sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
57 if (aaClient == nullptr) {
58 HILOG_ERROR("aaClient is nullptr");
59 return RET_ERR_NULLPTR;
60 }
61 return aaClient->InjectGesture(gesturePath);
62 }
63
GetRoot(AccessibilityElementInfo & elementInfo)64 RetError AccessibilityExtensionContext::GetRoot(AccessibilityElementInfo &elementInfo)
65 {
66 HILOG_DEBUG();
67 sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
68 if (aaClient == nullptr) {
69 HILOG_ERROR("aaClient is nullptr");
70 return RET_ERR_NULLPTR;
71 }
72 return aaClient->GetRoot(elementInfo);
73 }
74
GetRootByWindow(const AccessibilityWindowInfo & windowInfo,AccessibilityElementInfo & elementInfo)75 RetError AccessibilityExtensionContext::GetRootByWindow(const AccessibilityWindowInfo &windowInfo,
76 AccessibilityElementInfo &elementInfo)
77 {
78 HILOG_DEBUG();
79 sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
80 if (aaClient == nullptr) {
81 HILOG_ERROR("aaClient is nullptr");
82 return RET_ERR_NULLPTR;
83 }
84 return aaClient->GetRootByWindow(windowInfo, elementInfo);
85 }
86
GetWindows(std::vector<AccessibilityWindowInfo> & windows)87 RetError AccessibilityExtensionContext::GetWindows(std::vector<AccessibilityWindowInfo> &windows)
88 {
89 HILOG_DEBUG();
90 sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
91 if (aaClient == nullptr) {
92 HILOG_ERROR("aaClient is nullptr");
93 return RET_ERR_NULLPTR;
94 }
95 return aaClient->GetWindows(windows);
96 }
97
GetWindows(const uint64_t displayId,std::vector<AccessibilityWindowInfo> & windows)98 RetError AccessibilityExtensionContext::GetWindows(const uint64_t displayId,
99 std::vector<AccessibilityWindowInfo> &windows)
100 {
101 HILOG_DEBUG();
102 sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
103 if (aaClient == nullptr) {
104 HILOG_ERROR("aaClient is nullptr");
105 return RET_ERR_NULLPTR;
106 }
107 return aaClient->GetWindows(displayId, windows);
108 }
109
GetNext(const AccessibilityElementInfo & elementInfo,const FocusMoveDirection direction,AccessibilityElementInfo & nextElementInfo)110 RetError AccessibilityExtensionContext::GetNext(const AccessibilityElementInfo &elementInfo,
111 const FocusMoveDirection direction, AccessibilityElementInfo &nextElementInfo)
112 {
113 HILOG_DEBUG();
114 sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
115 if (aaClient == nullptr) {
116 HILOG_ERROR("aaClient is nullptr");
117 return RET_ERR_NULLPTR;
118 }
119 return aaClient->GetNext(elementInfo, direction, nextElementInfo);
120 }
121
GetChildElementInfo(const int32_t index,const AccessibilityElementInfo & parent,AccessibilityElementInfo & child)122 RetError AccessibilityExtensionContext::GetChildElementInfo(const int32_t index,
123 const AccessibilityElementInfo &parent, AccessibilityElementInfo &child)
124 {
125 HILOG_DEBUG();
126 sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
127 if (aaClient == nullptr) {
128 HILOG_ERROR("aaClient is nullptr");
129 return RET_ERR_NULLPTR;
130 }
131 return aaClient->GetChildElementInfo(index, parent, child);
132 }
133
GetByContent(const AccessibilityElementInfo & elementInfo,const std::string & text,std::vector<AccessibilityElementInfo> & elementInfos)134 RetError AccessibilityExtensionContext::GetByContent(const AccessibilityElementInfo &elementInfo,
135 const std::string &text, std::vector<AccessibilityElementInfo> &elementInfos)
136 {
137 HILOG_DEBUG();
138 sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
139 if (aaClient == nullptr) {
140 HILOG_ERROR("aaClient is nullptr");
141 return RET_ERR_NULLPTR;
142 }
143 return aaClient->GetByContent(elementInfo, text, elementInfos);
144 }
145
GetParentElementInfo(const AccessibilityElementInfo & child,AccessibilityElementInfo & parent)146 RetError AccessibilityExtensionContext::GetParentElementInfo(const AccessibilityElementInfo &child,
147 AccessibilityElementInfo &parent)
148 {
149 HILOG_DEBUG();
150 sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
151 if (aaClient == nullptr) {
152 HILOG_ERROR("aaClient is nullptr");
153 return RET_ERR_NULLPTR;
154 }
155 return aaClient->GetParentElementInfo(child, parent);
156 }
157
ExecuteAction(const AccessibilityElementInfo & elementInfo,const ActionType action,const std::map<std::string,std::string> & actionArguments)158 RetError AccessibilityExtensionContext::ExecuteAction(const AccessibilityElementInfo &elementInfo,
159 const ActionType action, const std::map<std::string, std::string> &actionArguments)
160 {
161 HILOG_DEBUG();
162 sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
163 if (aaClient == nullptr) {
164 HILOG_ERROR("aaClient is nullptr");
165 return RET_ERR_NULLPTR;
166 }
167 return aaClient->ExecuteAction(elementInfo, action, actionArguments);
168 }
169
SetTargetBundleName(const std::vector<std::string> & targetBundleNames)170 RetError AccessibilityExtensionContext::SetTargetBundleName(const std::vector<std::string> &targetBundleNames)
171 {
172 HILOG_DEBUG();
173 sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
174 if (aaClient == nullptr) {
175 HILOG_ERROR("aaClient is nullptr");
176 return RET_ERR_NULLPTR;
177 }
178 return aaClient->SetTargetBundleName(targetBundleNames);
179 }
180
StartAbility(const AAFwk::Want & want)181 RetError AccessibilityExtensionContext::StartAbility(const AAFwk::Want &want)
182 {
183 HILOG_DEBUG();
184 #ifdef ACCESSIBILITY_EMULATOR_DEFINED
185 ApiReportHelper reporter("AccessibilityExtensionContext.StartAbility");
186 #endif // ACCESSIBILITY_EMULATOR_DEFINED
187 if (!Permission::IsSystemApp()) {
188 HILOG_ERROR("Not system app");
189 return RET_ERR_NOT_SYSTEM_APP;
190 }
191
192 if (want.GetBundle() == WANT_VERIFY || want.GetElement().GetAbilityName() == WANT_VERIFY) {
193 HILOG_ERROR("Start ability failed, Want Parameter error.");
194 return RET_ERR_INVALID_PARAM;
195 }
196 HILOG_DEBUG("bundleName: %{public}s, abilityName: %{public}s",
197 want.GetBundle().c_str(), want.GetElement().GetAbilityName().c_str());
198
199 auto ret = AAFwk::AbilityManagerClient::GetInstance()->StartAbility(want, token_, illegalRequestCode_);
200 if (ret != ERR_OK) {
201 HILOG_ERROR("StartAbility is failed %{public}d", ret);
202 return RET_ERR_FAILED;
203 }
204 return RET_OK;
205 }
206
EnableScreenCurtain(const bool isEnable)207 RetError AccessibilityExtensionContext::EnableScreenCurtain(const bool isEnable)
208 {
209 HILOG_DEBUG();
210 sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
211 if (aaClient == nullptr) {
212 HILOG_ERROR("aaClient is nullptr");
213 return RET_ERR_NULLPTR;
214 }
215 return aaClient->EnableScreenCurtain(isEnable);
216 }
217
GetElements(const int32_t windowId,const int64_t elementId,std::vector<AccessibilityElementInfo> & elementInfos)218 RetError AccessibilityExtensionContext::GetElements(const int32_t windowId, const int64_t elementId,
219 std::vector<AccessibilityElementInfo> &elementInfos)
220 {
221 HILOG_DEBUG();
222 sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
223 if (aaClient == nullptr) {
224 HILOG_ERROR("aaClient is nullptr");
225 return RET_ERR_NULLPTR;
226 }
227 return aaClient->GetElements(windowId, elementId, elementInfos);
228 }
229
GetDefaultFocusedElementIds(const int32_t windowId,std::vector<AccessibilityElementInfo> & elementInfos)230 RetError AccessibilityExtensionContext::GetDefaultFocusedElementIds(const int32_t windowId,
231 std::vector<AccessibilityElementInfo> &elementInfos)
232 {
233 HILOG_DEBUG();
234 sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
235 if (aaClient == nullptr) {
236 HILOG_ERROR("aaClient is nullptr");
237 return RET_ERR_NULLPTR;
238 }
239 return aaClient->GetDefaultFocusedElementIds(windowId, elementInfos);
240 }
241 } // namespace Accessibility
242 } // namespace OHOS