• 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)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