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