• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 "accessibility_account_data.h"
17 #include "accessible_ability_manager_service.h"
18 #include "hilog_wrapper.h"
19 #include "utils.h"
20 
21 namespace OHOS {
22 namespace Accessibility {
23 namespace {
24     const std::string PREF_TEST_PATH = "/data/service/el1/public/barrierfree/accessibility_ability_manager_service/";
25 } // namespace
26 
AccessibilityAccountData(int32_t accountId)27 AccessibilityAccountData::AccessibilityAccountData(int32_t accountId)
28 {
29     id_ = accountId;
30 }
31 
~AccessibilityAccountData()32 AccessibilityAccountData::~AccessibilityAccountData()
33 {}
34 
GetAccountId()35 int32_t AccessibilityAccountData::GetAccountId()
36 {
37     HILOG_DEBUG("start.");
38     return id_;
39 }
40 
41 // get client state.
GetAccessibilityState()42 uint32_t AccessibilityAccountData::GetAccessibilityState()
43 {
44     return 0;
45 }
46 
47 // switch the user causes state changed.
OnAccountSwitched()48 void AccessibilityAccountData::OnAccountSwitched()
49 {
50     HILOG_DEBUG("start.");
51     // reset AccessibleAbilityConnection
52     std::vector<sptr<AccessibleAbilityConnection>> connectionList;
53     connectedA11yAbilities_.GetAccessibilityAbilities(connectionList);
54     for (auto& connection : connectionList) {
55         connection->Disconnect();
56     }
57 
58     // Clear all abilities.
59     connectedA11yAbilities_.Clear();
60     connectingA11yAbilities_.Clear();
61     enabledAbilities_.clear();
62     installedAbilities_.clear();
63 
64     // Clear Setting State.
65     isEventTouchGuideState_ = false;
66     isScreenMagnification_ = false;
67     isFilteringKeyEvents_ = false;
68     isGesturesSimulation_ = false;
69 }
70 
71 // add connect ability.
AddConnectedAbility(sptr<AccessibleAbilityConnection> & connection)72 void AccessibilityAccountData::AddConnectedAbility(sptr<AccessibleAbilityConnection>& connection)
73 {
74     std::string uri = Utils::GetUri(connection->GetElementName());
75     HILOG_DEBUG("URI is %{public}s", uri.c_str());
76     connectedA11yAbilities_.AddAccessibilityAbility(uri, connection);
77 }
78 
79 // remove connect ability.
RemoveConnectedAbility(const AppExecFwk::ElementName & element)80 void AccessibilityAccountData::RemoveConnectedAbility(const AppExecFwk::ElementName &element)
81 {
82     connectedA11yAbilities_.RemoveAccessibilityAbilityByUri(Utils::GetUri(element));
83 }
84 
AddCaptionPropertyCallback(const sptr<IAccessibleAbilityManagerCaptionObserver> & callback)85 void AccessibilityAccountData::AddCaptionPropertyCallback(
86     const sptr<IAccessibleAbilityManagerCaptionObserver>& callback)
87 {
88     (void)callback;
89 }
90 
RemoveCaptionPropertyCallback(const wptr<IRemoteObject> & callback)91 void AccessibilityAccountData::RemoveCaptionPropertyCallback(const wptr<IRemoteObject>& callback)
92 {
93     (void)callback;
94     HILOG_DEBUG("start.");
95 }
96 // add AccessibilityInteractionConnection
AddAccessibilityWindowConnection(const int32_t windowId,const sptr<AccessibilityWindowConnection> & interactionConnection)97 void AccessibilityAccountData::AddAccessibilityWindowConnection(
98     const int32_t windowId, const sptr<AccessibilityWindowConnection>& interactionConnection)
99 {
100     HILOG_DEBUG("windowId(%{public}d)", windowId);
101     if (!asacConnections_.count(windowId)) {
102         asacConnections_.insert(std::make_pair(windowId, interactionConnection));
103     }
104 }
105 
106 // remove AccessibilityWindowConnection
RemoveAccessibilityWindowConnection(const int32_t windowId)107 void AccessibilityAccountData::RemoveAccessibilityWindowConnection(const int32_t windowId)
108 {
109     HILOG_DEBUG("windowId(%{public}d)", windowId);
110     auto iter = asacConnections_.find(windowId);
111     if (iter != asacConnections_.end()) {
112         asacConnections_.erase(iter);
113     }
114 }
115 
AddConnectingA11yAbility(const std::string & uri,const sptr<AccessibleAbilityConnection> & connection)116 void AccessibilityAccountData::AddConnectingA11yAbility(const std::string &uri,
117     const sptr<AccessibleAbilityConnection> &connection)
118 {
119     connectingA11yAbilities_.AddAccessibilityAbility(uri, connection);
120 }
121 
RemoveConnectingA11yAbility(const std::string & uri)122 void AccessibilityAccountData::RemoveConnectingA11yAbility(const std::string &uri)
123 {
124     connectingA11yAbilities_.RemoveAccessibilityAbilityByUri(uri);
125 }
126 
127 // For UT
AddEnabledAbility(const std::string & bundleName)128 void AccessibilityAccountData::AddEnabledAbility(const std::string& bundleName)
129 {
130     HILOG_DEBUG("start.");
131     if (std::any_of(enabledAbilities_.begin(), enabledAbilities_.end(),
132         [bundleName](const std::string &enabledAbility) {
133             return enabledAbility == bundleName;
134         })) {
135         HILOG_ERROR("The ability is already enabled, and it's bundle name is %{public}s", bundleName.c_str());
136         return;
137     }
138     enabledAbilities_.push_back(bundleName);
139     HILOG_DEBUG("Add EnabledAbility: %{public}zu", enabledAbilities_.size());
140 }
141 
RemoveEnabledAbility(const std::string & name)142 RetError AccessibilityAccountData::RemoveEnabledAbility(const std::string &name)
143 {
144     HILOG_DEBUG("start");
145     for (auto it = enabledAbilities_.begin(); it != enabledAbilities_.end(); it++) {
146         if (*it == name) {
147             HILOG_DEBUG("Removed %{public}s from EnabledAbility: ", name.c_str());
148             enabledAbilities_.erase(it);
149             HILOG_DEBUG("EnabledAbility size(%{public}zu)", enabledAbilities_.size());
150             return RET_OK;
151         }
152     }
153     HILOG_ERROR("The ability(%{public}s) is not enabled.", name.c_str());
154     return RET_ERR_NOT_ENABLED;
155 }
156 
157 // For UT
AddInstalledAbility(AccessibilityAbilityInfo & abilityInfo)158 void AccessibilityAccountData::AddInstalledAbility(AccessibilityAbilityInfo& abilityInfo)
159 {
160     (void)abilityInfo;
161 }
162 
RemoveInstalledAbility(const std::string & bundleName)163 void AccessibilityAccountData::RemoveInstalledAbility(const std::string &bundleName)
164 {
165     (void)bundleName;
166 }
167 
ClearInstalledAbility()168 void AccessibilityAccountData::ClearInstalledAbility()
169 {}
170 
GetAccessibleAbilityConnection(const std::string & elementName)171 const sptr<AccessibleAbilityConnection> AccessibilityAccountData::GetAccessibleAbilityConnection(
172     const std::string &elementName)
173 {
174     (void)elementName;
175     return nullptr;
176 }
177 
GetAccessibilityWindowConnection(const int32_t windowId)178 const sptr<AccessibilityWindowConnection> AccessibilityAccountData::GetAccessibilityWindowConnection(
179     const int32_t windowId)
180 {
181     if (asacConnections_.count(windowId) > 0) {
182         return asacConnections_[windowId];
183     }
184     return nullptr;
185 }
186 
GetConnectedA11yAbilities()187 const std::map<std::string, sptr<AccessibleAbilityConnection>> AccessibilityAccountData::GetConnectedA11yAbilities()
188 {
189     HILOG_DEBUG("GetConnectedA11yAbilities start.");
190     std::map<std::string, sptr<AccessibleAbilityConnection>> connectionMap;
191     connectedA11yAbilities_.GetAccessibilityAbilitiesMap(connectionMap);
192     return connectionMap;
193 }
194 
GetAsacConnections()195 const std::map<int32_t, sptr<AccessibilityWindowConnection>> AccessibilityAccountData::GetAsacConnections()
196 {
197     HILOG_DEBUG("GetAsacConnections start");
198     return asacConnections_;
199 }
200 
GetCaptionPropertyCallbacks()201 const CaptionPropertyCallbacks AccessibilityAccountData::GetCaptionPropertyCallbacks()
202 {
203     HILOG_DEBUG("GetCaptionPropertyCallbacks start");
204     return captionPropertyCallbacks_;
205 }
206 
GetConnectingA11yAbility(const std::string & uri)207 sptr<AccessibleAbilityConnection> AccessibilityAccountData::GetConnectingA11yAbility(const std::string &uri)
208 {
209     return connectingA11yAbilities_.GetAccessibilityAbilityByUri(uri);
210 }
211 
GetEnabledAbilities()212 const std::vector<std::string>& AccessibilityAccountData::GetEnabledAbilities()
213 {
214     HILOG_DEBUG("enabledAbilities_'s size is %{public}zu", enabledAbilities_.size());
215     for (auto& ability : enabledAbilities_) {
216         HILOG_DEBUG("bundleName %{public}s ", ability.c_str());
217     }
218     return enabledAbilities_;
219 }
220 
GetInstalledAbilities() const221 const std::vector<AccessibilityAbilityInfo> &AccessibilityAccountData::GetInstalledAbilities() const
222 {
223     HILOG_DEBUG("GetInstalledAbilities start");
224     return installedAbilities_;
225 }
226 
GetAbilitiesByState(AbilityStateType state,std::vector<AccessibilityAbilityInfo> & abilities)227 void AccessibilityAccountData::GetAbilitiesByState(
228     AbilityStateType state, std::vector<AccessibilityAbilityInfo> &abilities)
229 {
230     (void)state;
231     (void)abilities;
232 }
233 
UpdateAccountCapabilities()234 void AccessibilityAccountData::UpdateAccountCapabilities()
235 {}
236 
UpdateEventTouchGuideCapability()237 void AccessibilityAccountData::UpdateEventTouchGuideCapability()
238 {}
239 
UpdateGesturesSimulationCapability()240 void AccessibilityAccountData::UpdateGesturesSimulationCapability()
241 {}
242 
UpdateFilteringKeyEventsCapability()243 void AccessibilityAccountData::UpdateFilteringKeyEventsCapability()
244 {
245     isFilteringKeyEvents_ = false;
246 }
247 
UpdateMagnificationCapability()248 void AccessibilityAccountData::UpdateMagnificationCapability()
249 {
250     isScreenMagnification_ = false;
251 }
252 
UpdateEnableAbilityListsState()253 void AccessibilityAccountData::UpdateEnableAbilityListsState()
254 {
255     return;
256 }
257 
EnableAbility(const std::string & name,const uint32_t capabilities)258 RetError AccessibilityAccountData::EnableAbility(const std::string &name, const uint32_t capabilities)
259 {
260     HILOG_DEBUG("start.");
261     if (std::any_of(enabledAbilities_.begin(), enabledAbilities_.end(),
262         [name](const std::string &enabledAbility) {
263             return enabledAbility == name;
264         })) {
265         HILOG_ERROR("The ability[%{public}s] is already enabled", name.c_str());
266         return RET_ERR_CONNECTION_EXIST;
267     }
268     enabledAbilities_.push_back(name);
269     return RET_OK;
270 }
271 
GetInstalledAbilitiesFromBMS()272 bool AccessibilityAccountData::GetInstalledAbilitiesFromBMS()
273 {
274     HILOG_DEBUG("start.");
275     return true;
276 }
277 
SetScreenReaderState(const std::string & name,const std::string & state)278 void AccessibilityAccountData::SetScreenReaderState(const std::string &name, const std::string &state)
279 {
280     HILOG_DEBUG("start.");
281     (void)name;
282     (void)state;
283 }
284 
GetDefaultUserScreenReaderState()285 bool AccessibilityAccountData::GetDefaultUserScreenReaderState()
286 {
287     HILOG_DEBUG("start.");
288     return true;
289 }
290 
GetScreenReaderState()291 bool AccessibilityAccountData::GetScreenReaderState()
292 {
293     HILOG_DEBUG("start.");
294     return true;
295 }
296 
Init()297 void AccessibilityAccountData::Init()
298 {
299     HILOG_DEBUG("start.");
300     if (!config_) {
301         config_ = std::make_shared<AccessibilitySettingsConfig>(id_);
302     }
303 }
304 
AddEnableAbilityListsObserver(const sptr<IAccessibilityEnableAbilityListsObserver> & observer)305 void AccessibilityAccountData::AddEnableAbilityListsObserver(
306     const sptr<IAccessibilityEnableAbilityListsObserver>& observer)
307 {
308     HILOG_DEBUG("start.");
309     (void)observer;
310 }
311 
RemoveEnableAbilityListsObserver(const wptr<IRemoteObject> & observer)312 void AccessibilityAccountData::RemoveEnableAbilityListsObserver(const wptr<IRemoteObject>& observer)
313 {
314     (void)observer;
315 }
316 
AddConfigCallback(const sptr<IAccessibleAbilityManagerConfigObserver> & callback)317 void AccessibilityAccountData::AddConfigCallback(
318     const sptr<IAccessibleAbilityManagerConfigObserver>& callback)
319 {
320     HILOG_DEBUG("AddConfigCallback start");
321     configCallbacks_.push_back(callback);
322 }
323 
GetConfigCallbacks()324 const std::vector<sptr<IAccessibleAbilityManagerConfigObserver>> AccessibilityAccountData::GetConfigCallbacks()
325 {
326     HILOG_DEBUG("GetConfigCallbacks start");
327     return configCallbacks_;
328 }
329 
SetConfigCallbacks(std::vector<sptr<IAccessibleAbilityManagerConfigObserver>> & observer)330 void AccessibilityAccountData::SetConfigCallbacks(std::vector<sptr<IAccessibleAbilityManagerConfigObserver>>& observer)
331 {
332     HILOG_DEBUG("SetConfigCallbacks start");
333     configCallbacks_ = observer;
334 }
335 
RemoveConfigCallback(const wptr<IRemoteObject> & callback)336 void AccessibilityAccountData::RemoveConfigCallback(const wptr<IRemoteObject>& callback)
337 {
338     HILOG_DEBUG("RemoveConfigCallback start");
339     for (auto iter = configCallbacks_.begin(); iter != configCallbacks_.end(); iter++) {
340         if ((*iter)->AsObject() == callback) {
341             configCallbacks_.erase(iter);
342             break;
343         }
344     }
345 }
346 
GetConfig()347 std::shared_ptr<AccessibilitySettingsConfig> AccessibilityAccountData::GetConfig()
348 {
349     HILOG_DEBUG("GetConfig start");
350     return config_;
351 }
352 
GetImportantEnabledAbilities(std::map<std::string,uint32_t> & importantEnabledAbilities) const353 void AccessibilityAccountData::GetImportantEnabledAbilities(
354     std::map<std::string, uint32_t> &importantEnabledAbilities) const
355 {
356     HILOG_DEBUG("GetImportantEnabledAbilities start");
357     (void)importantEnabledAbilities;
358 }
359 
UpdateImportantEnabledAbilities(std::map<std::string,uint32_t> & importantEnabledAbilities)360 void AccessibilityAccountData::UpdateImportantEnabledAbilities(
361     std::map<std::string, uint32_t> &importantEnabledAbilities)
362 {
363     HILOG_DEBUG("UpdateImportantEnabledAbilities start");
364     (void)importantEnabledAbilities;
365 }
366 
GetInputFilterFlag() const367 uint32_t AccessibilityAccountData::GetInputFilterFlag() const
368 {
369     HILOG_DEBUG("GetInputFilterFlag start");
370     return 0;
371 }
372 
UpdateAbilities()373 void AccessibilityAccountData::UpdateAbilities()
374 {
375     HILOG_DEBUG("UpdateAbilities start");
376 }
377 
AddUITestClient(const sptr<IRemoteObject> & obj,const std::string & bundleName,const std::string & abilityName)378 void AccessibilityAccountData::AddUITestClient(const sptr<IRemoteObject> &obj,
379     const std::string &bundleName, const std::string &abilityName)
380 {
381     (void)obj;
382     (void)bundleName;
383     (void)abilityName;
384 }
385 
RemoveUITestClient(sptr<AccessibleAbilityConnection> & connection,const std::string & bundleName)386 void AccessibilityAccountData::RemoveUITestClient(
387     sptr<AccessibleAbilityConnection> &connection, const std::string &bundleName)
388 {
389     (void)connection;
390     (void)bundleName;
391 }
392 
SetAbilityAutoStartState(const std::string & name,const bool state)393 void AccessibilityAccountData::SetAbilityAutoStartState(const std::string &name, const bool state)
394 {
395     (void)name;
396     (void)state;
397 }
398 
GetAbilityAutoStartState(const std::string & key)399 bool AccessibilityAccountData::GetAbilityAutoStartState(const std::string &key)
400 {
401     (void)key;
402     return true;
403 }
404 
GetConfigValueAtoHos(ConfigValueAtoHosUpdate & value)405 void AccessibilityAccountData::GetConfigValueAtoHos(ConfigValueAtoHosUpdate &value)
406 {
407     (void)value;
408 }
409 
DelAutoStartPrefKeyInRemovePkg(const std::string & bundleName)410 void AccessibilityAccountData::DelAutoStartPrefKeyInRemovePkg(const std::string &bundleName)
411 {
412     (void)bundleName;
413 }
414 
UpdateAutoStartEnabledAbilities()415 void AccessibilityAccountData::UpdateAutoStartEnabledAbilities()
416 {
417 }
418 
GetAccessibilityAbilityByUri(const std::string & uri)419 sptr<AccessibleAbilityConnection> AccessibilityAccountData::AccessibilityAbility::GetAccessibilityAbilityByUri(
420     const std::string& uri)
421 {
422     auto iter = connectionMap_.find(uri);
423     if (iter != connectionMap_.end()) {
424         return iter->second;
425     }
426 
427     return nullptr;
428 }
429 
Clear()430 void AccessibilityAccountData::AccessibilityAbility::Clear()
431 {
432     return connectionMap_.clear();
433 }
434 
AddAccessibilityAbility(const std::string & uri,const sptr<AccessibleAbilityConnection> & connection)435 void AccessibilityAccountData::AccessibilityAbility::AddAccessibilityAbility(const std::string& uri,
436     const sptr<AccessibleAbilityConnection>& connection)
437 {
438     if (!connectionMap_.count(uri)) {
439         connectionMap_[uri] = connection;
440         return;
441     }
442 }
443 
RemoveAccessibilityAbilityByUri(const std::string & uri)444 void AccessibilityAccountData::AccessibilityAbility::RemoveAccessibilityAbilityByUri(const std::string& uri)
445 {
446     auto iter = connectionMap_.find(uri);
447     if (iter != connectionMap_.end()) {
448         connectionMap_.erase(iter);
449     }
450 }
451 
GetAccessibilityAbilities(std::vector<sptr<AccessibleAbilityConnection>> & connectionList)452 void AccessibilityAccountData::AccessibilityAbility::GetAccessibilityAbilities(
453     std::vector<sptr<AccessibleAbilityConnection>>& connectionList)
454 {
455     for (auto& connection : connectionMap_) {
456         connectionList.push_back(connection.second);
457     }
458 }
459 
GetAccessibilityAbilitiesMap(std::map<std::string,sptr<AccessibleAbilityConnection>> & connectionMap)460 void AccessibilityAccountData::AccessibilityAbility::GetAccessibilityAbilitiesMap(
461     std::map<std::string, sptr<AccessibleAbilityConnection>>& connectionMap)
462 {
463     connectionMap = connectionMap_;
464 }
465 
AddAccountData(int32_t accountId)466 sptr<AccessibilityAccountData> AccessibilityAccountDataMap::AddAccountData(
467     int32_t accountId)
468 {
469     auto iter = accountDataMap_.find(accountId);
470     if (iter != accountDataMap_.end()) {
471         HILOG_DEBUG("accountId is existed");
472         return iter->second;
473     }
474 
475     sptr<AccessibilityAccountData> accountData = new(std::nothrow) AccessibilityAccountData(accountId);
476     if (accountData == nullptr) {
477         return nullptr;
478     }
479 
480     accountData->Init();
481     accountDataMap_[accountId] = accountData;
482     return accountData;
483 }
484 
GetCurrentAccountData(int32_t accountId)485 sptr<AccessibilityAccountData> AccessibilityAccountDataMap::GetCurrentAccountData(
486     int32_t accountId)
487 {
488     auto iter = accountDataMap_.find(accountId);
489     if (iter != accountDataMap_.end()) {
490         return iter->second;
491     }
492 
493     sptr<AccessibilityAccountData> accountData = new(std::nothrow) AccessibilityAccountData(accountId);
494     if (!accountData) {
495         return nullptr;
496     }
497 
498     accountDataMap_[accountId] = accountData;
499     return accountData;
500 }
501 
GetAccountData(int32_t accountId)502 sptr<AccessibilityAccountData> AccessibilityAccountDataMap::GetAccountData(
503     int32_t accountId)
504 {
505     auto iter = accountDataMap_.find(accountId);
506     if (iter != accountDataMap_.end()) {
507         return iter->second;
508     }
509 
510     return nullptr;
511 }
512 
RemoveAccountData(int32_t accountId)513 sptr<AccessibilityAccountData> AccessibilityAccountDataMap::RemoveAccountData(
514     int32_t accountId)
515 {
516     sptr<AccessibilityAccountData> accountData = nullptr;
517     auto iter = accountDataMap_.find(accountId);
518     if (iter != accountDataMap_.end()) {
519         accountData = iter->second;
520         accountDataMap_.erase(iter);
521     }
522 
523     return accountData;
524 }
525 
Clear()526 void AccessibilityAccountDataMap::Clear()
527 {
528     accountDataMap_.clear();
529 }
530 
GetAccountType()531 AccountSA::OsAccountType AccessibilityAccountData::GetAccountType()
532 {
533     return AccountSA::OsAccountType::PRIVATE;
534 }
535 } // namespace Accessibility
536 } // namespace OHOS