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