1 /*
2 * Copyright (c) 2021 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 <gtest/gtest.h>
17 #include "mock_accessible_ability_connection.h"
18 #include <algorithm>
19 #include <map>
20 #include <vector>
21 #include "accessibility_account_data.h"
22 #include "accessibility_ut_helper.h"
23 #include "accessible_ability_manager_service.h"
24 #include "hilog_wrapper.h"
25
26 namespace OHOS {
27 namespace Accessibility {
MockAccessibleAbilityConnection(int32_t accountId,int32_t connectionId,AccessibilityAbilityInfo & abilityInfo)28 MockAccessibleAbilityConnection::MockAccessibleAbilityConnection(int32_t accountId, int32_t connectionId,
29 AccessibilityAbilityInfo& abilityInfo)
30 : AccessibleAbilityConnection(accountId, connectionId, abilityInfo)
31 {
32 (void)accountId;
33 (void)connectionId;
34 (void)abilityInfo;
35 }
~MockAccessibleAbilityConnection()36 MockAccessibleAbilityConnection::~MockAccessibleAbilityConnection()
37 {}
38
AccessibleAbilityChannel(const int32_t accountId,const std::string & clientName)39 AccessibleAbilityChannel::AccessibleAbilityChannel(const int32_t accountId, const std::string &clientName)
40 : clientName_(clientName), accountId_(accountId)
41 {
42 }
43
SearchElementInfoByAccessibilityId(const ElementBasicInfo elementBasicInfo,const int32_t requestId,const sptr<IAccessibilityElementOperatorCallback> & callback,const int32_t mode,bool isFilter)44 RetError AccessibleAbilityChannel::SearchElementInfoByAccessibilityId(const ElementBasicInfo elementBasicInfo,
45 const int32_t requestId, const sptr<IAccessibilityElementOperatorCallback>& callback,
46 const int32_t mode, bool isFilter)
47 {
48 GTEST_LOG_(INFO) << "MOCK AccessibleAbilityChannel SearchElementInfoByAccessibilityId";
49 (void)elementBasicInfo;
50 (void)requestId;
51 (void)callback;
52 (void)mode;
53 (void)isFilter;
54 return RET_OK;
55 }
56
SearchDefaultFocusedByWindowId(const ElementBasicInfo elementBasicInfo,const int32_t requestId,const sptr<IAccessibilityElementOperatorCallback> & callback,const int32_t mode,bool isFilter)57 RetError AccessibleAbilityChannel::SearchDefaultFocusedByWindowId(const ElementBasicInfo elementBasicInfo,
58 const int32_t requestId, const sptr<IAccessibilityElementOperatorCallback>& callback,
59 const int32_t mode, bool isFilter)
60 {
61 GTEST_LOG_(INFO) << "MOCK AccessibleAbilityChannel SearchDefaultFocusedByWindowId";
62 (void)elementBasicInfo;
63 (void)requestId;
64 (void)callback;
65 (void)mode;
66 (void)isFilter;
67 return RET_OK;
68 }
69
SearchElementInfosByText(const int32_t accessibilityWindowId,const int64_t elementId,const std::string & text,const int32_t requestId,const sptr<IAccessibilityElementOperatorCallback> & callback)70 RetError AccessibleAbilityChannel::SearchElementInfosByText(const int32_t accessibilityWindowId,
71 const int64_t elementId, const std::string& text, const int32_t requestId,
72 const sptr<IAccessibilityElementOperatorCallback>& callback)
73 {
74 GTEST_LOG_(INFO) << "MOCK AccessibleAbilityChannel SearchElementInfosByText";
75 (void)accessibilityWindowId;
76 (void)elementId;
77 (void)text;
78 (void)requestId;
79 (void)callback;
80 return RET_OK;
81 }
82
FindFocusedElementInfo(const int32_t accessibilityWindowId,const int64_t elementId,const int32_t focusType,const int32_t requestId,const sptr<IAccessibilityElementOperatorCallback> & callback)83 RetError AccessibleAbilityChannel::FindFocusedElementInfo(const int32_t accessibilityWindowId,
84 const int64_t elementId, const int32_t focusType, const int32_t requestId,
85 const sptr<IAccessibilityElementOperatorCallback>& callback)
86 {
87 GTEST_LOG_(INFO) << "MOCK AccessibleAbilityChannel FindFocusedElementInfo";
88 (void)accessibilityWindowId;
89 (void)elementId;
90 (void)focusType;
91 (void)requestId;
92 (void)callback;
93 return RET_OK;
94 }
95
FocusMoveSearch(const int32_t accessibilityWindowId,const int64_t elementId,const int32_t direction,const int32_t requestId,const sptr<IAccessibilityElementOperatorCallback> & callback)96 RetError AccessibleAbilityChannel::FocusMoveSearch(const int32_t accessibilityWindowId, const int64_t elementId,
97 const int32_t direction, const int32_t requestId, const sptr<IAccessibilityElementOperatorCallback>& callback)
98 {
99 GTEST_LOG_(INFO) << "MOCK AccessibleAbilityChannel FocusMoveSearch";
100 (void)accessibilityWindowId;
101 (void)elementId;
102 (void)direction;
103 (void)requestId;
104 (void)callback;
105 return RET_OK;
106 }
107
ExecuteAction(const int32_t accessibilityWindowId,const int64_t elementId,const int32_t action,const std::map<std::string,std::string> & actionArguments,const int32_t requestId,const sptr<IAccessibilityElementOperatorCallback> & callback)108 RetError AccessibleAbilityChannel::ExecuteAction(const int32_t accessibilityWindowId, const int64_t elementId,
109 const int32_t action, const std::map<std::string, std::string> &actionArguments, const int32_t requestId,
110 const sptr<IAccessibilityElementOperatorCallback>& callback)
111 {
112 GTEST_LOG_(INFO) << "MOCK AccessibleAbilityChannel ExecuteAction";
113 (void)accessibilityWindowId;
114 (void)elementId;
115 (void)action;
116 (void)actionArguments;
117 (void)requestId;
118 (void)callback;
119 return RET_OK;
120 }
121
GetWindows(uint64_t displayId,std::vector<AccessibilityWindowInfo> & windows) const122 RetError AccessibleAbilityChannel::GetWindows(uint64_t displayId, std::vector<AccessibilityWindowInfo> &windows) const
123 {
124 GTEST_LOG_(INFO) << "MOCK AccessibleAbilityChannel GetWindows";
125 (void)displayId;
126 (void)windows;
127 sptr<AccessibleAbilityConnection> clientConnection = GetConnection(accountId_, clientName_);
128 if (!clientConnection) {
129 HILOG_ERROR("There is no client connection");
130 return RET_ERR_NO_CONNECTION;
131 }
132
133 if (!(clientConnection->GetAbilityInfo().GetCapabilityValues() & Capability::CAPABILITY_RETRIEVE)) {
134 HILOG_ERROR("AccessibleAbilityChannel::GetWindows failed: no capability");
135 return RET_ERR_NO_CAPABILITY;
136 }
137 return RET_OK;
138 }
139
GetWindows(std::vector<AccessibilityWindowInfo> & windows)140 RetError AccessibleAbilityChannel::GetWindows(std::vector<AccessibilityWindowInfo> &windows)
141 {
142 GTEST_LOG_(INFO) << "MOCK AccessibleAbilityChannel GetWindows";
143 uint64_t displayId = 0;
144 return GetWindows(displayId, windows);
145 }
146
GetWindow(const int32_t windowId,AccessibilityWindowInfo & windowInfo)147 RetError AccessibleAbilityChannel::GetWindow(const int32_t windowId, AccessibilityWindowInfo &windowInfo)
148 {
149 GTEST_LOG_(INFO) << "MOCK AccessibleAbilityChannel GetWindow";
150 (void)windowId;
151 (void)windowInfo;
152 return RET_OK;
153 }
154
SetTargetBundleName(const std::vector<std::string> & targetBundleNames)155 RetError AccessibleAbilityChannel::SetTargetBundleName(const std::vector<std::string> &targetBundleNames)
156 {
157 GTEST_LOG_(INFO) << "MOCK AccessibleAbilityChannel SetTargetBundleName";
158 (void)targetBundleNames;
159 return RET_OK;
160 }
161
GetWindowsByDisplayId(const uint64_t displayId,std::vector<AccessibilityWindowInfo> & windows)162 RetError AccessibleAbilityChannel::GetWindowsByDisplayId(const uint64_t displayId,
163 std::vector<AccessibilityWindowInfo> &windows)
164 {
165 GTEST_LOG_(INFO) << "MOCK AccessibleAbilityChannel GetWindowsByDisplayId";
166 return GetWindows(displayId, windows);
167 }
168
SetOnKeyPressEventResult(const bool handled,const int32_t sequence)169 void AccessibleAbilityChannel::SetOnKeyPressEventResult(const bool handled, const int32_t sequence)
170 {
171 GTEST_LOG_(INFO) << "MOCK AccessibleAbilityChannel SetOnKeyPressEventResult";
172 (void)handled;
173 (void)sequence;
174 }
175
SendSimulateGesture(const std::shared_ptr<AccessibilityGestureInjectPath> & gesturePath)176 RetError AccessibleAbilityChannel::SendSimulateGesture(
177 const std::shared_ptr<AccessibilityGestureInjectPath>& gesturePath)
178 {
179 GTEST_LOG_(INFO) << "MOCK AccessibleAbilityChannel SendSimulateGesture";
180 (void)gesturePath;
181 return RET_OK;
182 }
183
GetConnection(int32_t accountId,const std::string & clientName)184 sptr<AccessibleAbilityConnection> AccessibleAbilityChannel::GetConnection(int32_t accountId,
185 const std::string &clientName)
186 {
187 sptr<AccessibilityAccountData> accountData =
188 Singleton<AccessibleAbilityManagerService>::GetInstance().GetAccountData(accountId);
189 if (!accountData) {
190 HILOG_ERROR("accountData is nullptr");
191 return nullptr;
192 }
193
194 return accountData->GetAccessibleAbilityConnection(clientName);
195 }
196
AccessibleAbilityConnection(int32_t accountId,int32_t connectionId,AccessibilityAbilityInfo & abilityInfo)197 AccessibleAbilityConnection::AccessibleAbilityConnection(
198 int32_t accountId, int32_t connectionId, AccessibilityAbilityInfo& abilityInfo)
199 {
200 accountId_ = accountId;
201 connectionId_ = connectionId;
202 abilityInfo_ = abilityInfo;
203 }
204
~AccessibleAbilityConnection()205 AccessibleAbilityConnection::~AccessibleAbilityConnection()
206 {
207 HILOG_DEBUG("start");
208 }
209
OnAbilityConnectDone(const AppExecFwk::ElementName & element,const sptr<IRemoteObject> & remoteObject,int32_t resultCode)210 void AccessibleAbilityConnection::OnAbilityConnectDone(
211 const AppExecFwk::ElementName& element, const sptr<IRemoteObject>& remoteObject, int32_t resultCode)
212 {
213 (void)element;
214 (void)remoteObject;
215 (void)resultCode;
216 auto accountData = Singleton<AccessibleAbilityManagerService>::GetInstance().GetAccountData(accountId_);
217 sptr<AccessibleAbilityConnection> pointer = this;
218 if (accountData) {
219 accountData->AddConnectedAbility(pointer);
220 }
221 }
222
OnAbilityDisconnectDone(const AppExecFwk::ElementName & element,int32_t resultCode)223 void AccessibleAbilityConnection::OnAbilityDisconnectDone(const AppExecFwk::ElementName& element, int32_t resultCode)
224 {
225 (void)element;
226 (void)resultCode;
227 return;
228 }
229
OnKeyPressEvent(const MMI::KeyEvent & keyEvent,const int32_t sequence)230 bool AccessibleAbilityConnection::OnKeyPressEvent(const MMI::KeyEvent& keyEvent, const int32_t sequence)
231 {
232 (void)sequence;
233 if (keyEvent.GetKeyAction() == MMI::KeyEvent::KEY_ACTION_UP) {
234 return false;
235 }
236 return true;
237 }
238
IsWantedEvent(int32_t eventType)239 bool AccessibleAbilityConnection::IsWantedEvent(int32_t eventType)
240 {
241 (void)eventType;
242 return true;
243 }
244
CreateWant(AppExecFwk::ElementName & element)245 AAFwk::Want CreateWant(AppExecFwk::ElementName& element)
246 {
247 (void)element;
248 AAFwk::Want want;
249 return want;
250 }
251
Disconnect()252 void AccessibleAbilityConnection::Disconnect()
253 {
254 HILOG_DEBUG("start");
255 AccessibilityAbilityHelper::GetInstance().SetTestChannelId(-1);
256 }
257
Connect(const AppExecFwk::ElementName & element)258 bool AccessibleAbilityConnection::Connect(const AppExecFwk::ElementName& element)
259 {
260 HILOG_DEBUG("start");
261 elementName_ = element;
262 return true;
263 }
264
GetChannelId()265 int32_t AccessibleAbilityConnection::GetChannelId()
266 {
267 HILOG_DEBUG("connectionId_ is %{public}d", connectionId_);
268 return connectionId_;
269 }
270
OnRemoteDied(const wptr<IRemoteObject> & remote)271 void AccessibleAbilityConnection::AccessibleAbilityConnectionDeathRecipient::OnRemoteDied(
272 const wptr<IRemoteObject>& remote)
273 {
274 (void)remote;
275 // Temp deal: notify setting
276 }
277
OnAccessibilityEvent(AccessibilityEventInfo & eventInfo)278 void AccessibleAbilityConnection::OnAccessibilityEvent(AccessibilityEventInfo &eventInfo)
279 {
280 (void)eventInfo;
281 }
282
OnAbilityConnectDoneSync(const AppExecFwk::ElementName & element,const sptr<IRemoteObject> & remoteObject)283 void AccessibleAbilityConnection::OnAbilityConnectDoneSync(const AppExecFwk::ElementName &element,
284 const sptr<IRemoteObject> &remoteObject)
285 {
286 HILOG_DEBUG();
287 auto accountData = Singleton<AccessibleAbilityManagerService>::GetInstance().GetAccountData(accountId_);
288 if (!accountData) {
289 HILOG_ERROR("accountData is nullptr.");
290 return;
291 }
292 if (!remoteObject) {
293 HILOG_ERROR("AccessibleAbilityConnection::OnAbilityConnectDone get remoteObject failed");
294 return;
295 }
296 elementName_ = element;
297
298 sptr<AccessibleAbilityConnection> pointer = this;
299 accountData->AddConnectedAbility(pointer);
300 }
301
OnAbilityDisconnectDoneSync(const AppExecFwk::ElementName & element)302 void AccessibleAbilityConnection::OnAbilityDisconnectDoneSync(const AppExecFwk::ElementName &element)
303 {
304 HILOG_DEBUG("start");
305 (void)element;
306 }
307
EnableScreenCurtain(bool isEnable)308 RetError AccessibleAbilityChannel::EnableScreenCurtain(bool isEnable)
309 {
310 (void)isEnable;
311 return RET_OK;
312 }
313
GetCursorPosition(const int32_t accessibilityWindowId,const int64_t elementId,const int32_t requestId,const sptr<IAccessibilityElementOperatorCallback> & callback)314 RetError AccessibleAbilityChannel::GetCursorPosition(const int32_t accessibilityWindowId, const int64_t elementId,
315 const int32_t requestId, const sptr<IAccessibilityElementOperatorCallback> &callback)
316 {
317 GTEST_LOG_(INFO) << "MOCK AccessibleAbilitychannel GetCursorPosition";
318 (void)accessibilityWindowId;
319 (void)elementId;
320 (void)requestId;
321 (void)callback;
322 return RET_OK;
323 }
324 } // namespace Accessibility
325 } // namespace OHOS