• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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