• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 == nullptr) {
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 == nullptr) {
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 == nullptr) {
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 == nullptr) {
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 == nullptr) {
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 == nullptr) {
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 == nullptr) {
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 == nullptr) {
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 == nullptr) {
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 == nullptr) {
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 == nullptr) {
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 == nullptr) {
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 == nullptr) {
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 
EnableScreenCurtain(const bool isEnable)203 RetError AccessibilityExtensionContext::EnableScreenCurtain(const bool isEnable)
204 {
205     HILOG_DEBUG();
206     sptr<AccessibleAbilityClient> aaClient = AccessibleAbilityClient::GetInstance();
207     if (aaClient == nullptr) {
208         HILOG_ERROR("aaClient is nullptr");
209         return RET_ERR_NULLPTR;
210     }
211     return aaClient->EnableScreenCurtain(isEnable);
212 }
213 } // namespace Accessibility
214 } // namespace OHOS