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
UpdateDaltonizationStateEnabled(const bool enabled)615 void AccessibilityConfig::Impl::UpdateDaltonizationStateEnabled(const bool enabled)
616 {
617 HILOG_INFO("enabled = [%{public}s]", enabled ? "True" : "False");
618 std::vector<std::shared_ptr<AccessibilityConfigObserver>> observers;
619 {
620 std::lock_guard<std::mutex> lock(mutex_);
621 if (daltonizationState_ == enabled) {
622 return;
623 }
624 daltonizationState_ = enabled;
625 std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
626 configObservers_.find(CONFIG_DALTONIZATION_COLOR_FILTER);
627 if (it == configObservers_.end()) {
628 return;
629 }
630 observers = it->second;
631 }
632 NotifyDaltonizationStateChanged(observers, enabled);
633 if (!enabled) {
634 HILOG_DEBUG();
635 NotifyDaltonizationColorFilterChanged(observers, Normal);
636 } else {
637 HILOG_DEBUG();
638 NotifyDaltonizationColorFilterChanged(observers, daltonizationColorFilter_);
639 }
640 }
641
UpdateIgnoreRepeatClickStateEnabled(const bool enabled)642 void AccessibilityConfig::Impl::UpdateIgnoreRepeatClickStateEnabled(const bool enabled)
643 {
644 std::vector<std::shared_ptr<AccessibilityConfigObserver>> observers;
645 {
646 std::lock_guard<std::mutex> lock(mutex_);
647 if (ignoreRepeatClickState_ == enabled) {
648 return;
649 }
650 ignoreRepeatClickState_ = enabled;
651 std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
652 configObservers_.find(CONFIG_IGNORE_REPEAT_CLICK_STATE);
653 if (it == configObservers_.end()) {
654 return;
655 }
656 observers = it->second;
657 }
658 NotifyIgnoreRepeatClickStateChanged(observers, enabled);
659 }
660
NotifyScreenMagnificationChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const bool state)661 void AccessibilityConfig::Impl::NotifyScreenMagnificationChanged(
662 const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const bool state)
663 {
664 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
665 for (auto &observer : observers) {
666 if (observer) {
667 ConfigValue configValue;
668 configValue.screenMagnifier = state;
669 observer->OnConfigChanged(CONFIG_SCREEN_MAGNIFICATION, configValue);
670 } else {
671 HILOG_ERROR("end configObservers_ is null");
672 }
673 }
674 }
675
NotifyShortKeyChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const bool state)676 void AccessibilityConfig::Impl::NotifyShortKeyChanged(
677 const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const bool state)
678 {
679 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
680 for (auto &observer : observers) {
681 if (observer) {
682 ConfigValue configValue;
683 configValue.shortkey = state;
684 observer->OnConfigChanged(CONFIG_SHORT_KEY, configValue);
685 } else {
686 HILOG_ERROR("end configObservers_ is null");
687 }
688 }
689 }
690
NotifyMouseKeyChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const bool state)691 void AccessibilityConfig::Impl::NotifyMouseKeyChanged(
692 const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const bool state)
693 {
694 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
695 for (auto &observer : observers) {
696 if (observer) {
697 ConfigValue configValue;
698 configValue.mouseKey = state;
699 observer->OnConfigChanged(CONFIG_MOUSE_KEY, configValue);
700 } else {
701 HILOG_ERROR("end configObservers_ is null");
702 }
703 }
704 }
705
NotifyInvertColorChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const bool state)706 void AccessibilityConfig::Impl::NotifyInvertColorChanged(
707 const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const bool state)
708 {
709 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
710 for (auto &observer : observers) {
711 if (observer) {
712 ConfigValue configValue;
713 configValue.invertColor = state;
714 observer->OnConfigChanged(CONFIG_INVERT_COLOR, configValue);
715 } else {
716 HILOG_ERROR("end configObservers_ is null");
717 }
718 }
719 }
720
NotifyHighContrastTextChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const bool state)721 void AccessibilityConfig::Impl::NotifyHighContrastTextChanged(
722 const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const bool state)
723 {
724 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
725 for (auto &observer : observers) {
726 if (observer) {
727 ConfigValue configValue;
728 configValue.highContrastText = state;
729 observer->OnConfigChanged(CONFIG_HIGH_CONTRAST_TEXT, configValue);
730 } else {
731 HILOG_ERROR("end configObservers_ is null");
732 }
733 }
734 }
735
NotifyDaltonizationStateChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const bool state)736 void AccessibilityConfig::Impl::NotifyDaltonizationStateChanged(
737 const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const bool state)
738 {
739 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
740 for (auto &observer : observers) {
741 if (observer) {
742 ConfigValue configValue;
743 configValue.daltonizationState = state;
744 observer->OnConfigChanged(CONFIG_DALTONIZATION_STATE, configValue);
745 } else {
746 HILOG_ERROR("end configObservers_ is null");
747 }
748 }
749 }
750
NotifyAudioMonoChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const bool state)751 void AccessibilityConfig::Impl::NotifyAudioMonoChanged(
752 const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const bool state)
753 {
754 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
755 for (auto &observer : observers) {
756 if (observer) {
757 ConfigValue configValue;
758 configValue.audioMono = state;
759 observer->OnConfigChanged(CONFIG_AUDIO_MONO, configValue);
760 } else {
761 HILOG_ERROR("end configObservers_ is null");
762 }
763 }
764 }
765
NotifyAnimationOffChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const bool state)766 void AccessibilityConfig::Impl::NotifyAnimationOffChanged(
767 const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const bool state)
768 {
769 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
770 for (auto &observer : observers) {
771 if (observer) {
772 ConfigValue configValue;
773 configValue.animationOff = state;
774 observer->OnConfigChanged(CONFIG_ANIMATION_OFF, configValue);
775 } else {
776 HILOG_ERROR("end configObservers_ is null");
777 }
778 }
779 }
780
SetMouseAutoClick(const int32_t time)781 Accessibility::RetError AccessibilityConfig::Impl::SetMouseAutoClick(const int32_t time)
782 {
783 HILOG_INFO("time = [%{public}d]", time);
784 std::lock_guard<std::mutex> lock(mutex_);
785 if (!serviceProxy_) {
786 HILOG_ERROR("Failed to get accessibility service");
787 return Accessibility::RET_ERR_SAMGR;
788 }
789 return serviceProxy_->SetMouseAutoClick(time);
790 }
791
SetShortkeyTarget(const std::string & name)792 Accessibility::RetError AccessibilityConfig::Impl::SetShortkeyTarget(const std::string& name)
793 {
794 HILOG_INFO("name = [%{public}s]", name.c_str());
795 std::lock_guard<std::mutex> lock(mutex_);
796 if (!serviceProxy_) {
797 HILOG_ERROR("Failed to get accessibility service");
798 return Accessibility::RET_ERR_SAMGR;
799 }
800 return serviceProxy_->SetShortkeyTarget(name);
801 }
802
SetShortkeyMultiTarget(const std::vector<std::string> & name)803 Accessibility::RetError AccessibilityConfig::Impl::SetShortkeyMultiTarget(const std::vector<std::string>& name)
804 {
805 HILOG_INFO("start");
806 std::lock_guard<std::mutex> lock(mutex_);
807 if (!serviceProxy_) {
808 HILOG_ERROR("Failed to get accessibility service");
809 return Accessibility::RET_ERR_SAMGR;
810 }
811 return serviceProxy_->SetShortkeyMultiTarget(name);
812 }
813
GetMouseAutoClick(int32_t & time)814 Accessibility::RetError AccessibilityConfig::Impl::GetMouseAutoClick(int32_t &time)
815 {
816 std::lock_guard<std::mutex> lock(mutex_);
817 if (!serviceProxy_) {
818 HILOG_ERROR("Failed to get accessibility service");
819 return Accessibility::RET_ERR_SAMGR;
820 }
821
822 Accessibility::RetError ret = serviceProxy_->GetMouseAutoClick(time);
823 HILOG_INFO("time = [%{public}d]", time);
824 return ret;
825 }
826
GetShortkeyTarget(std::string & name)827 Accessibility::RetError AccessibilityConfig::Impl::GetShortkeyTarget(std::string &name)
828 {
829 std::lock_guard<std::mutex> lock(mutex_);
830 if (!serviceProxy_) {
831 HILOG_ERROR("Failed to get accessibility service");
832 return Accessibility::RET_ERR_SAMGR;
833 }
834
835 Accessibility::RetError ret = serviceProxy_->GetShortkeyTarget(name);
836 HILOG_INFO("name = [%{public}s]", name.c_str());
837 return ret;
838 }
839
GetShortkeyMultiTarget(std::vector<std::string> & name)840 Accessibility::RetError AccessibilityConfig::Impl::GetShortkeyMultiTarget(std::vector<std::string> &name)
841 {
842 std::lock_guard<std::mutex> lock(mutex_);
843 if (!serviceProxy_) {
844 HILOG_ERROR("Failed to get accessibility service");
845 return Accessibility::RET_ERR_SAMGR;
846 }
847
848 Accessibility::RetError ret = serviceProxy_->GetShortkeyMultiTarget(name);
849 return ret;
850 }
851
NotifyShortkeyTargetChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const std::string & shortkey_target)852 void AccessibilityConfig::Impl::NotifyShortkeyTargetChanged(
853 const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const std::string &shortkey_target)
854 {
855 HILOG_INFO("shortkey_target = [%{public}s]", shortkey_target.c_str());
856 for (auto &observer : observers) {
857 if (observer) {
858 ConfigValue configValue;
859 configValue.shortkey_target = shortkeyTarget_;
860 observer->OnConfigChanged(CONFIG_SHORT_KEY_TARGET, configValue);
861 } else {
862 HILOG_ERROR("end configObservers_ is null");
863 }
864 }
865 }
866
NotifyShortkeyMultiTargetChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const std::vector<std::string> & shortkeyMultiTarget)867 void AccessibilityConfig::Impl::NotifyShortkeyMultiTargetChanged(
868 const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers,
869 const std::vector<std::string> &shortkeyMultiTarget)
870 {
871 HILOG_DEBUG("start");
872 for (auto &observer : observers) {
873 if (observer) {
874 ConfigValue configValue;
875 configValue.shortkeyMultiTarget = shortkeyMultiTarget;
876 observer->OnConfigChanged(CONFIG_SHORT_KEY_MULTI_TARGET, configValue);
877 } else {
878 HILOG_ERROR("end configObservers_ is null");
879 }
880 }
881 }
882
NotifyMouseAutoClickChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const uint32_t mouseAutoClick)883 void AccessibilityConfig::Impl::NotifyMouseAutoClickChanged(
884 const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const uint32_t mouseAutoClick)
885 {
886 HILOG_INFO("mouseAutoClick = [%{public}u]", mouseAutoClick);
887 for (auto &observer : observers) {
888 if (observer) {
889 ConfigValue configValue;
890 configValue.mouseAutoClick = mouseAutoClick_;
891 observer->OnConfigChanged(CONFIG_MOUSE_AUTOCLICK, configValue);
892 } else {
893 HILOG_ERROR("end configObservers_ is null");
894 }
895 }
896 }
897
NotifyAudioBalanceChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const float audioBalance)898 void AccessibilityConfig::Impl::NotifyAudioBalanceChanged(
899 const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const float audioBalance)
900 {
901 HILOG_INFO("audioBalance = [%{public}f]", audioBalance);
902 for (auto &observer : observers) {
903 if (observer) {
904 ConfigValue configValue;
905 configValue.audioBalance = audioBalance;
906 observer->OnConfigChanged(CONFIG_AUDIO_BALANCE, configValue);
907 } else {
908 HILOG_ERROR("end configObservers_ is null");
909 }
910 }
911 }
912
NotifyBrightnessDiscountChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const float brightnessDiscount)913 void AccessibilityConfig::Impl::NotifyBrightnessDiscountChanged(
914 const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const float brightnessDiscount)
915 {
916 HILOG_INFO("brightnessDiscount = [%{public}f]", brightnessDiscount);
917 for (auto &observer : observers) {
918 if (observer) {
919 ConfigValue configValue;
920 configValue.brightnessDiscount = brightnessDiscount;
921 observer->OnConfigChanged(CONFIG_BRIGHTNESS_DISCOUNT, configValue);
922 } else {
923 HILOG_ERROR("end configObservers_ is null");
924 }
925 }
926 }
927
NotifyContentTimeoutChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const uint32_t contentTimeout)928 void AccessibilityConfig::Impl::NotifyContentTimeoutChanged(
929 const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const uint32_t contentTimeout)
930 {
931 HILOG_INFO("contentTimeout = [%{public}u]", contentTimeout);
932 for (auto &observer : observers) {
933 if (observer) {
934 ConfigValue configValue;
935 configValue.contentTimeout = contentTimeout;
936 observer->OnConfigChanged(CONFIG_CONTENT_TIMEOUT, configValue);
937 } else {
938 HILOG_ERROR("end configObservers_ is null");
939 }
940 }
941 }
942
NotifyDaltonizationColorFilterChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const uint32_t daltonizationColorFilter)943 void AccessibilityConfig::Impl::NotifyDaltonizationColorFilterChanged(
944 const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const uint32_t daltonizationColorFilter)
945 {
946 HILOG_INFO("daltonizationColorFilter = [%{public}u]", daltonizationColorFilter);
947 for (auto &observer : observers) {
948 if (observer) {
949 ConfigValue configValue;
950 if (!daltonizationState_) {
951 HILOG_DEBUG();
952 configValue.daltonizationColorFilter = Normal;
953 observer->OnConfigChanged(CONFIG_DALTONIZATION_COLOR_FILTER, configValue);
954 } else {
955 configValue.daltonizationColorFilter = static_cast<DALTONIZATION_TYPE>(daltonizationColorFilter);
956 observer->OnConfigChanged(CONFIG_DALTONIZATION_COLOR_FILTER, configValue);
957 }
958 } else {
959 HILOG_ERROR("end configObservers_ is null");
960 }
961 }
962 }
963
NotifyClickResponseTimeChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const uint32_t clickResponseTime)964 void AccessibilityConfig::Impl::NotifyClickResponseTimeChanged(
965 const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const uint32_t clickResponseTime)
966 {
967 HILOG_INFO("daltonizationColorFilter = [%{public}u]", clickResponseTime);
968 for (auto &observer : observers) {
969 if (observer) {
970 ConfigValue configValue;
971 configValue.clickResponseTime = static_cast<CLICK_RESPONSE_TIME>(clickResponseTime);
972 observer->OnConfigChanged(CONIFG_CLICK_RESPONSE_TIME, configValue);
973 } else {
974 HILOG_ERROR("end configObservers_ is null");
975 }
976 }
977 }
978
NotifyIgnoreRepeatClickTimeChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const uint32_t time)979 void AccessibilityConfig::Impl::NotifyIgnoreRepeatClickTimeChanged(
980 const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const uint32_t time)
981 {
982 HILOG_INFO("daltonizationColorFilter = [%{public}u]", time);
983 for (auto &observer : observers) {
984 if (observer) {
985 ConfigValue configValue;
986 configValue.ignoreRepeatClickTime = static_cast<IGNORE_REPEAT_CLICK_TIME>(time);
987 observer->OnConfigChanged(CONFIG_IGNORE_REPEAT_CLICK_TIME, configValue);
988 } else {
989 HILOG_ERROR("end configObservers_ is null");
990 }
991 }
992 }
993
NotifyIgnoreRepeatClickStateChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const bool state)994 void AccessibilityConfig::Impl::NotifyIgnoreRepeatClickStateChanged(
995 const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const bool state)
996 {
997 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
998 for (auto &observer : observers) {
999 if (observer) {
1000 ConfigValue configValue;
1001 configValue.ignoreRepeatClickState = state;
1002 observer->OnConfigChanged(CONFIG_IGNORE_REPEAT_CLICK_STATE, configValue);
1003 } else {
1004 HILOG_ERROR("end configObservers_ is null");
1005 }
1006 }
1007 }
1008
SetHighContrastTextState(const bool state)1009 Accessibility::RetError AccessibilityConfig::Impl::SetHighContrastTextState(const bool state)
1010 {
1011 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
1012 std::lock_guard<std::mutex> lock(mutex_);
1013 if (!serviceProxy_) {
1014 HILOG_ERROR("Failed to get accessibility service");
1015 return Accessibility::RET_ERR_SAMGR;
1016 }
1017 return serviceProxy_->SetHighContrastTextState(state);
1018 }
1019
SetInvertColorState(const bool state)1020 Accessibility::RetError AccessibilityConfig::Impl::SetInvertColorState(const bool state)
1021 {
1022 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
1023 std::lock_guard<std::mutex> lock(mutex_);
1024 if (!serviceProxy_) {
1025 HILOG_ERROR("Failed to get accessibility service");
1026 return Accessibility::RET_ERR_SAMGR;
1027 }
1028 return serviceProxy_->SetInvertColorState(state);
1029 }
1030
SetDaltonizationState(const bool state)1031 Accessibility::RetError AccessibilityConfig::Impl::SetDaltonizationState(const bool state)
1032 {
1033 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
1034 std::lock_guard<std::mutex> lock(mutex_);
1035 if (!serviceProxy_) {
1036 HILOG_ERROR("Failed to get accessibility service");
1037 return Accessibility::RET_ERR_SAMGR;
1038 }
1039 return serviceProxy_->SetDaltonizationState(state);
1040 }
1041
SetDaltonizationColorFilter(const DALTONIZATION_TYPE type)1042 Accessibility::RetError AccessibilityConfig::Impl::SetDaltonizationColorFilter(const DALTONIZATION_TYPE type)
1043 {
1044 HILOG_INFO("type = [%{public}u]", static_cast<uint32_t>(type));
1045 std::lock_guard<std::mutex> lock(mutex_);
1046 if (!serviceProxy_) {
1047 HILOG_ERROR("Failed to get accessibility service");
1048 return Accessibility::RET_ERR_SAMGR;
1049 }
1050 return serviceProxy_->SetDaltonizationColorFilter(type);
1051 }
1052
SetContentTimeout(const uint32_t timer)1053 Accessibility::RetError AccessibilityConfig::Impl::SetContentTimeout(const uint32_t timer)
1054 {
1055 HILOG_INFO("timer = [%{public}u]", timer);
1056 std::lock_guard<std::mutex> lock(mutex_);
1057 if (!serviceProxy_) {
1058 HILOG_ERROR("Failed to get accessibility service");
1059 return Accessibility::RET_ERR_SAMGR;
1060 }
1061 return serviceProxy_->SetContentTimeout(timer);
1062 }
1063
SetAnimationOffState(const bool state)1064 Accessibility::RetError AccessibilityConfig::Impl::SetAnimationOffState(const bool state)
1065 {
1066 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
1067 std::lock_guard<std::mutex> lock(mutex_);
1068 if (!serviceProxy_) {
1069 HILOG_ERROR("Failed to get accessibility service");
1070 return Accessibility::RET_ERR_SAMGR;
1071 }
1072 return serviceProxy_->SetAnimationOffState(state);
1073 }
1074
SetBrightnessDiscount(const float brightness)1075 Accessibility::RetError AccessibilityConfig::Impl::SetBrightnessDiscount(const float brightness)
1076 {
1077 HILOG_INFO("brightness = [%{public}f]", brightness);
1078 std::lock_guard<std::mutex> lock(mutex_);
1079 if (!serviceProxy_) {
1080 HILOG_ERROR("Failed to get accessibility service");
1081 return Accessibility::RET_ERR_SAMGR;
1082 }
1083 return serviceProxy_->SetBrightnessDiscount(brightness);
1084 }
1085
SetAudioMonoState(const bool state)1086 Accessibility::RetError AccessibilityConfig::Impl::SetAudioMonoState(const bool state)
1087 {
1088 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
1089 std::lock_guard<std::mutex> lock(mutex_);
1090 if (!serviceProxy_) {
1091 HILOG_ERROR("Failed to get accessibility service");
1092 return Accessibility::RET_ERR_SAMGR;
1093 }
1094 return serviceProxy_->SetAudioMonoState(state);
1095 }
1096
SetAudioBalance(const float balance)1097 Accessibility::RetError AccessibilityConfig::Impl::SetAudioBalance(const float balance)
1098 {
1099 HILOG_INFO("balance = [%{public}f]", balance);
1100 std::lock_guard<std::mutex> lock(mutex_);
1101 if (!serviceProxy_) {
1102 HILOG_ERROR("Failed to get accessibility service");
1103 return Accessibility::RET_ERR_SAMGR;
1104 }
1105 return serviceProxy_->SetAudioBalance(balance);
1106 }
1107
SetClickResponseTime(const CLICK_RESPONSE_TIME time)1108 Accessibility::RetError AccessibilityConfig::Impl::SetClickResponseTime(const CLICK_RESPONSE_TIME time)
1109 {
1110 HILOG_INFO("click response time = [%{public}u]", time);
1111 std::lock_guard<std::mutex> lock(mutex_);
1112 if (!serviceProxy_) {
1113 HILOG_ERROR("Failed to get accessibility service");
1114 return Accessibility::RET_ERR_SAMGR;
1115 }
1116 return serviceProxy_->SetClickResponseTime(time);
1117 }
1118
SetIgnoreRepeatClickState(const bool state)1119 Accessibility::RetError AccessibilityConfig::Impl::SetIgnoreRepeatClickState(const bool state)
1120 {
1121 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
1122 std::lock_guard<std::mutex> lock(mutex_);
1123 if (!serviceProxy_) {
1124 HILOG_ERROR("Failed to get accessibility service");
1125 return Accessibility::RET_ERR_SAMGR;
1126 }
1127 return serviceProxy_->SetIgnoreRepeatClickState(state);
1128 }
1129
SetIgnoreRepeatClickTime(const IGNORE_REPEAT_CLICK_TIME time)1130 Accessibility::RetError AccessibilityConfig::Impl::SetIgnoreRepeatClickTime(const IGNORE_REPEAT_CLICK_TIME time)
1131 {
1132 HILOG_INFO("ignore repeat click time = [%{public}u]", time);
1133 std::lock_guard<std::mutex> lock(mutex_);
1134 if (!serviceProxy_) {
1135 HILOG_ERROR("Failed to get accessibility service");
1136 return Accessibility::RET_ERR_SAMGR;
1137 }
1138 return serviceProxy_->SetIgnoreRepeatClickTime(time);
1139 }
1140
GetInvertColorState(bool & state)1141 Accessibility::RetError AccessibilityConfig::Impl::GetInvertColorState(bool &state)
1142 {
1143 std::lock_guard<std::mutex> lock(mutex_);
1144 if (!serviceProxy_) {
1145 HILOG_ERROR("Failed to get accessibility service");
1146 return Accessibility::RET_ERR_SAMGR;
1147 }
1148
1149 Accessibility::RetError ret = serviceProxy_->GetInvertColorState(state);
1150 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
1151 return ret;
1152 }
1153
GetHighContrastTextState(bool & state)1154 Accessibility::RetError AccessibilityConfig::Impl::GetHighContrastTextState(bool &state)
1155 {
1156 std::lock_guard<std::mutex> lock(mutex_);
1157 if (!serviceProxy_) {
1158 HILOG_ERROR("Failed to get accessibility service");
1159 return Accessibility::RET_ERR_SAMGR;
1160 }
1161
1162 Accessibility::RetError ret = serviceProxy_->GetHighContrastTextState(state);
1163 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
1164 return ret;
1165 }
1166
GetDaltonizationState(bool & state)1167 Accessibility::RetError AccessibilityConfig::Impl::GetDaltonizationState(bool &state)
1168 {
1169 std::lock_guard<std::mutex> lock(mutex_);
1170 if (!serviceProxy_) {
1171 HILOG_ERROR("Failed to get accessibility service");
1172 return Accessibility::RET_ERR_SAMGR;
1173 }
1174
1175 Accessibility::RetError ret = serviceProxy_->GetDaltonizationState(state);
1176 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
1177 return ret;
1178 }
1179
GetDaltonizationColorFilter(DALTONIZATION_TYPE & type)1180 Accessibility::RetError AccessibilityConfig::Impl::GetDaltonizationColorFilter(DALTONIZATION_TYPE &type)
1181 {
1182 std::lock_guard<std::mutex> lock(mutex_);
1183 if (!serviceProxy_) {
1184 HILOG_ERROR("Failed to get accessibility service");
1185 return Accessibility::RET_ERR_SAMGR;
1186 }
1187
1188 uint32_t filterType = 0;
1189 Accessibility::RetError ret = serviceProxy_->GetDaltonizationColorFilter(filterType);
1190 type = static_cast<DALTONIZATION_TYPE>(filterType);
1191 HILOG_INFO("type = [%{public}u]", static_cast<uint32_t>(type));
1192 return ret;
1193 }
1194
GetContentTimeout(uint32_t & timer)1195 Accessibility::RetError AccessibilityConfig::Impl::GetContentTimeout(uint32_t &timer)
1196 {
1197 std::lock_guard<std::mutex> lock(mutex_);
1198 if (!serviceProxy_) {
1199 HILOG_ERROR("Failed to get accessibility service");
1200 return Accessibility::RET_ERR_SAMGR;
1201 }
1202
1203 Accessibility::RetError ret = serviceProxy_->GetContentTimeout(timer);
1204 HILOG_INFO("timer = [%{public}u]", timer);
1205 return ret;
1206 }
1207
GetAnimationOffState(bool & state)1208 Accessibility::RetError AccessibilityConfig::Impl::GetAnimationOffState(bool &state)
1209 {
1210 std::lock_guard<std::mutex> lock(mutex_);
1211 if (!serviceProxy_) {
1212 HILOG_ERROR("Failed to get accessibility service");
1213 return Accessibility::RET_ERR_SAMGR;
1214 }
1215
1216 Accessibility::RetError ret = serviceProxy_->GetAnimationOffState(state);
1217 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
1218 return ret;
1219 }
1220
GetBrightnessDiscount(float & brightness)1221 Accessibility::RetError AccessibilityConfig::Impl::GetBrightnessDiscount(float &brightness)
1222 {
1223 std::lock_guard<std::mutex> lock(mutex_);
1224 if (!serviceProxy_) {
1225 HILOG_ERROR("Failed to get accessibility service");
1226 return Accessibility::RET_ERR_SAMGR;
1227 }
1228
1229 Accessibility::RetError ret = serviceProxy_->GetBrightnessDiscount(brightness);
1230 HILOG_INFO("brightness = [%{public}f]", brightness);
1231 return ret;
1232 }
1233
GetAudioMonoState(bool & state)1234 Accessibility::RetError AccessibilityConfig::Impl::GetAudioMonoState(bool &state)
1235 {
1236 std::lock_guard<std::mutex> lock(mutex_);
1237 if (!serviceProxy_) {
1238 HILOG_ERROR("Failed to get accessibility service");
1239 return Accessibility::RET_ERR_SAMGR;
1240 }
1241
1242 Accessibility::RetError ret = serviceProxy_->GetAudioMonoState(state);
1243 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
1244 return ret;
1245 }
1246
GetAudioBalance(float & balance)1247 Accessibility::RetError AccessibilityConfig::Impl::GetAudioBalance(float &balance)
1248 {
1249 std::lock_guard<std::mutex> lock(mutex_);
1250 if (!serviceProxy_) {
1251 HILOG_ERROR("Failed to get accessibility service");
1252 return Accessibility::RET_ERR_SAMGR;
1253 }
1254
1255 Accessibility::RetError ret = serviceProxy_->GetAudioBalance(balance);
1256 HILOG_INFO("balance = [%{public}f]", balance);
1257 return ret;
1258 }
1259
GetClickResponseTime(CLICK_RESPONSE_TIME & time)1260 Accessibility::RetError AccessibilityConfig::Impl::GetClickResponseTime(CLICK_RESPONSE_TIME &time)
1261 {
1262 std::lock_guard<std::mutex> lock(mutex_);
1263 if (!serviceProxy_) {
1264 HILOG_ERROR("Failed to get accessibility service");
1265 return Accessibility::RET_ERR_SAMGR;
1266 }
1267
1268 uint32_t responseTime = 0;
1269 Accessibility::RetError ret = serviceProxy_->GetClickResponseTime(responseTime);
1270 time = static_cast<CLICK_RESPONSE_TIME>(responseTime);
1271 HILOG_INFO("click response time = [%{public}u]", time);
1272 return ret;
1273 }
1274
GetIgnoreRepeatClickState(bool & state)1275 Accessibility::RetError AccessibilityConfig::Impl::GetIgnoreRepeatClickState(bool &state)
1276 {
1277 std::lock_guard<std::mutex> lock(mutex_);
1278 if (!serviceProxy_) {
1279 HILOG_ERROR("Failed to get accessibility service");
1280 return Accessibility::RET_ERR_SAMGR;
1281 }
1282
1283 Accessibility::RetError ret = serviceProxy_->GetIgnoreRepeatClickState(state);
1284 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
1285 return ret;
1286 }
1287
GetIgnoreRepeatClickTime(IGNORE_REPEAT_CLICK_TIME & time)1288 Accessibility::RetError AccessibilityConfig::Impl::GetIgnoreRepeatClickTime(IGNORE_REPEAT_CLICK_TIME &time)
1289 {
1290 std::lock_guard<std::mutex> lock(mutex_);
1291 if (!serviceProxy_) {
1292 HILOG_ERROR("Failed to get accessibility service");
1293 return Accessibility::RET_ERR_SAMGR;
1294 }
1295
1296 uint32_t ignoreRepeatClickTime = 0;
1297 Accessibility::RetError ret = serviceProxy_->GetIgnoreRepeatClickTime(ignoreRepeatClickTime);
1298 time = static_cast<IGNORE_REPEAT_CLICK_TIME>(ignoreRepeatClickTime);
1299 HILOG_INFO("ignore repeat click time = [%{public}u]", time);
1300 return ret;
1301 }
1302
SubscribeEnableAbilityListsObserver(const std::shared_ptr<AccessibilityEnableAbilityListsObserver> & observer)1303 Accessibility::RetError AccessibilityConfig::Impl::SubscribeEnableAbilityListsObserver(
1304 const std::shared_ptr<AccessibilityEnableAbilityListsObserver> &observer)
1305 {
1306 HILOG_INFO();
1307 std::lock_guard<std::mutex> lock(mutex_);
1308 if (std::any_of(enableAbilityListsObservers_.begin(), enableAbilityListsObservers_.end(),
1309 [&observer](const std::shared_ptr<AccessibilityEnableAbilityListsObserver> &listObserver) {
1310 return listObserver == observer;
1311 })) {
1312 HILOG_ERROR("the observer is exist");
1313 return Accessibility::RET_OK;
1314 }
1315 enableAbilityListsObservers_.push_back(observer);
1316 HILOG_DEBUG("observer's size is %{public}zu", enableAbilityListsObservers_.size());
1317 return Accessibility::RET_OK;
1318 }
1319
UnsubscribeEnableAbilityListsObserver(const std::shared_ptr<AccessibilityEnableAbilityListsObserver> & observer)1320 Accessibility::RetError AccessibilityConfig::Impl::UnsubscribeEnableAbilityListsObserver(
1321 const std::shared_ptr<AccessibilityEnableAbilityListsObserver> &observer)
1322 {
1323 HILOG_INFO();
1324 std::lock_guard<std::mutex> lock(mutex_);
1325 for (auto iter = enableAbilityListsObservers_.begin(); iter != enableAbilityListsObservers_.end(); iter++) {
1326 if (*iter == observer) {
1327 HILOG_DEBUG("erase observer");
1328 enableAbilityListsObservers_.erase(iter);
1329 HILOG_DEBUG("observer's size is %{public}zu", enableAbilityListsObservers_.size());
1330 return Accessibility::RET_OK;
1331 }
1332 }
1333 return Accessibility::RET_OK;
1334 }
1335
OnAccessibilityEnableAbilityListsChanged()1336 void AccessibilityConfig::Impl::OnAccessibilityEnableAbilityListsChanged()
1337 {
1338 HILOG_DEBUG("observer's size is %{public}zu", enableAbilityListsObservers_.size());
1339 std::vector<std::shared_ptr<AccessibilityEnableAbilityListsObserver>> observers;
1340 {
1341 std::lock_guard<std::mutex> lock(mutex_);
1342 observers = enableAbilityListsObservers_;
1343 }
1344 for (auto &enableAbilityListsObserver : observers) {
1345 enableAbilityListsObserver->OnEnableAbilityListsStateChanged();
1346 }
1347 }
1348
OnIgnoreRepeatClickStateChanged(const uint32_t stateType)1349 void AccessibilityConfig::Impl::OnIgnoreRepeatClickStateChanged(const uint32_t stateType)
1350 {
1351 if (stateType & Accessibility::STATE_IGNORE_REPEAT_CLICK_ENABLED) {
1352 UpdateIgnoreRepeatClickStateEnabled(true);
1353 } else {
1354 UpdateIgnoreRepeatClickStateEnabled(false);
1355 }
1356 }
1357
OnAccessibleAbilityManagerConfigStateChanged(const uint32_t stateType)1358 void AccessibilityConfig::Impl::OnAccessibleAbilityManagerConfigStateChanged(const uint32_t stateType)
1359 {
1360 HILOG_DEBUG("stateType = [%{public}u}", stateType);
1361 if (stateType & Accessibility::STATE_CAPTION_ENABLED) {
1362 UpdateCaptionEnabled(true);
1363 } else {
1364 UpdateCaptionEnabled(false);
1365 }
1366
1367 if (stateType & Accessibility::STATE_SCREENMAGNIFIER_ENABLED) {
1368 UpdateScreenMagnificationEnabled(true);
1369 } else {
1370 UpdateScreenMagnificationEnabled(false);
1371 }
1372
1373 if (stateType & Accessibility::STATE_SHORTKEY_ENABLED) {
1374 UpdateShortKeyEnabled(true);
1375 } else {
1376 UpdateShortKeyEnabled(false);
1377 }
1378
1379 if (stateType & Accessibility::STATE_AUDIOMONO_ENABLED) {
1380 UpdateAudioMonoEnabled(true);
1381 } else {
1382 UpdateAudioMonoEnabled(false);
1383 }
1384
1385 if (stateType & Accessibility::STATE_ANIMATIONOFF_ENABLED) {
1386 UpdateAnimationOffEnabled(true);
1387 } else {
1388 UpdateAnimationOffEnabled(false);
1389 }
1390
1391 if (stateType & Accessibility::STATE_INVETRTCOLOR_ENABLED) {
1392 UpdateInvertColorEnabled(true);
1393 } else {
1394 UpdateInvertColorEnabled(false);
1395 }
1396
1397 if (stateType & Accessibility::STATE_HIGHCONTRAST_ENABLED) {
1398 UpdateHighContrastTextEnabled(true);
1399 } else {
1400 UpdateHighContrastTextEnabled(false);
1401 }
1402
1403 if (stateType & Accessibility::STATE_DALTONIZATION_STATE_ENABLED) {
1404 UpdateDaltonizationStateEnabled(true);
1405 } else {
1406 UpdateDaltonizationStateEnabled(false);
1407 }
1408
1409 if (stateType & Accessibility::STATE_MOUSEKEY_ENABLED) {
1410 UpdateMouseKeyEnabled(true);
1411 } else {
1412 UpdateMouseKeyEnabled(false);
1413 }
1414
1415 OnIgnoreRepeatClickStateChanged(stateType);
1416 }
1417
OnAccessibleAbilityManagerAudioBalanceChanged(const float audioBalance)1418 void AccessibilityConfig::Impl::OnAccessibleAbilityManagerAudioBalanceChanged(const float audioBalance)
1419 {
1420 HILOG_DEBUG("audioBalance = [%{public}f}", audioBalance);
1421 std::vector<std::shared_ptr<AccessibilityConfigObserver>> observers;
1422 {
1423 std::lock_guard<std::mutex> lock(mutex_);
1424 if (audioBalance_ == audioBalance) {
1425 return;
1426 }
1427 audioBalance_ = audioBalance;
1428 std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
1429 configObservers_.find(CONFIG_AUDIO_BALANCE);
1430 if (it == configObservers_.end()) {
1431 return;
1432 }
1433 observers = it->second;
1434 }
1435
1436 NotifyAudioBalanceChanged(observers, audioBalance);
1437 }
1438
OnAccessibleAbilityManagerBrightnessDiscountChanged(const float brightnessDiscount)1439 void AccessibilityConfig::Impl::OnAccessibleAbilityManagerBrightnessDiscountChanged(const float brightnessDiscount)
1440 {
1441 HILOG_DEBUG("brightnessDiscount = [%{public}f}", brightnessDiscount);
1442
1443 std::vector<std::shared_ptr<AccessibilityConfigObserver>> observers;
1444 {
1445 std::lock_guard<std::mutex> lock(mutex_);
1446 if (brightnessDiscount_ == brightnessDiscount) {
1447 return;
1448 }
1449 brightnessDiscount_ = brightnessDiscount;
1450 std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
1451 configObservers_.find(CONFIG_BRIGHTNESS_DISCOUNT);
1452 if (it == configObservers_.end()) {
1453 return;
1454 }
1455 observers = it->second;
1456 }
1457
1458 NotifyBrightnessDiscountChanged(observers, brightnessDiscount);
1459 }
1460
OnAccessibleAbilityManagerContentTimeoutChanged(const uint32_t contentTimeout)1461 void AccessibilityConfig::Impl::OnAccessibleAbilityManagerContentTimeoutChanged(const uint32_t contentTimeout)
1462 {
1463 HILOG_DEBUG("contentTimeout = [%{public}u}", contentTimeout);
1464 std::vector<std::shared_ptr<AccessibilityConfigObserver>> observers;
1465 {
1466 std::lock_guard<std::mutex> lock(mutex_);
1467 if (contentTimeout_ == contentTimeout) {
1468 return;
1469 }
1470 contentTimeout_ = contentTimeout;
1471 std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
1472 configObservers_.find(CONFIG_CONTENT_TIMEOUT);
1473 if (it == configObservers_.end()) {
1474 return;
1475 }
1476 observers = it->second;
1477 }
1478
1479 NotifyContentTimeoutChanged(observers, contentTimeout);
1480 }
1481
OnAccessibleAbilityManagerDaltonizationColorFilterChanged(const uint32_t filterType)1482 void AccessibilityConfig::Impl::OnAccessibleAbilityManagerDaltonizationColorFilterChanged(const uint32_t filterType)
1483 {
1484 HILOG_DEBUG("filterType = [%{public}u}", filterType);
1485 std::vector<std::shared_ptr<AccessibilityConfigObserver>> observers;
1486 {
1487 std::lock_guard<std::mutex> lock(mutex_);
1488 if (daltonizationColorFilter_ == filterType) {
1489 HILOG_DEBUG("filterType[%{public}u]", daltonizationColorFilter_);
1490 return;
1491 }
1492 daltonizationColorFilter_ = filterType;
1493 std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
1494 configObservers_.find(CONFIG_DALTONIZATION_COLOR_FILTER);
1495 if (it == configObservers_.end()) {
1496 return;
1497 }
1498 observers = it->second;
1499 }
1500
1501 NotifyDaltonizationColorFilterChanged(observers, filterType);
1502 }
1503
OnAccessibleAbilityManagerMouseAutoClickChanged(const int32_t mouseAutoClick)1504 void AccessibilityConfig::Impl::OnAccessibleAbilityManagerMouseAutoClickChanged(const int32_t mouseAutoClick)
1505 {
1506 HILOG_DEBUG("mouseAutoClick = [%{public}d}", mouseAutoClick);
1507 std::vector<std::shared_ptr<AccessibilityConfigObserver>> observers;
1508 {
1509 std::lock_guard<std::mutex> lock(mutex_);
1510 if (mouseAutoClick_ == mouseAutoClick) {
1511 return;
1512 }
1513 mouseAutoClick_ = mouseAutoClick;
1514 std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
1515 configObservers_.find(CONFIG_MOUSE_AUTOCLICK);
1516 if (it == configObservers_.end()) {
1517 return;
1518 }
1519 observers = it->second;
1520 }
1521
1522 NotifyMouseAutoClickChanged(observers, mouseAutoClick);
1523 }
1524
OnAccessibleAbilityManagerShortkeyTargetChanged(const std::string & shortkeyTarget)1525 void AccessibilityConfig::Impl::OnAccessibleAbilityManagerShortkeyTargetChanged(const std::string &shortkeyTarget)
1526 {
1527 HILOG_DEBUG("shortkeyTarget = [%{public}s}", shortkeyTarget.c_str());
1528 std::vector<std::shared_ptr<AccessibilityConfigObserver>> observers;
1529 {
1530 std::lock_guard<std::mutex> lock(mutex_);
1531 if (shortkeyTarget_.length() > 0 && shortkeyTarget.length() > 0 &&
1532 !std::strcmp(shortkeyTarget_.c_str(), shortkeyTarget.c_str())) {
1533 return;
1534 }
1535 shortkeyTarget_ = shortkeyTarget;
1536 std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
1537 configObservers_.find(CONFIG_SHORT_KEY_TARGET);
1538 if (it == configObservers_.end()) {
1539 return;
1540 }
1541 observers = it->second;
1542 }
1543
1544 NotifyShortkeyTargetChanged(observers, shortkeyTarget);
1545 }
1546
OnAccessibleAbilityManagerShortkeyMultiTargetChanged(const std::vector<std::string> & shortkeyMultiTarget)1547 void AccessibilityConfig::Impl::OnAccessibleAbilityManagerShortkeyMultiTargetChanged(
1548 const std::vector<std::string> &shortkeyMultiTarget)
1549 {
1550 HILOG_DEBUG("start");
1551 std::vector<std::shared_ptr<AccessibilityConfigObserver>> observers;
1552 {
1553 std::lock_guard<std::mutex> lock(mutex_);
1554 // need to add, if no change, do not inform
1555 shortkeyMultiTarget_ = shortkeyMultiTarget;
1556 std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
1557 configObservers_.find(CONFIG_SHORT_KEY_MULTI_TARGET);
1558 if (it == configObservers_.end()) {
1559 HILOG_DEBUG("Cannot find CONFIG_SHORT_KEY_MULTI_TARGET configObserver.");
1560 return;
1561 }
1562 observers = it->second;
1563 }
1564
1565 NotifyShortkeyMultiTargetChanged(observers, shortkeyMultiTarget);
1566 }
1567
OnAccessibleAbilityManagerClickResponseTimeChanged(const uint32_t clickResponseTime)1568 void AccessibilityConfig::Impl::OnAccessibleAbilityManagerClickResponseTimeChanged(const uint32_t clickResponseTime)
1569 {
1570 HILOG_DEBUG("clickResponseTime = [%{public}u}", clickResponseTime);
1571 std::vector<std::shared_ptr<AccessibilityConfigObserver>> observers;
1572 {
1573 std::lock_guard<std::mutex> lock(mutex_);
1574 if (clickResponseTime_ == clickResponseTime) {
1575 return;
1576 }
1577 clickResponseTime_ = clickResponseTime;
1578 std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
1579 configObservers_.find(CONIFG_CLICK_RESPONSE_TIME);
1580 if (it == configObservers_.end()) {
1581 return;
1582 }
1583 observers = it->second;
1584 }
1585
1586 NotifyClickResponseTimeChanged(observers, clickResponseTime);
1587 }
1588
OnAccessibleAbilityManagerIgnoreRepeatClickTimeChanged(const uint32_t time)1589 void AccessibilityConfig::Impl::OnAccessibleAbilityManagerIgnoreRepeatClickTimeChanged(const uint32_t time)
1590 {
1591 HILOG_DEBUG("ignoreRepeatClickTime = [%{public}u}", time);
1592 std::vector<std::shared_ptr<AccessibilityConfigObserver>> observers;
1593 {
1594 std::lock_guard<std::mutex> lock(mutex_);
1595 if (ignoreRepeatClickTime_ == time) {
1596 return;
1597 }
1598 ignoreRepeatClickTime_ = time;
1599 std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
1600 configObservers_.find(CONFIG_IGNORE_REPEAT_CLICK_TIME);
1601 if (it == configObservers_.end()) {
1602 return;
1603 }
1604 observers = it->second;
1605 }
1606
1607 NotifyIgnoreRepeatClickTimeChanged(observers, time);
1608 }
1609
NotifyImmediately(const CONFIG_ID id,const std::shared_ptr<AccessibilityConfigObserver> & observer)1610 void AccessibilityConfig::Impl::NotifyImmediately(const CONFIG_ID id,
1611 const std::shared_ptr<AccessibilityConfigObserver> &observer)
1612 {
1613 HILOG_DEBUG("NotifyImmediately start.");
1614 ConfigValue configValue;
1615 {
1616 configValue.highContrastText = highContrastText_;
1617 configValue.invertColor = invertColor_;
1618 configValue.animationOff = animationOff_;
1619 configValue.screenMagnifier = screenMagnifier_;
1620 configValue.audioMono = audioMono_;
1621 configValue.mouseKey = mouseKey_;
1622 configValue.shortkey = shortkey_;
1623 configValue.captionState = captionState_;
1624 configValue.contentTimeout = contentTimeout_;
1625 configValue.mouseAutoClick = mouseAutoClick_;
1626 configValue.audioBalance = audioBalance_;
1627 configValue.brightnessDiscount = brightnessDiscount_;
1628 configValue.daltonizationState = daltonizationState_;
1629 configValue.daltonizationColorFilter = static_cast<DALTONIZATION_TYPE>(daltonizationColorFilter_);
1630 configValue.shortkey_target = shortkeyTarget_;
1631 configValue.shortkeyMultiTarget = shortkeyMultiTarget_;
1632 configValue.captionStyle = captionProperty_;
1633 configValue.clickResponseTime = static_cast<CLICK_RESPONSE_TIME>(clickResponseTime_);
1634 configValue.ignoreRepeatClickState = ignoreRepeatClickState_;
1635 configValue.ignoreRepeatClickTime = static_cast<IGNORE_REPEAT_CLICK_TIME>(ignoreRepeatClickTime_);
1636 }
1637 observer->OnConfigChanged(id, configValue);
1638 }
1639
InitConfigValues()1640 void AccessibilityConfig::Impl::InitConfigValues()
1641 {
1642 Accessibility::AccessibilityConfigData configData;
1643 serviceProxy_->GetAllConfigs(configData);
1644 highContrastText_ = configData.highContrastText_;
1645 invertColor_ = configData.invertColor_;
1646 animationOff_ = configData.animationOff_;
1647 audioMono_ = configData.audioMono_;
1648 mouseKey_ = configData.mouseKey_;
1649 captionState_ = configData.captionState_;
1650 screenMagnifier_ = configData.screenMagnifier_;
1651 shortkey_ = configData.shortkey_;
1652 mouseAutoClick_ = configData.mouseAutoClick_;
1653 daltonizationState_ = configData.daltonizationState_;
1654 daltonizationColorFilter_ = configData.daltonizationColorFilter_;
1655 contentTimeout_ = configData.contentTimeout_;
1656 brightnessDiscount_ = configData.brightnessDiscount_;
1657 audioBalance_ = configData.audioBalance_;
1658 shortkeyTarget_ = configData.shortkeyTarget_;
1659 shortkeyMultiTarget_ = configData.shortkeyMultiTarget_;
1660 captionProperty_ = configData.captionProperty_;
1661 clickResponseTime_ = configData.clickResponseTime_;
1662 ignoreRepeatClickTime_ = configData.ignoreRepeatClickTime_;
1663 ignoreRepeatClickState_ = configData.ignoreRepeatClickState_;
1664 NotifyDefaultConfigs();
1665 HILOG_DEBUG("ConnectToService Success");
1666 }
1667
NotifyDefaultDaltonizationConfigs()1668 void AccessibilityConfig::Impl::NotifyDefaultDaltonizationConfigs()
1669 {
1670 std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
1671 configObservers_.find(CONFIG_DALTONIZATION_STATE);
1672 if (it != configObservers_.end()) {
1673 NotifyDaltonizationStateChanged(it->second, daltonizationState_);
1674 }
1675 if ((it = configObservers_.find(CONFIG_DALTONIZATION_COLOR_FILTER)) != configObservers_.end()) {
1676 NotifyDaltonizationColorFilterChanged(it->second, daltonizationColorFilter_);
1677 }
1678 }
1679
NotifyDefaultScreenTouchConfigs()1680 void AccessibilityConfig::Impl::NotifyDefaultScreenTouchConfigs()
1681 {
1682 std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
1683 configObservers_.find(CONIFG_CLICK_RESPONSE_TIME);
1684 if (it != configObservers_.end()) {
1685 NotifyClickResponseTimeChanged(it->second, clickResponseTime_);
1686 }
1687 if ((it = configObservers_.find(CONFIG_IGNORE_REPEAT_CLICK_STATE)) != configObservers_.end()) {
1688 NotifyIgnoreRepeatClickTimeChanged(it->second, ignoreRepeatClickState_);
1689 }
1690 if ((it = configObservers_.find(CONFIG_IGNORE_REPEAT_CLICK_TIME)) != configObservers_.end()) {
1691 NotifyIgnoreRepeatClickStateChanged(it->second, ignoreRepeatClickTime_);
1692 }
1693 }
1694
NotifyDefaultShortKeyConfigs()1695 void AccessibilityConfig::Impl::NotifyDefaultShortKeyConfigs()
1696 {
1697 std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
1698 configObservers_.find(CONFIG_SHORT_KEY);
1699 if (it != configObservers_.end()) {
1700 NotifyShortKeyChanged(it->second, shortkey_);
1701 }
1702 if ((it = configObservers_.find(CONFIG_SHORT_KEY_TARGET)) != configObservers_.end()) {
1703 NotifyShortkeyTargetChanged(it->second, shortkeyTarget_);
1704 }
1705 }
1706
NotifyDefaultShortKeyMultiConfigs()1707 void AccessibilityConfig::Impl::NotifyDefaultShortKeyMultiConfigs()
1708 {
1709 std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
1710 configObservers_.find(CONFIG_SHORT_KEY);
1711 if (it != configObservers_.end()) {
1712 NotifyShortKeyChanged(it->second, shortkey_);
1713 }
1714 if ((it = configObservers_.find(CONFIG_SHORT_KEY_MULTI_TARGET)) != configObservers_.end()) {
1715 NotifyShortkeyMultiTargetChanged(it->second, shortkeyMultiTarget_);
1716 }
1717 }
1718
NotifyDefaultConfigs()1719 void AccessibilityConfig::Impl::NotifyDefaultConfigs()
1720 {
1721 std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
1722 configObservers_.find(CONFIG_HIGH_CONTRAST_TEXT);
1723 if (it != configObservers_.end()) {
1724 NotifyHighContrastTextChanged(it->second, highContrastText_);
1725 }
1726 if ((it = configObservers_.find(CONFIG_INVERT_COLOR)) != configObservers_.end()) {
1727 NotifyInvertColorChanged(it->second, invertColor_);
1728 }
1729 if ((it = configObservers_.find(CONFIG_CONTENT_TIMEOUT)) != configObservers_.end()) {
1730 NotifyContentTimeoutChanged(it->second, contentTimeout_);
1731 }
1732 if ((it = configObservers_.find(CONFIG_ANIMATION_OFF)) != configObservers_.end()) {
1733 NotifyAnimationOffChanged(it->second, animationOff_);
1734 }
1735 if ((it = configObservers_.find(CONFIG_BRIGHTNESS_DISCOUNT)) != configObservers_.end()) {
1736 NotifyBrightnessDiscountChanged(it->second, brightnessDiscount_);
1737 }
1738 if ((it = configObservers_.find(CONFIG_AUDIO_MONO)) != configObservers_.end()) {
1739 NotifyAudioMonoChanged(it->second, audioMono_);
1740 }
1741 if ((it = configObservers_.find(CONFIG_AUDIO_BALANCE)) != configObservers_.end()) {
1742 NotifyAudioBalanceChanged(it->second, audioBalance_);
1743 }
1744 if ((it = configObservers_.find(CONFIG_MOUSE_KEY)) != configObservers_.end()) {
1745 NotifyMouseKeyChanged(it->second, mouseKey_);
1746 }
1747 if ((it = configObservers_.find(CONFIG_CAPTION_STATE)) != configObservers_.end()) {
1748 NotifyCaptionStateChanged(it->second, captionState_);
1749 }
1750 if ((it = configObservers_.find(CONFIG_CAPTION_STYLE)) != configObservers_.end()) {
1751 NotifyCaptionChanged(it->second, captionProperty_);
1752 }
1753 if ((it = configObservers_.find(CONFIG_SCREEN_MAGNIFICATION)) != configObservers_.end()) {
1754 NotifyScreenMagnificationChanged(it->second, screenMagnifier_);
1755 }
1756 if ((it = configObservers_.find(CONFIG_MOUSE_AUTOCLICK)) != configObservers_.end()) {
1757 NotifyMouseAutoClickChanged(it->second, mouseAutoClick_);
1758 }
1759
1760 NotifyDefaultDaltonizationConfigs();
1761 NotifyDefaultScreenTouchConfigs();
1762 NotifyDefaultShortKeyConfigs();
1763 NotifyDefaultShortKeyMultiConfigs();
1764 }
1765
1766 } // namespace AccessibilityConfig
1767 } // namespace OHOS