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