1 /*
2 * Copyright (C) 2022 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_config_impl.h"
17 #include "hilog_wrapper.h"
18 #include "if_system_ability_manager.h"
19 #include "iservice_registry.h"
20 #include "parameter.h"
21 #include "system_ability_definition.h"
22
23 namespace OHOS {
24 namespace AccessibilityConfig {
25 namespace {
26 const std::string SYSTEM_PARAMETER_AAMS_NAME = "accessibility.config.ready";
27 constexpr int32_t CONFIG_PARAMETER_VALUE_SIZE = 10;
28 } // namespace
29
Impl()30 AccessibilityConfig::Impl::Impl()
31 {}
32
InitializeContext()33 bool AccessibilityConfig::Impl::InitializeContext()
34 {
35 HILOG_DEBUG();
36 std::lock_guard<std::mutex> lock(mutex_);
37 if (isInitialized_) {
38 HILOG_DEBUG("Context has initialized");
39 return true;
40 }
41 isInitialized_ = ConnectToService();
42
43 return isInitialized_;
44 }
45
OnParameterChanged(const char * key,const char * value,void * context)46 void AccessibilityConfig::Impl::OnParameterChanged(const char *key, const char *value, void *context)
47 {
48 HILOG_DEBUG("Parameter key = [%{public}s] value = [%{public}s]", key, value);
49
50 if (!key || std::strcmp(key, SYSTEM_PARAMETER_AAMS_NAME.c_str())) {
51 HILOG_WARN("not accessibility.config.ready callback");
52 return;
53 }
54
55 if (!value || std::strcmp(value, "true")) {
56 HILOG_WARN("accessibility.config.ready value not true");
57 return;
58 }
59
60 if (!context) {
61 HILOG_ERROR("accessibility.config.ready context NULL");
62 return;
63 }
64
65 Impl* implPtr = static_cast<Impl*>(context);
66 (void)implPtr->ConnectToServiceAsync();
67 }
68
ConnectToService()69 bool AccessibilityConfig::Impl::ConnectToService()
70 {
71 char value[CONFIG_PARAMETER_VALUE_SIZE] = "default";
72 int retSysParam = GetParameter(SYSTEM_PARAMETER_AAMS_NAME.c_str(), "false", value, CONFIG_PARAMETER_VALUE_SIZE);
73 if (retSysParam >= 0 && !std::strcmp(value, "true")) {
74 // Accessibility service is ready
75 if (!InitAccessibilityServiceProxy()) {
76 return false;
77 }
78
79 if (!RegisterToService()) {
80 return false;
81 }
82
83 InitConfigValues();
84 } else {
85 HILOG_DEBUG("Start watching accessibility service.");
86 retSysParam = WatchParameter(SYSTEM_PARAMETER_AAMS_NAME.c_str(), &OnParameterChanged, this);
87 if (retSysParam) {
88 HILOG_ERROR("Watch parameter failed, error = %{public}d", retSysParam);
89 return false;
90 }
91 }
92
93 return true;
94 }
95
ConnectToServiceAsync()96 bool AccessibilityConfig::Impl::ConnectToServiceAsync()
97 {
98 HILOG_DEBUG("ConnectToServiceAsync start.");
99 std::lock_guard<std::mutex> lock(mutex_);
100 if (InitAccessibilityServiceProxy()) {
101 (void)RegisterToService();
102 InitConfigValues();
103 return true;
104 } else {
105 HILOG_ERROR("ConnectToServiceAsync fail");
106 return false;
107 }
108 }
109
RegisterToService()110 bool AccessibilityConfig::Impl::RegisterToService()
111 {
112 if (!serviceProxy_) {
113 HILOG_ERROR("Service is not connected");
114 return false;
115 }
116
117 if (captionObserver_ && enableAbilityListsObserver_ && configObserver_) {
118 HILOG_DEBUG("Observers is registered");
119 return true;
120 }
121
122 if (!captionObserver_) {
123 captionObserver_ = new(std::nothrow) AccessibleAbilityManagerCaptionObserverImpl(*this);
124 if (!captionObserver_) {
125 HILOG_ERROR("Create captionObserver_ failed.");
126 return false;
127 }
128 uint32_t ret = serviceProxy_->RegisterCaptionObserver(captionObserver_);
129 if (ret != 0) {
130 HILOG_ERROR("Register captionObserver failed.");
131 return false;
132 }
133 }
134
135 if (!enableAbilityListsObserver_) {
136 enableAbilityListsObserver_ = new(std::nothrow) AccessibilityEnableAbilityListsObserverImpl(*this);
137 if (!enableAbilityListsObserver_) {
138 HILOG_ERROR("Create enableAbilityListsObserver_ failed.");
139 return false;
140 }
141 serviceProxy_->RegisterEnableAbilityListsObserver(enableAbilityListsObserver_);
142 }
143
144 if (!configObserver_) {
145 configObserver_ = new(std::nothrow) AccessibleAbilityManagerConfigObserverImpl(*this);
146 if (!configObserver_) {
147 HILOG_ERROR("Create configObserver_ failed.");
148 return false;
149 }
150 uint32_t ret = serviceProxy_->RegisterConfigObserver(configObserver_);
151 if (ret != 0) {
152 HILOG_ERROR("Register configObserver failed.");
153 return false;
154 }
155 }
156
157 HILOG_DEBUG("RegisterToService succeaddss");
158 return true;
159 }
160
InitAccessibilityServiceProxy()161 bool AccessibilityConfig::Impl::InitAccessibilityServiceProxy()
162 {
163 if (serviceProxy_) {
164 HILOG_DEBUG("Accessibility Service is connected");
165 return true;
166 }
167
168 sptr<ISystemAbilityManager> samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
169 if (!samgr) {
170 HILOG_ERROR("Failed to get ISystemAbilityManager");
171 return false;
172 }
173
174 sptr<IRemoteObject> object = samgr->GetSystemAbility(ACCESSIBILITY_MANAGER_SERVICE_ID);
175 if (!object) {
176 HILOG_ERROR("Get IAccessibleAbilityManagerService object from samgr failed");
177 return false;
178 }
179
180 if (!deathRecipient_) {
181 deathRecipient_ = new(std::nothrow) DeathRecipient(*this);
182 if (!deathRecipient_) {
183 HILOG_ERROR("Create deathRecipient_ fail.");
184 return false;
185 }
186 }
187
188 if ((object->IsProxyObject()) && (!object->AddDeathRecipient(deathRecipient_))) {
189 HILOG_ERROR("Failed to add death recipient");
190 return false;
191 }
192
193 serviceProxy_ = iface_cast<Accessibility::IAccessibleAbilityManagerService>(object);
194 if (!serviceProxy_) {
195 HILOG_ERROR("IAccessibleAbilityManagerService iface_cast failed");
196 return false;
197 }
198
199 HILOG_DEBUG("InitAccessibilityServiceProxy success");
200 return true;
201 }
202
ResetService(const wptr<IRemoteObject> & remote)203 void AccessibilityConfig::Impl::ResetService(const wptr<IRemoteObject> &remote)
204 {
205 HILOG_DEBUG();
206 std::lock_guard<std::mutex> lock(mutex_);
207 if (serviceProxy_) {
208 sptr<IRemoteObject> object = serviceProxy_->AsObject();
209 if (object && (remote == object)) {
210 object->RemoveDeathRecipient(deathRecipient_);
211 serviceProxy_ = nullptr;
212 captionObserver_ = nullptr;
213 enableAbilityListsObserver_ = nullptr;
214 configObserver_ = nullptr;
215 HILOG_DEBUG("Reset OK");
216 }
217 }
218 }
219
EnableAbility(const std::string & name,const uint32_t capabilities)220 Accessibility::RetError AccessibilityConfig::Impl::EnableAbility(const std::string &name, const uint32_t capabilities)
221 {
222 HILOG_INFO("name = [%{private}s] capabilities = [%{private}u]", name.c_str(), capabilities);
223 std::lock_guard<std::mutex> lock(mutex_);
224 if (!serviceProxy_) {
225 HILOG_ERROR("Failed to get accessibility service");
226 return Accessibility::RET_ERR_SAMGR;
227 }
228 return serviceProxy_->EnableAbility(name, capabilities);
229 }
230
DisableAbility(const std::string & name)231 Accessibility::RetError AccessibilityConfig::Impl::DisableAbility(const std::string &name)
232 {
233 HILOG_INFO("name = [%{private}s]", name.c_str());
234 std::lock_guard<std::mutex> lock(mutex_);
235 if (!serviceProxy_) {
236 HILOG_ERROR("Failed to get accessibility service");
237 return Accessibility::RET_ERR_SAMGR;
238 }
239 return serviceProxy_->DisableAbility(name);
240 }
241
GetCaptionsState(bool & state)242 Accessibility::RetError AccessibilityConfig::Impl::GetCaptionsState(bool &state)
243 {
244 std::lock_guard<std::mutex> lock(mutex_);
245 if (!serviceProxy_) {
246 HILOG_ERROR("Failed to get accessibility service");
247 return Accessibility::RET_ERR_SAMGR;
248 }
249 Accessibility::RetError ret = serviceProxy_->GetCaptionState(state);
250 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
251 return ret;
252 }
253
GetCaptionsProperty(CaptionProperty & caption)254 Accessibility::RetError AccessibilityConfig::Impl::GetCaptionsProperty(CaptionProperty &caption)
255 {
256 std::lock_guard<std::mutex> lock(mutex_);
257 if (!serviceProxy_) {
258 HILOG_ERROR("Failed to get accessibility service");
259 return Accessibility::RET_ERR_SAMGR;
260 }
261 Accessibility::RetError ret = serviceProxy_->GetCaptionProperty(caption);
262 HILOG_INFO();
263 return ret;
264 }
265
SetCaptionsProperty(const CaptionProperty & caption)266 Accessibility::RetError AccessibilityConfig::Impl::SetCaptionsProperty(const CaptionProperty& caption)
267 {
268 HILOG_INFO();
269 std::lock_guard<std::mutex> lock(mutex_);
270 if (!serviceProxy_) {
271 HILOG_ERROR("Failed to get accessibility service");
272 return Accessibility::RET_ERR_SAMGR;
273 }
274 return serviceProxy_->SetCaptionProperty(caption);
275 }
276
SetCaptionsState(const bool state)277 Accessibility::RetError AccessibilityConfig::Impl::SetCaptionsState(const bool state)
278 {
279 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
280 std::lock_guard<std::mutex> lock(mutex_);
281 if (!serviceProxy_) {
282 HILOG_ERROR("Failed to get accessibility service");
283 return Accessibility::RET_ERR_SAMGR;
284 }
285 return serviceProxy_->SetCaptionState(state);
286 }
287
NotifyCaptionStateChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const bool state)288 void AccessibilityConfig::Impl::NotifyCaptionStateChanged(
289 const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const bool state)
290 {
291 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
292 for (auto &observer : observers) {
293 if (observer) {
294 ConfigValue configValue;
295 configValue.captionState = state;
296 observer->OnConfigChanged(CONFIG_CAPTION_STATE, configValue);
297 } else {
298 HILOG_ERROR("end configObservers_ is null");
299 }
300 }
301 }
302
NotifyCaptionChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const CaptionProperty & captionProperty)303 void AccessibilityConfig::Impl::NotifyCaptionChanged(
304 const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const CaptionProperty &captionProperty)
305 {
306 HILOG_INFO();
307 for (auto &observer : observers) {
308 if (observer) {
309 ConfigValue configValue;
310 configValue.captionStyle = captionProperty_;
311 observer->OnConfigChanged(CONFIG_CAPTION_STYLE, configValue);
312 } else {
313 HILOG_ERROR("end observers is null");
314 }
315 }
316 }
317
SubscribeConfigObserver(const CONFIG_ID id,const std::shared_ptr<AccessibilityConfigObserver> & observer,const bool retFlag)318 Accessibility::RetError AccessibilityConfig::Impl::SubscribeConfigObserver(const CONFIG_ID id,
319 const std::shared_ptr<AccessibilityConfigObserver> &observer, const bool retFlag)
320 {
321 HILOG_INFO("id = [%{public}d]", static_cast<int32_t>(id));
322 std::lock_guard<std::mutex> lock(mutex_);
323 std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
324 configObservers_.find(id);
325 if (it != configObservers_.end()) {
326 it->second.push_back(observer);
327 HILOG_DEBUG("configObservers->second.size%{public}zu", it->second.size());
328 } else {
329 std::vector<std::shared_ptr<AccessibilityConfigObserver>> ob;
330 ob.push_back(observer);
331 configObservers_.insert(std::make_pair(id, ob));
332 HILOG_DEBUG("configObservers->second.size%{public}zu", ob.size());
333 }
334
335 if (retFlag && observer) {
336 NotifyImmediately(id, observer);
337 }
338 return Accessibility::RET_OK;
339 }
340
UnsubscribeConfigObserver(const CONFIG_ID id,const std::shared_ptr<AccessibilityConfigObserver> & observer)341 Accessibility::RetError AccessibilityConfig::Impl::UnsubscribeConfigObserver(const CONFIG_ID id,
342 const std::shared_ptr<AccessibilityConfigObserver> &observer)
343 {
344 HILOG_INFO("id = [%{public}d]", static_cast<int32_t>(id));
345 std::lock_guard<std::mutex> lock(mutex_);
346 std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
347 configObservers_.find(id);
348 if (it != configObservers_.end()) {
349 for (auto iter = it->second.begin(); iter != it->second.end(); iter++) {
350 if (*iter == observer) {
351 HILOG_DEBUG("erase observer");
352 it->second.erase(iter);
353 HILOG_DEBUG("observer's size is %{public}zu", it->second.size());
354 return Accessibility::RET_OK;
355 }
356 }
357 } else {
358 HILOG_DEBUG("%{public}d has not subscribed ", id);
359 }
360 return Accessibility::RET_OK;
361 }
362
OnAccessibleAbilityManagerCaptionPropertyChanged(const CaptionProperty & property)363 void AccessibilityConfig::Impl::OnAccessibleAbilityManagerCaptionPropertyChanged(const CaptionProperty& property)
364 {
365 HILOG_DEBUG();
366 std::vector<std::shared_ptr<AccessibilityConfigObserver>> observers;
367 {
368 std::lock_guard<std::mutex> lock(mutex_);
369 if (captionProperty_.GetFontScale() == property.GetFontScale() &&
370 captionProperty_.GetFontColor() == property.GetFontColor() &&
371 !strcmp(captionProperty_.GetFontFamily().c_str(), property.GetFontFamily().c_str()) &&
372 !strcmp(captionProperty_.GetFontEdgeType().c_str(), property.GetFontEdgeType().c_str()) &&
373 captionProperty_.GetBackgroundColor() == property.GetBackgroundColor() &&
374 captionProperty_.GetWindowColor() == property.GetWindowColor()) {
375 return;
376 }
377 captionProperty_ = property;
378 std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
379 configObservers_.find(CONFIG_CAPTION_STYLE);
380 if (it == configObservers_.end()) {
381 return;
382 }
383 observers = it->second;
384 }
385
386 NotifyCaptionChanged(observers, property);
387 }
388
SetScreenMagnificationState(const bool state)389 Accessibility::RetError AccessibilityConfig::Impl::SetScreenMagnificationState(const bool state)
390 {
391 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
392 std::lock_guard<std::mutex> lock(mutex_);
393 if (!serviceProxy_) {
394 HILOG_ERROR("Failed to get accessibility service");
395 return Accessibility::RET_ERR_SAMGR;
396 }
397 return serviceProxy_->SetScreenMagnificationState(state);
398 }
399
SetShortKeyState(const bool state)400 Accessibility::RetError AccessibilityConfig::Impl::SetShortKeyState(const bool state)
401 {
402 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
403 std::lock_guard<std::mutex> lock(mutex_);
404 if (!serviceProxy_) {
405 HILOG_ERROR("Failed to get accessibility service");
406 return Accessibility::RET_ERR_SAMGR;
407 }
408 return serviceProxy_->SetShortKeyState(state);
409 }
410
SetMouseKeyState(const bool state)411 Accessibility::RetError AccessibilityConfig::Impl::SetMouseKeyState(const bool state)
412 {
413 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
414 std::lock_guard<std::mutex> lock(mutex_);
415 if (!serviceProxy_) {
416 HILOG_ERROR("Failed to get accessibility service");
417 return Accessibility::RET_ERR_SAMGR;
418 }
419 return serviceProxy_->SetMouseKeyState(state);
420 }
421
GetScreenMagnificationState(bool & state)422 Accessibility::RetError AccessibilityConfig::Impl::GetScreenMagnificationState(bool &state)
423 {
424 std::lock_guard<std::mutex> lock(mutex_);
425 if (!serviceProxy_) {
426 HILOG_ERROR("Failed to get accessibility service");
427 return Accessibility::RET_ERR_SAMGR;
428 }
429
430 Accessibility::RetError ret = serviceProxy_->GetScreenMagnificationState(state);
431 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
432 return ret;
433 }
434
GetShortKeyState(bool & state)435 Accessibility::RetError AccessibilityConfig::Impl::GetShortKeyState(bool &state)
436 {
437 std::lock_guard<std::mutex> lock(mutex_);
438 if (!serviceProxy_) {
439 HILOG_ERROR("Failed to get accessibility service");
440 return Accessibility::RET_ERR_SAMGR;
441 }
442
443 Accessibility::RetError ret = serviceProxy_->GetShortKeyState(state);
444 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
445 return ret;
446 }
447
GetMouseKeyState(bool & state)448 Accessibility::RetError AccessibilityConfig::Impl::GetMouseKeyState(bool &state)
449 {
450 std::lock_guard<std::mutex> lock(mutex_);
451 if (!serviceProxy_) {
452 HILOG_ERROR("Failed to get accessibility service");
453 return Accessibility::RET_ERR_SAMGR;
454 }
455
456 Accessibility::RetError ret = serviceProxy_->GetMouseKeyState(state);
457 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
458 return ret;
459 }
460
UpdateCaptionEnabled(const bool enabled)461 void AccessibilityConfig::Impl::UpdateCaptionEnabled(const bool enabled)
462 {
463 std::vector<std::shared_ptr<AccessibilityConfigObserver>> observers;
464 {
465 std::lock_guard<std::mutex> lock(mutex_);
466 if (captionState_ == enabled) {
467 return;
468 }
469 captionState_ = enabled;
470 std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
471 configObservers_.find(CONFIG_CAPTION_STATE);
472 if (it == configObservers_.end()) {
473 return;
474 }
475 observers = it->second;
476 }
477 NotifyCaptionStateChanged(observers, enabled);
478 }
479
UpdateScreenMagnificationEnabled(const bool enabled)480 void AccessibilityConfig::Impl::UpdateScreenMagnificationEnabled(const bool enabled)
481 {
482 std::vector<std::shared_ptr<AccessibilityConfigObserver>> observers;
483 {
484 std::lock_guard<std::mutex> lock(mutex_);
485 if (screenMagnifier_ == enabled) {
486 return;
487 }
488 screenMagnifier_ = enabled;
489 std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
490 configObservers_.find(CONFIG_SCREEN_MAGNIFICATION);
491 if (it == configObservers_.end()) {
492 return;
493 }
494 observers = it->second;
495 }
496 NotifyScreenMagnificationChanged(observers, enabled);
497 }
498
UpdateShortKeyEnabled(const bool enabled)499 void AccessibilityConfig::Impl::UpdateShortKeyEnabled(const bool enabled)
500 {
501 std::vector<std::shared_ptr<AccessibilityConfigObserver>> observers;
502 {
503 std::lock_guard<std::mutex> lock(mutex_);
504 if (shortkey_ == enabled) {
505 return;
506 }
507 shortkey_ = enabled;
508 std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
509 configObservers_.find(CONFIG_SHORT_KEY);
510 if (it == configObservers_.end()) {
511 return;
512 }
513 observers = it->second;
514 }
515 NotifyShortKeyChanged(observers, enabled);
516 }
517
UpdateMouseKeyEnabled(const bool enabled)518 void AccessibilityConfig::Impl::UpdateMouseKeyEnabled(const bool enabled)
519 {
520 std::vector<std::shared_ptr<AccessibilityConfigObserver>> observers;
521 {
522 std::lock_guard<std::mutex> lock(mutex_);
523 if (mouseKey_ == enabled) {
524 return;
525 }
526 mouseKey_ = enabled;
527 std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
528 configObservers_.find(CONFIG_MOUSE_KEY);
529 if (it == configObservers_.end()) {
530 return;
531 }
532 observers = it->second;
533 }
534 NotifyMouseKeyChanged(observers, enabled);
535 }
536
UpdateAudioMonoEnabled(const bool enabled)537 void AccessibilityConfig::Impl::UpdateAudioMonoEnabled(const bool enabled)
538 {
539 std::vector<std::shared_ptr<AccessibilityConfigObserver>> observers;
540 {
541 std::lock_guard<std::mutex> lock(mutex_);
542 if (audioMono_ == enabled) {
543 return;
544 }
545 audioMono_ = enabled;
546 std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
547 configObservers_.find(CONFIG_AUDIO_MONO);
548 if (it == configObservers_.end()) {
549 return;
550 }
551 observers = it->second;
552 }
553 NotifyAudioMonoChanged(observers, enabled);
554 }
555
UpdateAnimationOffEnabled(const bool enabled)556 void AccessibilityConfig::Impl::UpdateAnimationOffEnabled(const bool enabled)
557 {
558 std::vector<std::shared_ptr<AccessibilityConfigObserver>> observers;
559 {
560 std::lock_guard<std::mutex> lock(mutex_);
561 if (animationOff_ == enabled) {
562 return;
563 }
564 animationOff_ = enabled;
565 std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
566 configObservers_.find(CONFIG_ANIMATION_OFF);
567 if (it == configObservers_.end()) {
568 return;
569 }
570 observers = it->second;
571 }
572
573 NotifyAnimationOffChanged(observers, enabled);
574 }
575
UpdateInvertColorEnabled(const bool enabled)576 void AccessibilityConfig::Impl::UpdateInvertColorEnabled(const bool enabled)
577 {
578 std::vector<std::shared_ptr<AccessibilityConfigObserver>> observers;
579 {
580 std::lock_guard<std::mutex> lock(mutex_);
581 if (invertColor_ == enabled) {
582 return;
583 }
584 invertColor_ = enabled;
585 std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
586 configObservers_.find(CONFIG_INVERT_COLOR);
587 if (it == configObservers_.end()) {
588 return;
589 }
590 observers = it->second;
591 }
592 NotifyInvertColorChanged(observers, enabled);
593 }
594
UpdateHighContrastTextEnabled(const bool enabled)595 void AccessibilityConfig::Impl::UpdateHighContrastTextEnabled(const bool enabled)
596 {
597 HILOG_INFO("enabled = [%{public}s]", enabled ? "True" : "False");
598 std::vector<std::shared_ptr<AccessibilityConfigObserver>> observers;
599 {
600 std::lock_guard<std::mutex> lock(mutex_);
601 if (highContrastText_ == enabled) {
602 return;
603 }
604 highContrastText_ = enabled;
605 std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
606 configObservers_.find(CONFIG_HIGH_CONTRAST_TEXT);
607 if (it == configObservers_.end()) {
608 return;
609 }
610 observers = it->second;
611 }
612 NotifyHighContrastTextChanged(observers, enabled);
613 }
614
NotifyScreenMagnificationChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const bool state)615 void AccessibilityConfig::Impl::NotifyScreenMagnificationChanged(
616 const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const bool state)
617 {
618 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
619 for (auto &observer : observers) {
620 if (observer) {
621 ConfigValue configValue;
622 configValue.screenMagnifier = state;
623 observer->OnConfigChanged(CONFIG_SCREEN_MAGNIFICATION, configValue);
624 } else {
625 HILOG_ERROR("end configObservers_ is null");
626 }
627 }
628 }
629
NotifyShortKeyChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const bool state)630 void AccessibilityConfig::Impl::NotifyShortKeyChanged(
631 const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const bool state)
632 {
633 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
634 for (auto &observer : observers) {
635 if (observer) {
636 ConfigValue configValue;
637 configValue.shortkey = state;
638 observer->OnConfigChanged(CONFIG_SHORT_KEY, configValue);
639 } else {
640 HILOG_ERROR("end configObservers_ is null");
641 }
642 }
643 }
644
NotifyMouseKeyChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const bool state)645 void AccessibilityConfig::Impl::NotifyMouseKeyChanged(
646 const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const bool state)
647 {
648 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
649 for (auto &observer : observers) {
650 if (observer) {
651 ConfigValue configValue;
652 configValue.mouseKey = state;
653 observer->OnConfigChanged(CONFIG_MOUSE_KEY, configValue);
654 } else {
655 HILOG_ERROR("end configObservers_ is null");
656 }
657 }
658 }
659
NotifyInvertColorChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const bool state)660 void AccessibilityConfig::Impl::NotifyInvertColorChanged(
661 const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const bool state)
662 {
663 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
664 for (auto &observer : observers) {
665 if (observer) {
666 ConfigValue configValue;
667 configValue.invertColor = state;
668 observer->OnConfigChanged(CONFIG_INVERT_COLOR, configValue);
669 } else {
670 HILOG_ERROR("end configObservers_ is null");
671 }
672 }
673 }
674
NotifyHighContrastTextChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const bool state)675 void AccessibilityConfig::Impl::NotifyHighContrastTextChanged(
676 const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const bool state)
677 {
678 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
679 for (auto &observer : observers) {
680 if (observer) {
681 ConfigValue configValue;
682 configValue.highContrastText = state;
683 observer->OnConfigChanged(CONFIG_HIGH_CONTRAST_TEXT, configValue);
684 } else {
685 HILOG_ERROR("end configObservers_ is null");
686 }
687 }
688 }
689
NotifyAudioMonoChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const bool state)690 void AccessibilityConfig::Impl::NotifyAudioMonoChanged(
691 const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const bool state)
692 {
693 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
694 for (auto &observer : observers) {
695 if (observer) {
696 ConfigValue configValue;
697 configValue.audioMono = state;
698 observer->OnConfigChanged(CONFIG_AUDIO_MONO, configValue);
699 } else {
700 HILOG_ERROR("end configObservers_ is null");
701 }
702 }
703 }
704
NotifyAnimationOffChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const bool state)705 void AccessibilityConfig::Impl::NotifyAnimationOffChanged(
706 const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const bool state)
707 {
708 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
709 for (auto &observer : observers) {
710 if (observer) {
711 ConfigValue configValue;
712 configValue.animationOff = state;
713 observer->OnConfigChanged(CONFIG_ANIMATION_OFF, configValue);
714 } else {
715 HILOG_ERROR("end configObservers_ is null");
716 }
717 }
718 }
719
SetMouseAutoClick(const int32_t time)720 Accessibility::RetError AccessibilityConfig::Impl::SetMouseAutoClick(const int32_t time)
721 {
722 HILOG_INFO("time = [%{public}d]", time);
723 std::lock_guard<std::mutex> lock(mutex_);
724 if (!serviceProxy_) {
725 HILOG_ERROR("Failed to get accessibility service");
726 return Accessibility::RET_ERR_SAMGR;
727 }
728 return serviceProxy_->SetMouseAutoClick(time);
729 }
730
SetShortkeyTarget(const std::string & name)731 Accessibility::RetError AccessibilityConfig::Impl::SetShortkeyTarget(const std::string& name)
732 {
733 HILOG_INFO("name = [%{public}s]", name.c_str());
734 std::lock_guard<std::mutex> lock(mutex_);
735 if (!serviceProxy_) {
736 HILOG_ERROR("Failed to get accessibility service");
737 return Accessibility::RET_ERR_SAMGR;
738 }
739 return serviceProxy_->SetShortkeyTarget(name);
740 }
741
GetMouseAutoClick(int32_t & time)742 Accessibility::RetError AccessibilityConfig::Impl::GetMouseAutoClick(int32_t &time)
743 {
744 std::lock_guard<std::mutex> lock(mutex_);
745 if (!serviceProxy_) {
746 HILOG_ERROR("Failed to get accessibility service");
747 return Accessibility::RET_ERR_SAMGR;
748 }
749
750 Accessibility::RetError ret = serviceProxy_->GetMouseAutoClick(time);
751 HILOG_INFO("time = [%{public}d]", time);
752 return ret;
753 }
754
GetShortkeyTarget(std::string & name)755 Accessibility::RetError AccessibilityConfig::Impl::GetShortkeyTarget(std::string &name)
756 {
757 std::lock_guard<std::mutex> lock(mutex_);
758 if (!serviceProxy_) {
759 HILOG_ERROR("Failed to get accessibility service");
760 return Accessibility::RET_ERR_SAMGR;
761 }
762
763 Accessibility::RetError ret = serviceProxy_->GetShortkeyTarget(name);
764 HILOG_INFO("name = [%{public}s]", name.c_str());
765 return ret;
766 }
767
NotifyShortkeyTargetChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const std::string & shortkey_target)768 void AccessibilityConfig::Impl::NotifyShortkeyTargetChanged(
769 const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const std::string &shortkey_target)
770 {
771 HILOG_INFO("shortkey_target = [%{public}s]", shortkey_target.c_str());
772 for (auto &observer : observers) {
773 if (observer) {
774 ConfigValue configValue;
775 configValue.shortkey_target = shortkeyTarget_;
776 observer->OnConfigChanged(CONFIG_SHORT_KEY_TARGET, configValue);
777 } else {
778 HILOG_ERROR("end configObservers_ is null");
779 }
780 }
781 }
782
NotifyMouseAutoClickChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const uint32_t mouseAutoClick)783 void AccessibilityConfig::Impl::NotifyMouseAutoClickChanged(
784 const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const uint32_t mouseAutoClick)
785 {
786 HILOG_INFO("mouseAutoClick = [%{public}u]", mouseAutoClick);
787 for (auto &observer : observers) {
788 if (observer) {
789 ConfigValue configValue;
790 configValue.mouseAutoClick = mouseAutoClick_;
791 observer->OnConfigChanged(CONFIG_MOUSE_AUTOCLICK, configValue);
792 } else {
793 HILOG_ERROR("end configObservers_ is null");
794 }
795 }
796 }
797
NotifyAudioBalanceChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const float audioBalance)798 void AccessibilityConfig::Impl::NotifyAudioBalanceChanged(
799 const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const float audioBalance)
800 {
801 HILOG_INFO("audioBalance = [%{public}f]", audioBalance);
802 for (auto &observer : observers) {
803 if (observer) {
804 ConfigValue configValue;
805 configValue.audioBalance = audioBalance;
806 observer->OnConfigChanged(CONFIG_AUDIO_BALANCE, configValue);
807 } else {
808 HILOG_ERROR("end configObservers_ is null");
809 }
810 }
811 }
812
NotifyBrightnessDiscountChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const float brightnessDiscount)813 void AccessibilityConfig::Impl::NotifyBrightnessDiscountChanged(
814 const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const float brightnessDiscount)
815 {
816 HILOG_INFO("brightnessDiscount = [%{public}f]", brightnessDiscount);
817 for (auto &observer : observers) {
818 if (observer) {
819 ConfigValue configValue;
820 configValue.brightnessDiscount = brightnessDiscount;
821 observer->OnConfigChanged(CONFIG_BRIGHTNESS_DISCOUNT, configValue);
822 } else {
823 HILOG_ERROR("end configObservers_ is null");
824 }
825 }
826 }
827
NotifyContentTimeoutChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const uint32_t contentTimeout)828 void AccessibilityConfig::Impl::NotifyContentTimeoutChanged(
829 const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const uint32_t contentTimeout)
830 {
831 HILOG_INFO("contentTimeout = [%{public}u]", contentTimeout);
832 for (auto &observer : observers) {
833 if (observer) {
834 ConfigValue configValue;
835 configValue.contentTimeout = contentTimeout;
836 observer->OnConfigChanged(CONFIG_CONTENT_TIMEOUT, configValue);
837 } else {
838 HILOG_ERROR("end configObservers_ is null");
839 }
840 }
841 }
842
NotifyDaltonizationColorFilterChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const uint32_t daltonizationColorFilter)843 void AccessibilityConfig::Impl::NotifyDaltonizationColorFilterChanged(
844 const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const uint32_t daltonizationColorFilter)
845 {
846 HILOG_INFO("daltonizationColorFilter = [%{public}u]", daltonizationColorFilter);
847 for (auto &observer : observers) {
848 if (observer) {
849 ConfigValue configValue;
850 configValue.daltonizationColorFilter = static_cast<DALTONIZATION_TYPE>(daltonizationColorFilter_);
851 observer->OnConfigChanged(CONFIG_DALTONIZATION_COLOR_FILTER, configValue);
852 } else {
853 HILOG_ERROR("end configObservers_ is null");
854 }
855 }
856 }
857
SetHighContrastTextState(const bool state)858 Accessibility::RetError AccessibilityConfig::Impl::SetHighContrastTextState(const bool state)
859 {
860 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
861 std::lock_guard<std::mutex> lock(mutex_);
862 if (!serviceProxy_) {
863 HILOG_ERROR("Failed to get accessibility service");
864 return Accessibility::RET_ERR_SAMGR;
865 }
866 return serviceProxy_->SetHighContrastTextState(state);
867 }
868
SetInvertColorState(const bool state)869 Accessibility::RetError AccessibilityConfig::Impl::SetInvertColorState(const bool state)
870 {
871 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
872 std::lock_guard<std::mutex> lock(mutex_);
873 if (!serviceProxy_) {
874 HILOG_ERROR("Failed to get accessibility service");
875 return Accessibility::RET_ERR_SAMGR;
876 }
877 return serviceProxy_->SetInvertColorState(state);
878 }
879
SetDaltonizationColorFilter(const DALTONIZATION_TYPE type)880 Accessibility::RetError AccessibilityConfig::Impl::SetDaltonizationColorFilter(const DALTONIZATION_TYPE type)
881 {
882 HILOG_INFO("type = [%{public}u]", static_cast<uint32_t>(type));
883 std::lock_guard<std::mutex> lock(mutex_);
884 if (!serviceProxy_) {
885 HILOG_ERROR("Failed to get accessibility service");
886 return Accessibility::RET_ERR_SAMGR;
887 }
888 return serviceProxy_->SetDaltonizationColorFilter(type);
889 }
890
SetContentTimeout(const uint32_t timer)891 Accessibility::RetError AccessibilityConfig::Impl::SetContentTimeout(const uint32_t timer)
892 {
893 HILOG_INFO("timer = [%{public}u]", timer);
894 std::lock_guard<std::mutex> lock(mutex_);
895 if (!serviceProxy_) {
896 HILOG_ERROR("Failed to get accessibility service");
897 return Accessibility::RET_ERR_SAMGR;
898 }
899 return serviceProxy_->SetContentTimeout(timer);
900 }
901
SetAnimationOffState(const bool state)902 Accessibility::RetError AccessibilityConfig::Impl::SetAnimationOffState(const bool state)
903 {
904 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
905 std::lock_guard<std::mutex> lock(mutex_);
906 if (!serviceProxy_) {
907 HILOG_ERROR("Failed to get accessibility service");
908 return Accessibility::RET_ERR_SAMGR;
909 }
910 return serviceProxy_->SetAnimationOffState(state);
911 }
912
SetBrightnessDiscount(const float brightness)913 Accessibility::RetError AccessibilityConfig::Impl::SetBrightnessDiscount(const float brightness)
914 {
915 HILOG_INFO("brightness = [%{public}f]", brightness);
916 std::lock_guard<std::mutex> lock(mutex_);
917 if (!serviceProxy_) {
918 HILOG_ERROR("Failed to get accessibility service");
919 return Accessibility::RET_ERR_SAMGR;
920 }
921 return serviceProxy_->SetBrightnessDiscount(brightness);
922 }
923
SetAudioMonoState(const bool state)924 Accessibility::RetError AccessibilityConfig::Impl::SetAudioMonoState(const bool state)
925 {
926 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
927 std::lock_guard<std::mutex> lock(mutex_);
928 if (!serviceProxy_) {
929 HILOG_ERROR("Failed to get accessibility service");
930 return Accessibility::RET_ERR_SAMGR;
931 }
932 return serviceProxy_->SetAudioMonoState(state);
933 }
934
SetAudioBalance(const float balance)935 Accessibility::RetError AccessibilityConfig::Impl::SetAudioBalance(const float balance)
936 {
937 HILOG_INFO("balance = [%{public}f]", balance);
938 std::lock_guard<std::mutex> lock(mutex_);
939 if (!serviceProxy_) {
940 HILOG_ERROR("Failed to get accessibility service");
941 return Accessibility::RET_ERR_SAMGR;
942 }
943 return serviceProxy_->SetAudioBalance(balance);
944 }
945
GetInvertColorState(bool & state)946 Accessibility::RetError AccessibilityConfig::Impl::GetInvertColorState(bool &state)
947 {
948 std::lock_guard<std::mutex> lock(mutex_);
949 if (!serviceProxy_) {
950 HILOG_ERROR("Failed to get accessibility service");
951 return Accessibility::RET_ERR_SAMGR;
952 }
953
954 Accessibility::RetError ret = serviceProxy_->GetInvertColorState(state);
955 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
956 return ret;
957 }
958
GetHighContrastTextState(bool & state)959 Accessibility::RetError AccessibilityConfig::Impl::GetHighContrastTextState(bool &state)
960 {
961 std::lock_guard<std::mutex> lock(mutex_);
962 if (!serviceProxy_) {
963 HILOG_ERROR("Failed to get accessibility service");
964 return Accessibility::RET_ERR_SAMGR;
965 }
966
967 Accessibility::RetError ret = serviceProxy_->GetHighContrastTextState(state);
968 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
969 return ret;
970 }
971
GetDaltonizationColorFilter(DALTONIZATION_TYPE & type)972 Accessibility::RetError AccessibilityConfig::Impl::GetDaltonizationColorFilter(DALTONIZATION_TYPE &type)
973 {
974 std::lock_guard<std::mutex> lock(mutex_);
975 if (!serviceProxy_) {
976 HILOG_ERROR("Failed to get accessibility service");
977 return Accessibility::RET_ERR_SAMGR;
978 }
979
980 uint32_t filterType = 0;
981 Accessibility::RetError ret = serviceProxy_->GetDaltonizationColorFilter(filterType);
982 type = static_cast<DALTONIZATION_TYPE>(filterType);
983 HILOG_INFO("type = [%{public}u]", static_cast<uint32_t>(type));
984 return ret;
985 }
986
GetContentTimeout(uint32_t & timer)987 Accessibility::RetError AccessibilityConfig::Impl::GetContentTimeout(uint32_t &timer)
988 {
989 std::lock_guard<std::mutex> lock(mutex_);
990 if (!serviceProxy_) {
991 HILOG_ERROR("Failed to get accessibility service");
992 return Accessibility::RET_ERR_SAMGR;
993 }
994
995 Accessibility::RetError ret = serviceProxy_->GetContentTimeout(timer);
996 HILOG_INFO("timer = [%{public}u]", timer);
997 return ret;
998 }
999
GetAnimationOffState(bool & state)1000 Accessibility::RetError AccessibilityConfig::Impl::GetAnimationOffState(bool &state)
1001 {
1002 std::lock_guard<std::mutex> lock(mutex_);
1003 if (!serviceProxy_) {
1004 HILOG_ERROR("Failed to get accessibility service");
1005 return Accessibility::RET_ERR_SAMGR;
1006 }
1007
1008 Accessibility::RetError ret = serviceProxy_->GetAnimationOffState(state);
1009 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
1010 return ret;
1011 }
1012
GetBrightnessDiscount(float & brightness)1013 Accessibility::RetError AccessibilityConfig::Impl::GetBrightnessDiscount(float &brightness)
1014 {
1015 std::lock_guard<std::mutex> lock(mutex_);
1016 if (!serviceProxy_) {
1017 HILOG_ERROR("Failed to get accessibility service");
1018 return Accessibility::RET_ERR_SAMGR;
1019 }
1020
1021 Accessibility::RetError ret = serviceProxy_->GetBrightnessDiscount(brightness);
1022 HILOG_INFO("brightness = [%{public}f]", brightness);
1023 return ret;
1024 }
1025
GetAudioMonoState(bool & state)1026 Accessibility::RetError AccessibilityConfig::Impl::GetAudioMonoState(bool &state)
1027 {
1028 std::lock_guard<std::mutex> lock(mutex_);
1029 if (!serviceProxy_) {
1030 HILOG_ERROR("Failed to get accessibility service");
1031 return Accessibility::RET_ERR_SAMGR;
1032 }
1033
1034 Accessibility::RetError ret = serviceProxy_->GetAudioMonoState(state);
1035 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
1036 return ret;
1037 }
1038
GetAudioBalance(float & balance)1039 Accessibility::RetError AccessibilityConfig::Impl::GetAudioBalance(float &balance)
1040 {
1041 std::lock_guard<std::mutex> lock(mutex_);
1042 if (!serviceProxy_) {
1043 HILOG_ERROR("Failed to get accessibility service");
1044 return Accessibility::RET_ERR_SAMGR;
1045 }
1046
1047 Accessibility::RetError ret = serviceProxy_->GetAudioBalance(balance);
1048 HILOG_INFO("balance = [%{public}f]", balance);
1049 return ret;
1050 }
1051
SubscribeEnableAbilityListsObserver(const std::shared_ptr<AccessibilityEnableAbilityListsObserver> & observer)1052 Accessibility::RetError AccessibilityConfig::Impl::SubscribeEnableAbilityListsObserver(
1053 const std::shared_ptr<AccessibilityEnableAbilityListsObserver> &observer)
1054 {
1055 HILOG_INFO();
1056 std::lock_guard<std::mutex> lock(mutex_);
1057 if (std::any_of(enableAbilityListsObservers_.begin(), enableAbilityListsObservers_.end(),
1058 [&observer](const std::shared_ptr<AccessibilityEnableAbilityListsObserver> &listObserver) {
1059 return listObserver == observer;
1060 })) {
1061 HILOG_ERROR("the observer is exist");
1062 return Accessibility::RET_OK;
1063 }
1064 enableAbilityListsObservers_.push_back(observer);
1065 HILOG_DEBUG("observer's size is %{public}zu", enableAbilityListsObservers_.size());
1066 return Accessibility::RET_OK;
1067 }
1068
UnsubscribeEnableAbilityListsObserver(const std::shared_ptr<AccessibilityEnableAbilityListsObserver> & observer)1069 Accessibility::RetError AccessibilityConfig::Impl::UnsubscribeEnableAbilityListsObserver(
1070 const std::shared_ptr<AccessibilityEnableAbilityListsObserver> &observer)
1071 {
1072 HILOG_INFO();
1073 std::lock_guard<std::mutex> lock(mutex_);
1074 for (auto iter = enableAbilityListsObservers_.begin(); iter != enableAbilityListsObservers_.end(); iter++) {
1075 if (*iter == observer) {
1076 HILOG_DEBUG("erase observer");
1077 enableAbilityListsObservers_.erase(iter);
1078 HILOG_DEBUG("observer's size is %{public}zu", enableAbilityListsObservers_.size());
1079 return Accessibility::RET_OK;
1080 }
1081 }
1082 return Accessibility::RET_OK;
1083 }
1084
OnAccessibilityEnableAbilityListsChanged()1085 void AccessibilityConfig::Impl::OnAccessibilityEnableAbilityListsChanged()
1086 {
1087 HILOG_DEBUG("observer's size is %{public}zu", enableAbilityListsObservers_.size());
1088 std::vector<std::shared_ptr<AccessibilityEnableAbilityListsObserver>> observers;
1089 {
1090 std::lock_guard<std::mutex> lock(mutex_);
1091 observers = enableAbilityListsObservers_;
1092 }
1093 for (auto &enableAbilityListsObserver : observers) {
1094 enableAbilityListsObserver->OnEnableAbilityListsStateChanged();
1095 }
1096 }
1097
OnAccessibleAbilityManagerConfigStateChanged(const uint32_t stateType)1098 void AccessibilityConfig::Impl::OnAccessibleAbilityManagerConfigStateChanged(const uint32_t stateType)
1099 {
1100 HILOG_DEBUG("stateType = [%{public}u}", stateType);
1101 if (stateType & Accessibility::STATE_CAPTION_ENABLED) {
1102 UpdateCaptionEnabled(true);
1103 } else {
1104 UpdateCaptionEnabled(false);
1105 }
1106
1107 if (stateType & Accessibility::STATE_SCREENMAGNIFIER_ENABLED) {
1108 UpdateScreenMagnificationEnabled(true);
1109 } else {
1110 UpdateScreenMagnificationEnabled(false);
1111 }
1112
1113 if (stateType & Accessibility::STATE_SHORTKEY_ENABLED) {
1114 UpdateShortKeyEnabled(true);
1115 } else {
1116 UpdateShortKeyEnabled(false);
1117 }
1118
1119 if (stateType & Accessibility::STATE_AUDIOMONO_ENABLED) {
1120 UpdateAudioMonoEnabled(true);
1121 } else {
1122 UpdateAudioMonoEnabled(false);
1123 }
1124
1125 if (stateType & Accessibility::STATE_ANIMATIONOFF_ENABLED) {
1126 UpdateAnimationOffEnabled(true);
1127 } else {
1128 UpdateAnimationOffEnabled(false);
1129 }
1130
1131 if (stateType & Accessibility::STATE_INVETRTCOLOR_ENABLED) {
1132 UpdateInvertColorEnabled(true);
1133 } else {
1134 UpdateInvertColorEnabled(false);
1135 }
1136
1137 if (stateType & Accessibility::STATE_HIGHCONTRAST_ENABLED) {
1138 UpdateHighContrastTextEnabled(true);
1139 } else {
1140 UpdateHighContrastTextEnabled(false);
1141 }
1142
1143 if (stateType & Accessibility::STATE_MOUSEKEY_ENABLED) {
1144 UpdateMouseKeyEnabled(true);
1145 } else {
1146 UpdateMouseKeyEnabled(false);
1147 }
1148 }
1149
OnAccessibleAbilityManagerAudioBalanceChanged(const float audioBalance)1150 void AccessibilityConfig::Impl::OnAccessibleAbilityManagerAudioBalanceChanged(const float audioBalance)
1151 {
1152 HILOG_DEBUG("audioBalance = [%{public}f}", audioBalance);
1153 std::vector<std::shared_ptr<AccessibilityConfigObserver>> observers;
1154 {
1155 std::lock_guard<std::mutex> lock(mutex_);
1156 if (audioBalance_ == audioBalance) {
1157 return;
1158 }
1159 audioBalance_ = audioBalance;
1160 std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
1161 configObservers_.find(CONFIG_AUDIO_BALANCE);
1162 if (it == configObservers_.end()) {
1163 return;
1164 }
1165 observers = it->second;
1166 }
1167
1168 NotifyAudioBalanceChanged(observers, audioBalance);
1169 }
1170
OnAccessibleAbilityManagerBrightnessDiscountChanged(const float brightnessDiscount)1171 void AccessibilityConfig::Impl::OnAccessibleAbilityManagerBrightnessDiscountChanged(const float brightnessDiscount)
1172 {
1173 HILOG_DEBUG("brightnessDiscount = [%{public}f}", brightnessDiscount);
1174
1175 std::vector<std::shared_ptr<AccessibilityConfigObserver>> observers;
1176 {
1177 std::lock_guard<std::mutex> lock(mutex_);
1178 if (brightnessDiscount_ == brightnessDiscount) {
1179 return;
1180 }
1181 brightnessDiscount_ = brightnessDiscount;
1182 std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
1183 configObservers_.find(CONFIG_BRIGHTNESS_DISCOUNT);
1184 if (it == configObservers_.end()) {
1185 return;
1186 }
1187 observers = it->second;
1188 }
1189
1190 NotifyBrightnessDiscountChanged(observers, brightnessDiscount);
1191 }
1192
OnAccessibleAbilityManagerContentTimeoutChanged(const uint32_t contentTimeout)1193 void AccessibilityConfig::Impl::OnAccessibleAbilityManagerContentTimeoutChanged(const uint32_t contentTimeout)
1194 {
1195 HILOG_DEBUG("contentTimeout = [%{public}u}", contentTimeout);
1196 std::vector<std::shared_ptr<AccessibilityConfigObserver>> observers;
1197 {
1198 std::lock_guard<std::mutex> lock(mutex_);
1199 if (contentTimeout_ == contentTimeout) {
1200 return;
1201 }
1202 contentTimeout_ = contentTimeout;
1203 std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
1204 configObservers_.find(CONFIG_CONTENT_TIMEOUT);
1205 if (it == configObservers_.end()) {
1206 return;
1207 }
1208 observers = it->second;
1209 }
1210
1211 NotifyContentTimeoutChanged(observers, contentTimeout);
1212 }
1213
OnAccessibleAbilityManagerDaltonizationColorFilterChanged(const uint32_t filterType)1214 void AccessibilityConfig::Impl::OnAccessibleAbilityManagerDaltonizationColorFilterChanged(const uint32_t filterType)
1215 {
1216 HILOG_DEBUG("filterType = [%{public}u}", filterType);
1217 std::vector<std::shared_ptr<AccessibilityConfigObserver>> observers;
1218 {
1219 std::lock_guard<std::mutex> lock(mutex_);
1220 if (daltonizationColorFilter_ == filterType) {
1221 HILOG_DEBUG("filterType[%{public}u]", daltonizationColorFilter_);
1222 return;
1223 }
1224 daltonizationColorFilter_ = filterType;
1225 std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
1226 configObservers_.find(CONFIG_DALTONIZATION_COLOR_FILTER);
1227 if (it == configObservers_.end()) {
1228 return;
1229 }
1230 observers = it->second;
1231 }
1232
1233 NotifyDaltonizationColorFilterChanged(observers, filterType);
1234 }
1235
OnAccessibleAbilityManagerMouseAutoClickChanged(const int32_t mouseAutoClick)1236 void AccessibilityConfig::Impl::OnAccessibleAbilityManagerMouseAutoClickChanged(const int32_t mouseAutoClick)
1237 {
1238 HILOG_DEBUG("mouseAutoClick = [%{public}d}", mouseAutoClick);
1239 std::vector<std::shared_ptr<AccessibilityConfigObserver>> observers;
1240 {
1241 std::lock_guard<std::mutex> lock(mutex_);
1242 if (mouseAutoClick_ == mouseAutoClick) {
1243 return;
1244 }
1245 mouseAutoClick_ = mouseAutoClick;
1246 std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
1247 configObservers_.find(CONFIG_MOUSE_AUTOCLICK);
1248 if (it == configObservers_.end()) {
1249 return;
1250 }
1251 observers = it->second;
1252 }
1253
1254 NotifyMouseAutoClickChanged(observers, mouseAutoClick);
1255 }
1256
OnAccessibleAbilityManagerShortkeyTargetChanged(const std::string & shortkeyTarget)1257 void AccessibilityConfig::Impl::OnAccessibleAbilityManagerShortkeyTargetChanged(const std::string &shortkeyTarget)
1258 {
1259 HILOG_DEBUG("shortkeyTarget = [%{public}s}", shortkeyTarget.c_str());
1260 std::vector<std::shared_ptr<AccessibilityConfigObserver>> observers;
1261 {
1262 std::lock_guard<std::mutex> lock(mutex_);
1263 if (shortkeyTarget_.length() > 0 && shortkeyTarget.length() > 0 &&
1264 !std::strcmp(shortkeyTarget_.c_str(), shortkeyTarget.c_str())) {
1265 return;
1266 }
1267 shortkeyTarget_ = shortkeyTarget;
1268 std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
1269 configObservers_.find(CONFIG_SHORT_KEY_TARGET);
1270 if (it == configObservers_.end()) {
1271 return;
1272 }
1273 observers = it->second;
1274 }
1275
1276 NotifyShortkeyTargetChanged(observers, shortkeyTarget);
1277 }
1278
NotifyImmediately(const CONFIG_ID id,const std::shared_ptr<AccessibilityConfigObserver> & observer)1279 void AccessibilityConfig::Impl::NotifyImmediately(const CONFIG_ID id,
1280 const std::shared_ptr<AccessibilityConfigObserver> &observer)
1281 {
1282 HILOG_DEBUG("NotifyImmediately start.");
1283 ConfigValue configValue;
1284 {
1285 configValue.highContrastText = highContrastText_;
1286 configValue.invertColor = invertColor_;
1287 configValue.animationOff = animationOff_;
1288 configValue.screenMagnifier = screenMagnifier_;
1289 configValue.audioMono = audioMono_;
1290 configValue.mouseKey = mouseKey_;
1291 configValue.shortkey = shortkey_;
1292 configValue.captionState = captionState_;
1293 configValue.contentTimeout = contentTimeout_;
1294 configValue.mouseAutoClick = mouseAutoClick_;
1295 configValue.audioBalance = audioBalance_;
1296 configValue.brightnessDiscount = brightnessDiscount_;
1297 configValue.daltonizationColorFilter = static_cast<DALTONIZATION_TYPE>(daltonizationColorFilter_);
1298 configValue.shortkey_target = shortkeyTarget_;
1299 configValue.captionStyle = captionProperty_;
1300 }
1301 observer->OnConfigChanged(id, configValue);
1302 }
1303
InitConfigValues()1304 void AccessibilityConfig::Impl::InitConfigValues()
1305 {
1306 Accessibility::AccessibilityConfigData configData;
1307 serviceProxy_->GetAllConfigs(configData);
1308 highContrastText_ = configData.highContrastText_;
1309 invertColor_ = configData.invertColor_;
1310 animationOff_ = configData.animationOff_;
1311 audioMono_ = configData.audioMono_;
1312 mouseKey_ = configData.mouseKey_;
1313 captionState_ = configData.captionState_;
1314 screenMagnifier_ = configData.screenMagnifier_;
1315 shortkey_ = configData.shortkey_;
1316 mouseAutoClick_ = configData.mouseAutoClick_;
1317 daltonizationColorFilter_ = configData.daltonizationColorFilter_;
1318 contentTimeout_ = configData.contentTimeout_;
1319 brightnessDiscount_ = configData.brightnessDiscount_;
1320 audioBalance_ = configData.audioBalance_;
1321 shortkeyTarget_ = configData.shortkeyTarget_;
1322 captionProperty_ = configData.captionProperty_;
1323 NotifyDefaultConfigs();
1324 HILOG_DEBUG("ConnectToService Success");
1325 }
1326
NotifyDefaultConfigs()1327 void AccessibilityConfig::Impl::NotifyDefaultConfigs()
1328 {
1329 std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
1330 configObservers_.find(CONFIG_HIGH_CONTRAST_TEXT);
1331 if (it != configObservers_.end()) {
1332 NotifyHighContrastTextChanged(it->second, highContrastText_);
1333 }
1334 if ((it = configObservers_.find(CONFIG_INVERT_COLOR)) != configObservers_.end()) {
1335 NotifyInvertColorChanged(it->second, invertColor_);
1336 }
1337 if ((it = configObservers_.find(CONFIG_DALTONIZATION_COLOR_FILTER)) != configObservers_.end()) {
1338 NotifyDaltonizationColorFilterChanged(it->second, daltonizationColorFilter_);
1339 }
1340 if ((it = configObservers_.find(CONFIG_CONTENT_TIMEOUT)) != configObservers_.end()) {
1341 NotifyContentTimeoutChanged(it->second, contentTimeout_);
1342 }
1343 if ((it = configObservers_.find(CONFIG_ANIMATION_OFF)) != configObservers_.end()) {
1344 NotifyAnimationOffChanged(it->second, animationOff_);
1345 }
1346 if ((it = configObservers_.find(CONFIG_BRIGHTNESS_DISCOUNT)) != configObservers_.end()) {
1347 NotifyBrightnessDiscountChanged(it->second, brightnessDiscount_);
1348 }
1349 if ((it = configObservers_.find(CONFIG_AUDIO_MONO)) != configObservers_.end()) {
1350 NotifyAudioMonoChanged(it->second, audioMono_);
1351 }
1352 if ((it = configObservers_.find(CONFIG_AUDIO_BALANCE)) != configObservers_.end()) {
1353 NotifyAudioBalanceChanged(it->second, audioBalance_);
1354 }
1355 if ((it = configObservers_.find(CONFIG_MOUSE_KEY)) != configObservers_.end()) {
1356 NotifyMouseKeyChanged(it->second, mouseKey_);
1357 }
1358 if ((it = configObservers_.find(CONFIG_SHORT_KEY)) != configObservers_.end()) {
1359 NotifyShortKeyChanged(it->second, shortkey_);
1360 }
1361 if ((it = configObservers_.find(CONFIG_CAPTION_STATE)) != configObservers_.end()) {
1362 NotifyCaptionStateChanged(it->second, captionState_);
1363 }
1364 if ((it = configObservers_.find(CONFIG_CAPTION_STYLE)) != configObservers_.end()) {
1365 NotifyCaptionChanged(it->second, captionProperty_);
1366 }
1367 if ((it = configObservers_.find(CONFIG_SCREEN_MAGNIFICATION)) != configObservers_.end()) {
1368 NotifyScreenMagnificationChanged(it->second, screenMagnifier_);
1369 }
1370 if ((it = configObservers_.find(CONFIG_SHORT_KEY_TARGET)) != configObservers_.end()) {
1371 NotifyShortkeyTargetChanged(it->second, shortkeyTarget_);
1372 }
1373 if ((it = configObservers_.find(CONFIG_MOUSE_AUTOCLICK)) != configObservers_.end()) {
1374 NotifyMouseAutoClickChanged(it->second, mouseAutoClick_);
1375 }
1376 }
1377
1378 } // namespace AccessibilityConfig
1379 } // namespace OHOS