• 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     for (auto itr = connectedA11yAbilities_.begin(); itr != connectedA11yAbilities_.end(); itr++) {
53         itr->second->Disconnect();
54     }
55 
56     // Clear all abilities.
57     connectedA11yAbilities_.clear();
58     connectingA11yAbilities_.clear();
59     enabledAbilities_.clear();
60     installedAbilities_.clear();
61 
62     // Clear Setting State.
63     isEventTouchGuideState_ = false;
64     isScreenMagnification_ = false;
65     isFilteringKeyEvents_ = false;
66     isGesturesSimulation_ = false;
67 }
68 
69 // add connect ability.
AddConnectedAbility(sptr<AccessibleAbilityConnection> & connection)70 void AccessibilityAccountData::AddConnectedAbility(sptr<AccessibleAbilityConnection>& connection)
71 {
72     std::string uri = Utils::GetUri(connection->GetElementName());
73     HILOG_DEBUG("URI is %{public}s", uri.c_str());
74     if (!connectedA11yAbilities_.count(uri)) {
75         connectedA11yAbilities_.insert(make_pair(uri, connection));
76     }
77 
78     HILOG_DEBUG("Add ConnectedAbility: %{public}zu", connectedA11yAbilities_.size());
79 }
80 
81 // remove connect ability.
RemoveConnectedAbility(const AppExecFwk::ElementName & element)82 void AccessibilityAccountData::RemoveConnectedAbility(const AppExecFwk::ElementName &element)
83 {
84     std::map<std::string, sptr<AccessibleAbilityConnection>>::iterator it =
85         connectedA11yAbilities_.find(Utils::GetUri(element));
86     if (it != connectedA11yAbilities_.end()) {
87         connectedA11yAbilities_.erase(it);
88     }
89     HILOG_INFO("Remove ConnectedAbility: %{public}zu", connectedA11yAbilities_.size());
90 }
91 
AddCaptionPropertyCallback(const sptr<IAccessibleAbilityManagerCaptionObserver> & callback)92 void AccessibilityAccountData::AddCaptionPropertyCallback(
93     const sptr<IAccessibleAbilityManagerCaptionObserver>& callback)
94 {
95     (void)callback;
96 }
97 
RemoveCaptionPropertyCallback(const wptr<IRemoteObject> & callback)98 void AccessibilityAccountData::RemoveCaptionPropertyCallback(const wptr<IRemoteObject>& callback)
99 {
100     (void)callback;
101     HILOG_DEBUG("start.");
102 }
103 // add AccessibilityInteractionConnection
AddAccessibilityWindowConnection(const int32_t windowId,const sptr<AccessibilityWindowConnection> & interactionConnection)104 void AccessibilityAccountData::AddAccessibilityWindowConnection(
105     const int32_t windowId, const sptr<AccessibilityWindowConnection>& interactionConnection)
106 {
107     HILOG_DEBUG("windowId(%{public}d)", windowId);
108     if (!asacConnections_.count(windowId)) {
109         asacConnections_.insert(std::make_pair(windowId, interactionConnection));
110     }
111 }
112 
113 // remove AccessibilityWindowConnection
RemoveAccessibilityWindowConnection(const int32_t windowId)114 void AccessibilityAccountData::RemoveAccessibilityWindowConnection(const int32_t windowId)
115 {
116     HILOG_DEBUG("windowId(%{public}d)", windowId);
117     auto iter = asacConnections_.find(windowId);
118     if (iter != asacConnections_.end()) {
119         asacConnections_.erase(iter);
120     }
121 }
122 
AddConnectingA11yAbility(const std::string & uri,const sptr<AccessibleAbilityConnection> & connection)123 void AccessibilityAccountData::AddConnectingA11yAbility(const std::string &uri,
124     const sptr<AccessibleAbilityConnection> &connection)
125 {
126     auto iter = connectingA11yAbilities_.find(uri);
127     if (iter != connectingA11yAbilities_.end()) {
128         HILOG_ERROR("The ability is already connecting, and it's uri is %{public}s", uri.c_str());
129         return;
130     }
131     connectingA11yAbilities_[uri] = connection;
132 }
133 
RemoveConnectingA11yAbility(const std::string & uri)134 void AccessibilityAccountData::RemoveConnectingA11yAbility(const std::string &uri)
135 {
136     auto iter = connectingA11yAbilities_.find(uri);
137     if (iter != connectingA11yAbilities_.end()) {
138         connectingA11yAbilities_.erase(iter);
139         return;
140     }
141 }
142 
143 // For UT
AddEnabledAbility(const std::string & bundleName)144 void AccessibilityAccountData::AddEnabledAbility(const std::string& bundleName)
145 {
146     HILOG_DEBUG("start.");
147     if (std::any_of(enabledAbilities_.begin(), enabledAbilities_.end(),
148         [bundleName](const std::string &enabledAbility) {
149             return enabledAbility == bundleName;
150         })) {
151         HILOG_ERROR("The ability is already enabled, and it's bundle name is %{public}s", bundleName.c_str());
152         return;
153     }
154     enabledAbilities_.push_back(bundleName);
155     HILOG_DEBUG("Add EnabledAbility: %{public}zu", enabledAbilities_.size());
156 }
157 
RemoveEnabledAbility(const std::string & name)158 RetError AccessibilityAccountData::RemoveEnabledAbility(const std::string &name)
159 {
160     HILOG_DEBUG("start");
161     for (auto it = enabledAbilities_.begin(); it != enabledAbilities_.end(); it++) {
162         if (*it == name) {
163             HILOG_DEBUG("Removed %{public}s from EnabledAbility: ", name.c_str());
164             enabledAbilities_.erase(it);
165             HILOG_DEBUG("EnabledAbility size(%{public}zu)", enabledAbilities_.size());
166             return RET_OK;
167         }
168     }
169     HILOG_ERROR("The ability(%{public}s) is not enabled.", name.c_str());
170     return RET_ERR_NOT_ENABLED;
171 }
172 
173 // For UT
AddInstalledAbility(AccessibilityAbilityInfo & abilityInfo)174 void AccessibilityAccountData::AddInstalledAbility(AccessibilityAbilityInfo& abilityInfo)
175 {
176     (void)abilityInfo;
177 }
178 
RemoveInstalledAbility(const std::string & bundleName)179 void AccessibilityAccountData::RemoveInstalledAbility(const std::string &bundleName)
180 {
181     (void)bundleName;
182 }
183 
ClearInstalledAbility()184 void AccessibilityAccountData::ClearInstalledAbility()
185 {}
186 
GetAccessibleAbilityConnection(const std::string & elementName)187 const sptr<AccessibleAbilityConnection> AccessibilityAccountData::GetAccessibleAbilityConnection(
188     const std::string &elementName)
189 {
190     (void)elementName;
191     return nullptr;
192 }
193 
GetAccessibilityWindowConnection(const int32_t windowId)194 const sptr<AccessibilityWindowConnection> AccessibilityAccountData::GetAccessibilityWindowConnection(
195     const int32_t windowId)
196 {
197     if (asacConnections_.count(windowId) > 0) {
198         return asacConnections_[windowId];
199     }
200     return nullptr;
201 }
202 
GetConnectedA11yAbilities()203 const std::map<std::string, sptr<AccessibleAbilityConnection>> AccessibilityAccountData::GetConnectedA11yAbilities()
204 {
205     HILOG_DEBUG("start.");
206     return connectedA11yAbilities_;
207 }
208 
GetAsacConnections()209 const std::map<int32_t, sptr<AccessibilityWindowConnection>> AccessibilityAccountData::GetAsacConnections()
210 {
211     HILOG_DEBUG("start.");
212     return asacConnections_;
213 }
214 
GetCaptionPropertyCallbacks()215 const CaptionPropertyCallbacks AccessibilityAccountData::GetCaptionPropertyCallbacks()
216 {
217     HILOG_DEBUG("start.");
218     return captionPropertyCallbacks_;
219 }
220 
GetConnectingA11yAbility(const std::string & uri)221 sptr<AccessibleAbilityConnection> AccessibilityAccountData::GetConnectingA11yAbility(const std::string &uri)
222 {
223     auto iter = connectingA11yAbilities_.find(uri);
224     if (iter != connectingA11yAbilities_.end()) {
225         return iter->second;
226     }
227     return nullptr;
228 }
229 
GetEnabledAbilities()230 const std::vector<std::string>& AccessibilityAccountData::GetEnabledAbilities()
231 {
232     HILOG_DEBUG("enabledAbilities_ size is (%{public}zu).", enabledAbilities_.size());
233     for (auto& ability : enabledAbilities_) {
234         HILOG_DEBUG("bundleName = %{public}s ", ability.c_str());
235     }
236     return enabledAbilities_;
237 }
238 
GetInstalledAbilities() const239 const std::vector<AccessibilityAbilityInfo> &AccessibilityAccountData::GetInstalledAbilities() const
240 {
241     HILOG_DEBUG("start.");
242     return installedAbilities_;
243 }
244 
GetAbilitiesByState(AbilityStateType state,std::vector<AccessibilityAbilityInfo> & abilities) const245 void AccessibilityAccountData::GetAbilitiesByState(
246     AbilityStateType state, std::vector<AccessibilityAbilityInfo> &abilities) const
247 {
248     (void)state;
249     (void)abilities;
250 }
251 
UpdateAccountCapabilities()252 void AccessibilityAccountData::UpdateAccountCapabilities()
253 {}
254 
UpdateEventTouchGuideCapability()255 void AccessibilityAccountData::UpdateEventTouchGuideCapability()
256 {}
257 
UpdateGesturesSimulationCapability()258 void AccessibilityAccountData::UpdateGesturesSimulationCapability()
259 {}
260 
UpdateFilteringKeyEventsCapability()261 void AccessibilityAccountData::UpdateFilteringKeyEventsCapability()
262 {
263     isFilteringKeyEvents_ = false;
264 }
265 
UpdateMagnificationCapability()266 void AccessibilityAccountData::UpdateMagnificationCapability()
267 {
268     isScreenMagnification_ = false;
269 }
270 
EnableAbility(const std::string & name,const uint32_t capabilities)271 RetError AccessibilityAccountData::EnableAbility(const std::string &name, const uint32_t capabilities)
272 {
273     HILOG_DEBUG("start.");
274     if (std::any_of(enabledAbilities_.begin(), enabledAbilities_.end(),
275         [name](const std::string &enabledAbility) {
276             return enabledAbility == name;
277         })) {
278         HILOG_ERROR("The ability[%{public}s] is already enabled", name.c_str());
279         return RET_ERR_CONNECTION_EXIST;
280     }
281     enabledAbilities_.push_back(name);
282     return RET_OK;
283 }
284 
GetInstalledAbilitiesFromBMS()285 bool AccessibilityAccountData::GetInstalledAbilitiesFromBMS()
286 {
287     HILOG_DEBUG("start.");
288     return true;
289 }
290 
Init()291 void AccessibilityAccountData::Init()
292 {
293     HILOG_DEBUG("start.");
294     if (!config_) {
295         config_ = std::make_shared<AccessibilitySettingsConfig>(id_);
296     }
297 }
298 
AddEnableAbilityListsObserver(const sptr<IAccessibilityEnableAbilityListsObserver> & observer)299 void AccessibilityAccountData::AddEnableAbilityListsObserver(
300     const sptr<IAccessibilityEnableAbilityListsObserver>& observer)
301 {
302     (void)observer;
303 }
304 
RemoveEnableAbilityListsObserver(const wptr<IRemoteObject> & observer)305 void AccessibilityAccountData::RemoveEnableAbilityListsObserver(const wptr<IRemoteObject>& observer)
306 {
307     (void)observer;
308 }
309 
AddConfigCallback(const sptr<IAccessibleAbilityManagerConfigObserver> & callback)310 void AccessibilityAccountData::AddConfigCallback(
311     const sptr<IAccessibleAbilityManagerConfigObserver>& callback)
312 {
313     HILOG_DEBUG("start.");
314     configCallbacks_.push_back(callback);
315 }
316 
GetConfigCallbacks() const317 const std::vector<sptr<IAccessibleAbilityManagerConfigObserver>> &AccessibilityAccountData::GetConfigCallbacks() const
318 {
319     HILOG_DEBUG("start.");
320     return configCallbacks_;
321 }
322 
SetConfigCallbacks(std::vector<sptr<IAccessibleAbilityManagerConfigObserver>> & observer)323 void AccessibilityAccountData::SetConfigCallbacks(std::vector<sptr<IAccessibleAbilityManagerConfigObserver>>& observer)
324 {
325     HILOG_DEBUG("start.");
326     configCallbacks_ = observer;
327 }
328 
RemoveConfigCallback(const wptr<IRemoteObject> & callback)329 void AccessibilityAccountData::RemoveConfigCallback(const wptr<IRemoteObject>& callback)
330 {
331     HILOG_DEBUG("start.");
332     for (auto itr = configCallbacks_.begin(); itr != configCallbacks_.end(); itr++) {
333         if ((*itr)->AsObject() == callback) {
334             configCallbacks_.erase(itr);
335             break;
336         }
337     }
338 }
339 
GetConfig()340 std::shared_ptr<AccessibilitySettingsConfig> AccessibilityAccountData::GetConfig()
341 {
342     HILOG_DEBUG("start.");
343     return config_;
344 }
345 
GetImportantEnabledAbilities(std::map<std::string,uint32_t> & importantEnabledAbilities) const346 void AccessibilityAccountData::GetImportantEnabledAbilities(
347     std::map<std::string, uint32_t> &importantEnabledAbilities) const
348 {
349     HILOG_DEBUG();
350     (void)importantEnabledAbilities;
351 }
352 
UpdateImportantEnabledAbilities(std::map<std::string,uint32_t> & importantEnabledAbilities)353 void AccessibilityAccountData::UpdateImportantEnabledAbilities(
354     std::map<std::string, uint32_t> &importantEnabledAbilities)
355 {
356     HILOG_DEBUG();
357     (void)importantEnabledAbilities;
358 }
359 
GetInputFilterFlag() const360 uint32_t AccessibilityAccountData::GetInputFilterFlag() const
361 {
362     return 0;
363 }
364 
UpdateAbilities()365 void AccessibilityAccountData::UpdateAbilities()
366 {
367 }
368 
AddUITestClient(const sptr<IRemoteObject> & obj,const std::string & bundleName,const std::string & abilityName)369 void AccessibilityAccountData::AddUITestClient(const sptr<IRemoteObject> &obj,
370     const std::string &bundleName, const std::string &abilityName)
371 {
372     (void)obj;
373     (void)bundleName;
374     (void)abilityName;
375 }
376 
RemoveUITestClient(sptr<AccessibleAbilityConnection> & connection,const std::string & bundleName)377 void AccessibilityAccountData::RemoveUITestClient(
378     sptr<AccessibleAbilityConnection> &connection, const std::string &bundleName)
379 {
380     (void)connection;
381     (void)bundleName;
382 }
383 } // namespace Accessibility
384 } // namespace OHOS