• 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     constexpr int32_t SA_CONNECT_TIMEOUT = 500; // ms
29 }
30 
Impl()31 AccessibilityConfig::Impl::Impl()
32 {}
33 
InitializeContext()34 bool AccessibilityConfig::Impl::InitializeContext()
35 {
36     HILOG_DEBUG();
37     if (isInitialized_) {
38         HILOG_DEBUG("Context has initialized");
39         return true;
40     }
41     isInitialized_ = ConnectToService();
42     return isInitialized_;
43 }
44 
OnParameterChanged(const char * key,const char * value,void * context)45 void AccessibilityConfig::Impl::OnParameterChanged(const char *key, const char *value, void *context)
46 {
47     if (key == nullptr || std::strcmp(key, SYSTEM_PARAMETER_AAMS_NAME.c_str())) {
48         return;
49     }
50     if (value == nullptr || std::strcmp(value, "true")) {
51         return;
52     }
53     if (context == nullptr) {
54         return;
55     }
56     Impl* implPtr = static_cast<Impl*>(context);
57     if (implPtr->ConnectToServiceAsync() == true) {
58         HILOG_INFO("ConnectToServiceAsync success.");
59     } else {
60         HILOG_ERROR("ConnectToServiceAsync failed.");
61     }
62 }
63 
ConnectToService()64 bool AccessibilityConfig::Impl::ConnectToService()
65 {
66     char value[CONFIG_PARAMETER_VALUE_SIZE] = "default";
67     int retSysParam = GetParameter(SYSTEM_PARAMETER_AAMS_NAME.c_str(), "false", value, CONFIG_PARAMETER_VALUE_SIZE);
68     if (retSysParam >= 0 && !std::strcmp(value, "true")) {
69         if (!InitAccessibilityServiceProxy()) {
70             return false;
71         }
72         if (!RegisterToService()) {
73             return false;
74         }
75         InitConfigValues();
76     } else {
77         retSysParam = WatchParameter(SYSTEM_PARAMETER_AAMS_NAME.c_str(), &OnParameterChanged, this);
78         if (retSysParam) {
79             HILOG_ERROR("Watch parameter failed, error = %{public}d.", retSysParam);
80             return false;
81         }
82     }
83     return true;
84 }
85 
ConnectToServiceAsync()86 bool AccessibilityConfig::Impl::ConnectToServiceAsync()
87 {
88     HILOG_DEBUG("ConnectToServiceAsync start.");
89     std::lock_guard<std::mutex> lock(mutex_);
90     if (InitAccessibilityServiceProxy()) {
91         (void)RegisterToService();
92         InitConfigValues();
93         isInitialized_ = true;
94         return true;
95     } else {
96         HILOG_ERROR("ConnectToServiceAsync fail");
97         return false;
98     }
99 }
100 
InitAccessibilityServiceProxy()101 bool AccessibilityConfig::Impl::InitAccessibilityServiceProxy()
102 {
103     HILOG_DEBUG();
104     if (serviceProxy_ != nullptr) {
105         return true;
106     }
107     auto samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
108     if (samgr == nullptr) {
109         return false;
110     }
111     auto object = samgr->GetSystemAbility(ACCESSIBILITY_MANAGER_SERVICE_ID);
112     if (object != nullptr) {
113         if (!deathRecipient_) {
114             deathRecipient_ = new(std::nothrow) DeathRecipient(*this);
115             if (!deathRecipient_) {
116                 HILOG_ERROR("create deathRecipient_ fail");
117                 return false;
118             }
119         }
120 
121         if (object->IsProxyObject() && !object->AddDeathRecipient(deathRecipient_)) {
122             HILOG_ERROR("Failed to add death recipient");
123         }
124 
125         serviceProxy_ = iface_cast<Accessibility::IAccessibleAbilityManagerService>(object);
126         if (serviceProxy_ == nullptr) {
127             HILOG_ERROR("IAccessibleAbilityManagerService iface_cast failed");
128             return false;
129         }
130         HILOG_DEBUG("InitAccessibilityServiceProxy success");
131         return true;
132     }
133     return true;
134 }
135 
LoadAccessibilityService()136 bool AccessibilityConfig::Impl::LoadAccessibilityService()
137 {
138     std::unique_lock<std::mutex> lock(conVarMutex_);
139     sptr<AccessibilityLoadCallback> loadCallback = new AccessibilityLoadCallback(this);
140     if (loadCallback == nullptr) {
141         return false;
142     }
143     auto samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
144     if (samgr == nullptr) {
145         return false;
146     }
147     int32_t ret = samgr->LoadSystemAbility(ACCESSIBILITY_MANAGER_SERVICE_ID, loadCallback);
148     if (ret != 0) {
149         return false;
150     }
151     auto waitStatus = proxyConVar_.wait_for(lock, std::chrono::milliseconds(SA_CONNECT_TIMEOUT),
152         [this]() { return serviceProxy_ != nullptr; });
153     if (!waitStatus) {
154         return false;
155     }
156     (void)RegisterToService();
157     InitConfigValues();
158     return true;
159 }
160 
LoadSystemAbilitySuccess(const sptr<IRemoteObject> & remoteObject)161 void AccessibilityConfig::Impl::LoadSystemAbilitySuccess(const sptr<IRemoteObject> &remoteObject)
162 {
163     std::lock_guard<std::mutex> lock(conVarMutex_);
164     char value[CONFIG_PARAMETER_VALUE_SIZE] = "default";
165     int retSysParam = GetParameter(SYSTEM_PARAMETER_AAMS_NAME.c_str(), "false", value, CONFIG_PARAMETER_VALUE_SIZE);
166     if (retSysParam >= 0 && !std::strcmp(value, "true")) {
167         do {
168             auto samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
169             if (samgr == nullptr) {
170                 break;
171             }
172             auto object = samgr->GetSystemAbility(ACCESSIBILITY_MANAGER_SERVICE_ID);
173             if (object == nullptr) {
174                 break;
175             }
176             deathRecipient_ = new(std::nothrow) DeathRecipient(*this);
177             if (deathRecipient_ == nullptr) {
178                 break;
179             }
180             if (object->IsProxyObject()) {
181                 object->AddDeathRecipient(deathRecipient_);
182             }
183             serviceProxy_ = iface_cast<Accessibility::IAccessibleAbilityManagerService>(object);
184         } while (0);
185     }
186     proxyConVar_.notify_one();
187 }
188 
LoadSystemAbilityFail()189 void AccessibilityConfig::Impl::LoadSystemAbilityFail()
190 {
191     std::lock_guard<std::mutex> lock(conVarMutex_);
192     HILOG_WARN("LoadSystemAbilityFail.");
193     proxyConVar_.notify_one();
194 }
195 
RegisterToService()196 bool AccessibilityConfig::Impl::RegisterToService()
197 {
198     if (serviceProxy_ == nullptr) {
199         HILOG_ERROR("Service is not connected");
200         return false;
201     }
202 
203     if (captionObserver_ && enableAbilityListsObserver_ && configObserver_) {
204         HILOG_DEBUG("Observers is registered");
205         return true;
206     }
207 
208     if (!captionObserver_) {
209         captionObserver_ = new(std::nothrow) AccessibleAbilityManagerCaptionObserverImpl(*this);
210         if (captionObserver_ == nullptr) {
211             HILOG_ERROR("Create captionObserver_ failed.");
212             return false;
213         }
214         uint32_t ret = serviceProxy_->RegisterCaptionObserver(captionObserver_);
215         if (ret != 0) {
216             HILOG_ERROR("Register captionObserver failed.");
217             return false;
218         }
219     }
220 
221     if (!enableAbilityListsObserver_) {
222         enableAbilityListsObserver_ = new(std::nothrow) AccessibilityEnableAbilityListsObserverImpl(*this);
223         if (enableAbilityListsObserver_ == nullptr) {
224             HILOG_ERROR("Create enableAbilityListsObserver_ failed.");
225             return false;
226         }
227         serviceProxy_->RegisterEnableAbilityListsObserver(enableAbilityListsObserver_);
228     }
229 
230     if (!configObserver_) {
231         configObserver_ = new(std::nothrow) AccessibleAbilityManagerConfigObserverImpl(*this);
232         if (configObserver_ == nullptr) {
233             HILOG_ERROR("Create configObserver_ failed.");
234             return false;
235         }
236         uint32_t ret = serviceProxy_->RegisterConfigObserver(configObserver_);
237         if (ret != 0) {
238             HILOG_ERROR("Register configObserver failed.");
239             return false;
240         }
241     }
242 
243     HILOG_DEBUG("RegisterToService succeaddss");
244     return true;
245 }
246 
GetServiceProxy()247 sptr<Accessibility::IAccessibleAbilityManagerService> AccessibilityConfig::Impl::GetServiceProxy()
248 {
249     if (serviceProxy_ != nullptr) {
250         return serviceProxy_;
251     }
252     return nullptr;
253 }
254 
ResetService(const wptr<IRemoteObject> & remote)255 void AccessibilityConfig::Impl::ResetService(const wptr<IRemoteObject> &remote)
256 {
257     HILOG_DEBUG();
258     std::lock_guard<std::mutex> lock(mutex_);
259     if (serviceProxy_ != nullptr) {
260         sptr<IRemoteObject> object = serviceProxy_->AsObject();
261         if (object != nullptr && (remote == object)) {
262             object->RemoveDeathRecipient(deathRecipient_);
263             serviceProxy_ = nullptr;
264             captionObserver_ = nullptr;
265             enableAbilityListsObserver_ = nullptr;
266             configObserver_ = nullptr;
267             isInitialized_ = false;
268             HILOG_INFO("ResetService ok");
269         }
270     }
271 }
272 
CheckSaStatus()273 bool AccessibilityConfig::Impl::CheckSaStatus()
274 {
275     std::vector<int> dependentSa = {
276         ABILITY_MGR_SERVICE_ID,
277         BUNDLE_MGR_SERVICE_SYS_ABILITY_ID,
278         COMMON_EVENT_SERVICE_ID,
279         DISPLAY_MANAGER_SERVICE_SA_ID,
280         SUBSYS_ACCOUNT_SYS_ABILITY_ID_BEGIN,
281         WINDOW_MANAGER_SERVICE_ID
282     };
283     auto samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
284     if (samgr == nullptr) {
285         return false;
286     }
287 
288     if (std::any_of(dependentSa.begin(), dependentSa.end(), [&](int saId) {
289         return samgr->CheckSystemAbility(saId) == nullptr;
290     })) {
291         return false;
292     }
293     return true;
294 }
295 
EnableAbility(const std::string & name,const uint32_t capabilities)296 Accessibility::RetError AccessibilityConfig::Impl::EnableAbility(const std::string &name, const uint32_t capabilities)
297 {
298     HILOG_INFO("name = [%{private}s] capabilities = [%{private}u]", name.c_str(), capabilities);
299     std::lock_guard<std::mutex> lock(mutex_);
300     if (!GetServiceProxy()) {
301         HILOG_ERROR("Failed to get accessibility service");
302         return Accessibility::RET_ERR_SAMGR;
303     }
304     return GetServiceProxy()->EnableAbility(name, capabilities);
305 }
306 
DisableAbility(const std::string & name)307 Accessibility::RetError AccessibilityConfig::Impl::DisableAbility(const std::string &name)
308 {
309     HILOG_INFO("name = [%{private}s]", name.c_str());
310     std::lock_guard<std::mutex> lock(mutex_);
311     if (!GetServiceProxy()) {
312         HILOG_ERROR("Failed to get accessibility service");
313         return Accessibility::RET_ERR_SAMGR;
314     }
315     return GetServiceProxy()->DisableAbility(name);
316 }
317 
GetCaptionsState(bool & state)318 Accessibility::RetError AccessibilityConfig::Impl::GetCaptionsState(bool &state)
319 {
320     std::lock_guard<std::mutex> lock(mutex_);
321     if (!GetServiceProxy()) {
322         HILOG_ERROR("Failed to get accessibility service");
323         return Accessibility::RET_ERR_SAMGR;
324     }
325     Accessibility::RetError ret = GetServiceProxy()->GetCaptionState(state);
326     HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
327     return ret;
328 }
329 
GetCaptionsProperty(CaptionProperty & caption)330 Accessibility::RetError AccessibilityConfig::Impl::GetCaptionsProperty(CaptionProperty &caption)
331 {
332     std::lock_guard<std::mutex> lock(mutex_);
333     if (!GetServiceProxy()) {
334         HILOG_ERROR("Failed to get accessibility service");
335         return Accessibility::RET_ERR_SAMGR;
336     }
337     Accessibility::RetError ret = GetServiceProxy()->GetCaptionProperty(caption);
338     HILOG_INFO();
339     return ret;
340 }
341 
SetCaptionsProperty(const CaptionProperty & caption)342 Accessibility::RetError AccessibilityConfig::Impl::SetCaptionsProperty(const CaptionProperty& caption)
343 {
344     HILOG_INFO();
345     std::lock_guard<std::mutex> lock(mutex_);
346     if (!GetServiceProxy()) {
347         HILOG_ERROR("Failed to get accessibility service");
348         return Accessibility::RET_ERR_SAMGR;
349     }
350     return GetServiceProxy()->SetCaptionProperty(caption);
351 }
352 
SetCaptionsState(const bool state)353 Accessibility::RetError AccessibilityConfig::Impl::SetCaptionsState(const bool state)
354 {
355     HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
356     std::lock_guard<std::mutex> lock(mutex_);
357     if (!GetServiceProxy()) {
358         HILOG_ERROR("Failed to get accessibility service");
359         return Accessibility::RET_ERR_SAMGR;
360     }
361     return GetServiceProxy()->SetCaptionState(state);
362 }
363 
NotifyCaptionStateChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const bool state)364 void AccessibilityConfig::Impl::NotifyCaptionStateChanged(
365     const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const bool state)
366 {
367     HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
368     for (auto &observer : observers) {
369         if (observer) {
370             ConfigValue configValue;
371             configValue.captionState = state;
372             observer->OnConfigChanged(CONFIG_CAPTION_STATE, configValue);
373         } else {
374             HILOG_ERROR("end configObservers_ is null");
375         }
376     }
377 }
378 
NotifyCaptionChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const CaptionProperty & captionProperty)379 void AccessibilityConfig::Impl::NotifyCaptionChanged(
380     const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const CaptionProperty &captionProperty)
381 {
382     HILOG_INFO();
383     for (auto &observer : observers) {
384         if (observer) {
385             ConfigValue configValue;
386             configValue.captionStyle = captionProperty_;
387             observer->OnConfigChanged(CONFIG_CAPTION_STYLE, configValue);
388         } else {
389             HILOG_ERROR("end observers is null");
390         }
391     }
392 }
393 
SubscribeConfigObserver(const CONFIG_ID id,const std::shared_ptr<AccessibilityConfigObserver> & observer,const bool retFlag)394 Accessibility::RetError AccessibilityConfig::Impl::SubscribeConfigObserver(const CONFIG_ID id,
395     const std::shared_ptr<AccessibilityConfigObserver> &observer, const bool retFlag)
396 {
397     HILOG_DEBUG("id = [%{public}d]", static_cast<int32_t>(id));
398     std::lock_guard<std::mutex> lock(mutex_);
399     std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
400         configObservers_.find(id);
401     if (it != configObservers_.end()) {
402         it->second.push_back(observer);
403         HILOG_DEBUG("configObservers->second.size%{public}zu", it->second.size());
404     } else {
405         std::vector<std::shared_ptr<AccessibilityConfigObserver>> ob;
406         ob.push_back(observer);
407         configObservers_.insert(std::make_pair(id, ob));
408         HILOG_DEBUG("configObservers->second.size%{public}zu", ob.size());
409     }
410 
411     if (retFlag && observer) {
412         NotifyImmediately(id, observer);
413     }
414     return Accessibility::RET_OK;
415 }
416 
UnsubscribeConfigObserver(const CONFIG_ID id,const std::shared_ptr<AccessibilityConfigObserver> & observer)417 Accessibility::RetError AccessibilityConfig::Impl::UnsubscribeConfigObserver(const CONFIG_ID id,
418     const std::shared_ptr<AccessibilityConfigObserver> &observer)
419 {
420     HILOG_INFO("id = [%{public}d]", static_cast<int32_t>(id));
421     std::lock_guard<std::mutex> lock(mutex_);
422     std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
423         configObservers_.find(id);
424     if (it != configObservers_.end()) {
425         for (auto iter = it->second.begin(); iter != it->second.end(); iter++) {
426             if (*iter == observer) {
427                 HILOG_DEBUG("erase observer");
428                 it->second.erase(iter);
429                 HILOG_DEBUG("observer's size is %{public}zu", it->second.size());
430                 return Accessibility::RET_OK;
431             }
432         }
433     } else {
434         HILOG_DEBUG("%{public}d has not subscribed ", id);
435     }
436     return Accessibility::RET_OK;
437 }
438 
OnAccessibleAbilityManagerCaptionPropertyChanged(const CaptionProperty & property)439 void AccessibilityConfig::Impl::OnAccessibleAbilityManagerCaptionPropertyChanged(const CaptionProperty& property)
440 {
441     HILOG_DEBUG();
442     std::vector<std::shared_ptr<AccessibilityConfigObserver>> observers;
443     {
444         std::lock_guard<std::mutex> lock(mutex_);
445         if (captionProperty_.GetFontScale() == property.GetFontScale() &&
446             captionProperty_.GetFontColor() == property.GetFontColor() &&
447             !strcmp(captionProperty_.GetFontFamily().c_str(), property.GetFontFamily().c_str()) &&
448             !strcmp(captionProperty_.GetFontEdgeType().c_str(), property.GetFontEdgeType().c_str()) &&
449             captionProperty_.GetBackgroundColor() == property.GetBackgroundColor() &&
450             captionProperty_.GetWindowColor() == property.GetWindowColor()) {
451             return;
452         }
453         captionProperty_ = property;
454         std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
455             configObservers_.find(CONFIG_CAPTION_STYLE);
456         if (it == configObservers_.end()) {
457             return;
458         }
459         observers = it->second;
460     }
461 
462     NotifyCaptionChanged(observers, property);
463 }
464 
SetScreenMagnificationState(const bool state)465 Accessibility::RetError AccessibilityConfig::Impl::SetScreenMagnificationState(const bool state)
466 {
467     HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
468     std::lock_guard<std::mutex> lock(mutex_);
469     if (!GetServiceProxy()) {
470         HILOG_ERROR("Failed to get accessibility service");
471         return Accessibility::RET_ERR_SAMGR;
472     }
473     return GetServiceProxy()->SetScreenMagnificationState(state);
474 }
475 
SetShortKeyState(const bool state)476 Accessibility::RetError AccessibilityConfig::Impl::SetShortKeyState(const bool state)
477 {
478     HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
479     std::lock_guard<std::mutex> lock(mutex_);
480     if (!GetServiceProxy()) {
481         HILOG_ERROR("Failed to get accessibility service");
482         return Accessibility::RET_ERR_SAMGR;
483     }
484     return GetServiceProxy()->SetShortKeyState(state);
485 }
486 
SetMouseKeyState(const bool state)487 Accessibility::RetError AccessibilityConfig::Impl::SetMouseKeyState(const bool state)
488 {
489     HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
490     std::lock_guard<std::mutex> lock(mutex_);
491     if (!GetServiceProxy()) {
492         HILOG_ERROR("Failed to get accessibility service");
493         return Accessibility::RET_ERR_SAMGR;
494     }
495     return GetServiceProxy()->SetMouseKeyState(state);
496 }
497 
GetScreenMagnificationState(bool & state)498 Accessibility::RetError AccessibilityConfig::Impl::GetScreenMagnificationState(bool &state)
499 {
500     std::lock_guard<std::mutex> lock(mutex_);
501     if (!GetServiceProxy()) {
502         HILOG_ERROR("Failed to get accessibility service");
503         return Accessibility::RET_ERR_SAMGR;
504     }
505 
506     Accessibility::RetError ret = GetServiceProxy()->GetScreenMagnificationState(state);
507     HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
508     return ret;
509 }
510 
GetShortKeyState(bool & state)511 Accessibility::RetError AccessibilityConfig::Impl::GetShortKeyState(bool &state)
512 {
513     std::lock_guard<std::mutex> lock(mutex_);
514     if (!GetServiceProxy()) {
515         HILOG_ERROR("Failed to get accessibility service");
516         return Accessibility::RET_ERR_SAMGR;
517     }
518 
519     Accessibility::RetError ret = GetServiceProxy()->GetShortKeyState(state);
520     HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
521     return ret;
522 }
523 
GetMouseKeyState(bool & state)524 Accessibility::RetError AccessibilityConfig::Impl::GetMouseKeyState(bool &state)
525 {
526     std::lock_guard<std::mutex> lock(mutex_);
527     if (!GetServiceProxy()) {
528         HILOG_ERROR("Failed to get accessibility service");
529         return Accessibility::RET_ERR_SAMGR;
530     }
531 
532     Accessibility::RetError ret = GetServiceProxy()->GetMouseKeyState(state);
533     HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
534     return ret;
535 }
536 
UpdateCaptionEnabled(const bool enabled)537 void AccessibilityConfig::Impl::UpdateCaptionEnabled(const bool enabled)
538 {
539     std::vector<std::shared_ptr<AccessibilityConfigObserver>> observers;
540     {
541         std::lock_guard<std::mutex> lock(mutex_);
542         if (captionState_ == enabled) {
543             return;
544         }
545         captionState_ = enabled;
546         std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
547             configObservers_.find(CONFIG_CAPTION_STATE);
548         if (it == configObservers_.end()) {
549             return;
550         }
551         observers = it->second;
552     }
553     NotifyCaptionStateChanged(observers, enabled);
554 }
555 
UpdateScreenMagnificationEnabled(const bool enabled)556 void AccessibilityConfig::Impl::UpdateScreenMagnificationEnabled(const bool enabled)
557 {
558     std::vector<std::shared_ptr<AccessibilityConfigObserver>> observers;
559     {
560         std::lock_guard<std::mutex> lock(mutex_);
561         if (screenMagnifier_ == enabled) {
562             return;
563         }
564         screenMagnifier_ = enabled;
565         std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
566             configObservers_.find(CONFIG_SCREEN_MAGNIFICATION);
567         if (it == configObservers_.end()) {
568             return;
569         }
570         observers = it->second;
571     }
572     NotifyScreenMagnificationChanged(observers, enabled);
573 }
574 
UpdateShortKeyEnabled(const bool enabled)575 void AccessibilityConfig::Impl::UpdateShortKeyEnabled(const bool enabled)
576 {
577     std::vector<std::shared_ptr<AccessibilityConfigObserver>> observers;
578     {
579         std::lock_guard<std::mutex> lock(mutex_);
580         if (shortkey_ == enabled) {
581             return;
582         }
583         shortkey_ = enabled;
584         std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
585             configObservers_.find(CONFIG_SHORT_KEY);
586         if (it == configObservers_.end()) {
587             return;
588         }
589         observers = it->second;
590     }
591     NotifyShortKeyChanged(observers, enabled);
592 }
593 
UpdateMouseKeyEnabled(const bool enabled)594 void AccessibilityConfig::Impl::UpdateMouseKeyEnabled(const bool enabled)
595 {
596     std::vector<std::shared_ptr<AccessibilityConfigObserver>> observers;
597     {
598         std::lock_guard<std::mutex> lock(mutex_);
599         if (mouseKey_ == enabled) {
600             return;
601         }
602         mouseKey_ = enabled;
603         std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
604             configObservers_.find(CONFIG_MOUSE_KEY);
605         if (it == configObservers_.end()) {
606             return;
607         }
608         observers = it->second;
609     }
610     NotifyMouseKeyChanged(observers, enabled);
611 }
612 
UpdateAudioMonoEnabled(const bool enabled)613 void AccessibilityConfig::Impl::UpdateAudioMonoEnabled(const bool enabled)
614 {
615     std::vector<std::shared_ptr<AccessibilityConfigObserver>> observers;
616     {
617         std::lock_guard<std::mutex> lock(mutex_);
618         if (audioMono_ == enabled) {
619             return;
620         }
621         audioMono_ = enabled;
622         std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
623             configObservers_.find(CONFIG_AUDIO_MONO);
624         if (it == configObservers_.end()) {
625             return;
626         }
627         observers = it->second;
628     }
629     NotifyAudioMonoChanged(observers, enabled);
630 }
631 
UpdateAnimationOffEnabled(const bool enabled)632 void AccessibilityConfig::Impl::UpdateAnimationOffEnabled(const bool enabled)
633 {
634     std::vector<std::shared_ptr<AccessibilityConfigObserver>> observers;
635     {
636         std::lock_guard<std::mutex> lock(mutex_);
637         if (animationOff_ == enabled) {
638             return;
639         }
640         animationOff_ = enabled;
641         std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
642             configObservers_.find(CONFIG_ANIMATION_OFF);
643         if (it == configObservers_.end()) {
644             return;
645         }
646         observers = it->second;
647     }
648 
649     NotifyAnimationOffChanged(observers, enabled);
650 }
651 
UpdateInvertColorEnabled(const bool enabled)652 void AccessibilityConfig::Impl::UpdateInvertColorEnabled(const bool enabled)
653 {
654     std::vector<std::shared_ptr<AccessibilityConfigObserver>> observers;
655     {
656         std::lock_guard<std::mutex> lock(mutex_);
657         if (invertColor_ == enabled) {
658             return;
659         }
660         invertColor_ = enabled;
661         std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
662             configObservers_.find(CONFIG_INVERT_COLOR);
663         if (it == configObservers_.end()) {
664             return;
665         }
666         observers = it->second;
667     }
668     NotifyInvertColorChanged(observers, enabled);
669 }
670 
UpdateHighContrastTextEnabled(const bool enabled)671 void AccessibilityConfig::Impl::UpdateHighContrastTextEnabled(const bool enabled)
672 {
673     HILOG_INFO("enabled = [%{public}s]", enabled ? "True" : "False");
674     std::vector<std::shared_ptr<AccessibilityConfigObserver>> observers;
675     {
676         std::lock_guard<std::mutex> lock(mutex_);
677         if (highContrastText_ == enabled) {
678             return;
679         }
680         highContrastText_ = enabled;
681         std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
682             configObservers_.find(CONFIG_HIGH_CONTRAST_TEXT);
683         if (it == configObservers_.end()) {
684             return;
685         }
686         observers = it->second;
687     }
688     NotifyHighContrastTextChanged(observers, enabled);
689 }
690 
UpdateDaltonizationStateEnabled(const bool enabled)691 void AccessibilityConfig::Impl::UpdateDaltonizationStateEnabled(const bool enabled)
692 {
693     HILOG_INFO("enabled = [%{public}s]", enabled ? "True" : "False");
694     std::vector<std::shared_ptr<AccessibilityConfigObserver>> observers;
695     {
696         std::lock_guard<std::mutex> lock(mutex_);
697         if (daltonizationState_ == enabled) {
698             return;
699         }
700         daltonizationState_ = enabled;
701         std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
702             configObservers_.find(CONFIG_DALTONIZATION_COLOR_FILTER);
703         if (it == configObservers_.end()) {
704             return;
705         }
706         observers = it->second;
707     }
708     NotifyDaltonizationStateChanged(observers, enabled);
709     if (!enabled) {
710         HILOG_DEBUG();
711         NotifyDaltonizationColorFilterChanged(observers, Normal);
712     } else {
713         HILOG_DEBUG();
714         NotifyDaltonizationColorFilterChanged(observers, daltonizationColorFilter_);
715     }
716 }
717 
UpdateIgnoreRepeatClickStateEnabled(const bool enabled)718 void AccessibilityConfig::Impl::UpdateIgnoreRepeatClickStateEnabled(const bool enabled)
719 {
720     std::vector<std::shared_ptr<AccessibilityConfigObserver>> observers;
721     {
722         std::lock_guard<std::mutex> lock(mutex_);
723         if (ignoreRepeatClickState_ == enabled) {
724             return;
725         }
726         ignoreRepeatClickState_ = enabled;
727         std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
728             configObservers_.find(CONFIG_IGNORE_REPEAT_CLICK_STATE);
729         if (it == configObservers_.end()) {
730             return;
731         }
732         observers = it->second;
733     }
734     NotifyIgnoreRepeatClickStateChanged(observers, enabled);
735 }
736 
NotifyScreenMagnificationChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const bool state)737 void AccessibilityConfig::Impl::NotifyScreenMagnificationChanged(
738     const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const bool state)
739 {
740     HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
741     for (auto &observer : observers) {
742         if (observer) {
743             ConfigValue configValue;
744             configValue.screenMagnifier = state;
745             observer->OnConfigChanged(CONFIG_SCREEN_MAGNIFICATION, configValue);
746         } else {
747             HILOG_ERROR("end configObservers_ is null");
748         }
749     }
750 }
751 
NotifyShortKeyChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const bool state)752 void AccessibilityConfig::Impl::NotifyShortKeyChanged(
753     const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const bool state)
754 {
755     HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
756     for (auto &observer : observers) {
757         if (observer) {
758             ConfigValue configValue;
759             configValue.shortkey = state;
760             observer->OnConfigChanged(CONFIG_SHORT_KEY, configValue);
761         } else {
762             HILOG_ERROR("end configObservers_ is null");
763         }
764     }
765 }
766 
NotifyMouseKeyChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const bool state)767 void AccessibilityConfig::Impl::NotifyMouseKeyChanged(
768     const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const bool state)
769 {
770     HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
771     for (auto &observer : observers) {
772         if (observer) {
773             ConfigValue configValue;
774             configValue.mouseKey = state;
775             observer->OnConfigChanged(CONFIG_MOUSE_KEY, configValue);
776         } else {
777             HILOG_ERROR("end configObservers_ is null");
778         }
779     }
780 }
781 
NotifyInvertColorChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const bool state)782 void AccessibilityConfig::Impl::NotifyInvertColorChanged(
783     const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const bool state)
784 {
785     HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
786     for (auto &observer : observers) {
787         if (observer) {
788             ConfigValue configValue;
789             configValue.invertColor = state;
790             observer->OnConfigChanged(CONFIG_INVERT_COLOR, configValue);
791         } else {
792             HILOG_ERROR("end configObservers_ is null");
793         }
794     }
795 }
796 
NotifyHighContrastTextChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const bool state)797 void AccessibilityConfig::Impl::NotifyHighContrastTextChanged(
798     const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const bool state)
799 {
800     HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
801     for (auto &observer : observers) {
802         if (observer) {
803             ConfigValue configValue;
804             configValue.highContrastText = state;
805             observer->OnConfigChanged(CONFIG_HIGH_CONTRAST_TEXT, configValue);
806         } else {
807             HILOG_ERROR("end configObservers_ is null");
808         }
809     }
810 }
811 
NotifyDaltonizationStateChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const bool state)812 void AccessibilityConfig::Impl::NotifyDaltonizationStateChanged(
813     const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const bool state)
814 {
815     HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
816     for (auto &observer : observers) {
817         if (observer) {
818             ConfigValue configValue;
819             configValue.daltonizationState = state;
820             observer->OnConfigChanged(CONFIG_DALTONIZATION_STATE, configValue);
821         } else {
822             HILOG_ERROR("end configObservers_ is null");
823         }
824     }
825 }
826 
NotifyAudioMonoChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const bool state)827 void AccessibilityConfig::Impl::NotifyAudioMonoChanged(
828     const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const bool state)
829 {
830     HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
831     for (auto &observer : observers) {
832         if (observer) {
833             ConfigValue configValue;
834             configValue.audioMono = state;
835             observer->OnConfigChanged(CONFIG_AUDIO_MONO, configValue);
836         } else {
837             HILOG_ERROR("end configObservers_ is null");
838         }
839     }
840 }
841 
NotifyAnimationOffChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const bool state)842 void AccessibilityConfig::Impl::NotifyAnimationOffChanged(
843     const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const bool state)
844 {
845     HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
846     for (auto &observer : observers) {
847         if (observer) {
848             ConfigValue configValue;
849             configValue.animationOff = state;
850             observer->OnConfigChanged(CONFIG_ANIMATION_OFF, configValue);
851         } else {
852             HILOG_ERROR("end configObservers_ is null");
853         }
854     }
855 }
856 
SetMouseAutoClick(const int32_t time)857 Accessibility::RetError AccessibilityConfig::Impl::SetMouseAutoClick(const int32_t time)
858 {
859     HILOG_INFO("time = [%{public}d]", time);
860     std::lock_guard<std::mutex> lock(mutex_);
861     if (!GetServiceProxy()) {
862         HILOG_ERROR("Failed to get accessibility service");
863         return Accessibility::RET_ERR_SAMGR;
864     }
865     return GetServiceProxy()->SetMouseAutoClick(time);
866 }
867 
SetShortkeyTarget(const std::string & name)868 Accessibility::RetError AccessibilityConfig::Impl::SetShortkeyTarget(const std::string& name)
869 {
870     HILOG_INFO("name = [%{public}s]", name.c_str());
871     std::lock_guard<std::mutex> lock(mutex_);
872     if (!GetServiceProxy()) {
873         HILOG_ERROR("Failed to get accessibility service");
874         return Accessibility::RET_ERR_SAMGR;
875     }
876     return GetServiceProxy()->SetShortkeyTarget(name);
877 }
878 
SetShortkeyMultiTarget(const std::vector<std::string> & name)879 Accessibility::RetError AccessibilityConfig::Impl::SetShortkeyMultiTarget(const std::vector<std::string>& name)
880 {
881     HILOG_INFO("start");
882     std::lock_guard<std::mutex> lock(mutex_);
883     if (!GetServiceProxy()) {
884         HILOG_ERROR("Failed to get accessibility service");
885         return Accessibility::RET_ERR_SAMGR;
886     }
887     return GetServiceProxy()->SetShortkeyMultiTarget(name);
888 }
889 
GetMouseAutoClick(int32_t & time)890 Accessibility::RetError AccessibilityConfig::Impl::GetMouseAutoClick(int32_t &time)
891 {
892     std::lock_guard<std::mutex> lock(mutex_);
893     if (!GetServiceProxy()) {
894         HILOG_ERROR("Failed to get accessibility service");
895         return Accessibility::RET_ERR_SAMGR;
896     }
897 
898     Accessibility::RetError ret = GetServiceProxy()->GetMouseAutoClick(time);
899     HILOG_INFO("time = [%{public}d]", time);
900     return ret;
901 }
902 
GetShortkeyTarget(std::string & name)903 Accessibility::RetError AccessibilityConfig::Impl::GetShortkeyTarget(std::string &name)
904 {
905     std::lock_guard<std::mutex> lock(mutex_);
906     if (!GetServiceProxy()) {
907         HILOG_ERROR("Failed to get accessibility service");
908         return Accessibility::RET_ERR_SAMGR;
909     }
910 
911     Accessibility::RetError ret = GetServiceProxy()->GetShortkeyTarget(name);
912     HILOG_INFO("name = [%{public}s]", name.c_str());
913     return ret;
914 }
915 
GetShortkeyMultiTarget(std::vector<std::string> & name)916 Accessibility::RetError AccessibilityConfig::Impl::GetShortkeyMultiTarget(std::vector<std::string> &name)
917 {
918     std::lock_guard<std::mutex> lock(mutex_);
919     if (!GetServiceProxy()) {
920         HILOG_ERROR("Failed to get accessibility service");
921         return Accessibility::RET_ERR_SAMGR;
922     }
923 
924     Accessibility::RetError ret = GetServiceProxy()->GetShortkeyMultiTarget(name);
925     return ret;
926 }
927 
NotifyShortkeyTargetChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const std::string & shortkey_target)928 void AccessibilityConfig::Impl::NotifyShortkeyTargetChanged(
929     const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const std::string &shortkey_target)
930 {
931     HILOG_INFO("shortkey_target = [%{public}s]", shortkey_target.c_str());
932     for (auto &observer : observers) {
933         if (observer) {
934             ConfigValue configValue;
935             configValue.shortkey_target = shortkeyTarget_;
936             observer->OnConfigChanged(CONFIG_SHORT_KEY_TARGET, configValue);
937         } else {
938             HILOG_ERROR("end configObservers_ is null");
939         }
940     }
941 }
942 
NotifyShortkeyMultiTargetChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const std::vector<std::string> & shortkeyMultiTarget)943 void AccessibilityConfig::Impl::NotifyShortkeyMultiTargetChanged(
944     const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers,
945     const std::vector<std::string> &shortkeyMultiTarget)
946 {
947     HILOG_DEBUG("start");
948     for (auto &observer : observers) {
949         if (observer) {
950             ConfigValue configValue;
951             configValue.shortkeyMultiTarget = shortkeyMultiTarget;
952             observer->OnConfigChanged(CONFIG_SHORT_KEY_MULTI_TARGET, configValue);
953         } else {
954             HILOG_ERROR("end configObservers_ is null");
955         }
956     }
957 }
958 
NotifyMouseAutoClickChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const uint32_t mouseAutoClick)959 void AccessibilityConfig::Impl::NotifyMouseAutoClickChanged(
960     const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const uint32_t mouseAutoClick)
961 {
962     HILOG_INFO("mouseAutoClick = [%{public}u]", mouseAutoClick);
963     for (auto &observer : observers) {
964         if (observer) {
965             ConfigValue configValue;
966             configValue.mouseAutoClick = mouseAutoClick_;
967             observer->OnConfigChanged(CONFIG_MOUSE_AUTOCLICK, configValue);
968         } else {
969             HILOG_ERROR("end configObservers_ is null");
970         }
971     }
972 }
973 
NotifyAudioBalanceChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const float audioBalance)974 void AccessibilityConfig::Impl::NotifyAudioBalanceChanged(
975     const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const float audioBalance)
976 {
977     HILOG_INFO("audioBalance = [%{public}f]", audioBalance);
978     for (auto &observer : observers) {
979         if (observer) {
980             ConfigValue configValue;
981             configValue.audioBalance = audioBalance;
982             observer->OnConfigChanged(CONFIG_AUDIO_BALANCE, configValue);
983         } else {
984             HILOG_ERROR("end configObservers_ is null");
985         }
986     }
987 }
988 
NotifyBrightnessDiscountChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const float brightnessDiscount)989 void AccessibilityConfig::Impl::NotifyBrightnessDiscountChanged(
990     const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const float brightnessDiscount)
991 {
992     HILOG_INFO("brightnessDiscount = [%{public}f]", brightnessDiscount);
993     for (auto &observer : observers) {
994         if (observer) {
995             ConfigValue configValue;
996             configValue.brightnessDiscount = brightnessDiscount;
997             observer->OnConfigChanged(CONFIG_BRIGHTNESS_DISCOUNT, configValue);
998         } else {
999             HILOG_ERROR("end configObservers_ is null");
1000         }
1001     }
1002 }
1003 
NotifyContentTimeoutChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const uint32_t contentTimeout)1004 void AccessibilityConfig::Impl::NotifyContentTimeoutChanged(
1005     const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const uint32_t contentTimeout)
1006 {
1007     HILOG_INFO("contentTimeout = [%{public}u]", contentTimeout);
1008     for (auto &observer : observers) {
1009         if (observer) {
1010             ConfigValue configValue;
1011             configValue.contentTimeout = contentTimeout;
1012             observer->OnConfigChanged(CONFIG_CONTENT_TIMEOUT, configValue);
1013         } else {
1014             HILOG_ERROR("end configObservers_ is null");
1015         }
1016     }
1017 }
1018 
NotifyDaltonizationColorFilterChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const uint32_t daltonizationColorFilter)1019 void AccessibilityConfig::Impl::NotifyDaltonizationColorFilterChanged(
1020     const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const uint32_t daltonizationColorFilter)
1021 {
1022     HILOG_INFO("daltonizationColorFilter = [%{public}u]", daltonizationColorFilter);
1023     for (auto &observer : observers) {
1024         if (observer) {
1025             ConfigValue configValue;
1026             if (!daltonizationState_) {
1027                 HILOG_DEBUG();
1028                 configValue.daltonizationColorFilter = Normal;
1029                 observer->OnConfigChanged(CONFIG_DALTONIZATION_COLOR_FILTER, configValue);
1030             } else {
1031                 configValue.daltonizationColorFilter = static_cast<DALTONIZATION_TYPE>(daltonizationColorFilter);
1032                 observer->OnConfigChanged(CONFIG_DALTONIZATION_COLOR_FILTER, configValue);
1033             }
1034         } else {
1035             HILOG_ERROR("end configObservers_ is null");
1036         }
1037     }
1038 }
1039 
NotifyClickResponseTimeChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const uint32_t clickResponseTime)1040 void AccessibilityConfig::Impl::NotifyClickResponseTimeChanged(
1041     const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const uint32_t clickResponseTime)
1042 {
1043     HILOG_INFO("daltonizationColorFilter = [%{public}u]", clickResponseTime);
1044     for (auto &observer : observers) {
1045         if (observer) {
1046             ConfigValue configValue;
1047             configValue.clickResponseTime = static_cast<CLICK_RESPONSE_TIME>(clickResponseTime);
1048             observer->OnConfigChanged(CONIFG_CLICK_RESPONSE_TIME, configValue);
1049         } else {
1050             HILOG_ERROR("end configObservers_ is null");
1051         }
1052     }
1053 }
1054 
NotifyIgnoreRepeatClickTimeChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const uint32_t time)1055 void AccessibilityConfig::Impl::NotifyIgnoreRepeatClickTimeChanged(
1056     const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const uint32_t time)
1057 {
1058     HILOG_INFO("daltonizationColorFilter = [%{public}u]", time);
1059     for (auto &observer : observers) {
1060         if (observer) {
1061             ConfigValue configValue;
1062             configValue.ignoreRepeatClickTime = static_cast<IGNORE_REPEAT_CLICK_TIME>(time);
1063             observer->OnConfigChanged(CONFIG_IGNORE_REPEAT_CLICK_TIME, configValue);
1064         } else {
1065             HILOG_ERROR("end configObservers_ is null");
1066         }
1067     }
1068 }
1069 
NotifyIgnoreRepeatClickStateChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> & observers,const bool state)1070 void AccessibilityConfig::Impl::NotifyIgnoreRepeatClickStateChanged(
1071     const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, const bool state)
1072 {
1073     HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
1074     for (auto &observer : observers) {
1075         if (observer) {
1076             ConfigValue configValue;
1077             configValue.ignoreRepeatClickState = state;
1078             observer->OnConfigChanged(CONFIG_IGNORE_REPEAT_CLICK_STATE, configValue);
1079         } else {
1080             HILOG_ERROR("end configObservers_ is null");
1081         }
1082     }
1083 }
1084 
SetHighContrastTextState(const bool state)1085 Accessibility::RetError AccessibilityConfig::Impl::SetHighContrastTextState(const bool state)
1086 {
1087     HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
1088     std::lock_guard<std::mutex> lock(mutex_);
1089     if (!GetServiceProxy()) {
1090         HILOG_ERROR("Failed to get accessibility service");
1091         return Accessibility::RET_ERR_SAMGR;
1092     }
1093     return GetServiceProxy()->SetHighContrastTextState(state);
1094 }
1095 
SetInvertColorState(const bool state)1096 Accessibility::RetError AccessibilityConfig::Impl::SetInvertColorState(const bool state)
1097 {
1098     HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
1099     std::lock_guard<std::mutex> lock(mutex_);
1100     if (!GetServiceProxy()) {
1101         HILOG_ERROR("Failed to get accessibility service");
1102         return Accessibility::RET_ERR_SAMGR;
1103     }
1104     return GetServiceProxy()->SetInvertColorState(state);
1105 }
1106 
SetDaltonizationState(const bool state)1107 Accessibility::RetError AccessibilityConfig::Impl::SetDaltonizationState(const bool state)
1108 {
1109     HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
1110     std::lock_guard<std::mutex> lock(mutex_);
1111     if (!GetServiceProxy()) {
1112         HILOG_ERROR("Failed to get accessibility service");
1113         return Accessibility::RET_ERR_SAMGR;
1114     }
1115     return GetServiceProxy()->SetDaltonizationState(state);
1116 }
1117 
SetDaltonizationColorFilter(const DALTONIZATION_TYPE type)1118 Accessibility::RetError AccessibilityConfig::Impl::SetDaltonizationColorFilter(const DALTONIZATION_TYPE type)
1119 {
1120     HILOG_INFO("type = [%{public}u]", static_cast<uint32_t>(type));
1121     std::lock_guard<std::mutex> lock(mutex_);
1122     if (!GetServiceProxy()) {
1123         HILOG_ERROR("Failed to get accessibility service");
1124         return Accessibility::RET_ERR_SAMGR;
1125     }
1126     return GetServiceProxy()->SetDaltonizationColorFilter(type);
1127 }
1128 
SetContentTimeout(const uint32_t timer)1129 Accessibility::RetError AccessibilityConfig::Impl::SetContentTimeout(const uint32_t timer)
1130 {
1131     HILOG_INFO("timer = [%{public}u]", timer);
1132     std::lock_guard<std::mutex> lock(mutex_);
1133     if (!GetServiceProxy()) {
1134         HILOG_ERROR("Failed to get accessibility service");
1135         return Accessibility::RET_ERR_SAMGR;
1136     }
1137     return GetServiceProxy()->SetContentTimeout(timer);
1138 }
1139 
SetAnimationOffState(const bool state)1140 Accessibility::RetError AccessibilityConfig::Impl::SetAnimationOffState(const bool state)
1141 {
1142     HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
1143     std::lock_guard<std::mutex> lock(mutex_);
1144     if (!GetServiceProxy()) {
1145         HILOG_ERROR("Failed to get accessibility service");
1146         return Accessibility::RET_ERR_SAMGR;
1147     }
1148     return GetServiceProxy()->SetAnimationOffState(state);
1149 }
1150 
SetBrightnessDiscount(const float brightness)1151 Accessibility::RetError AccessibilityConfig::Impl::SetBrightnessDiscount(const float brightness)
1152 {
1153     HILOG_INFO("brightness = [%{public}f]", brightness);
1154     std::lock_guard<std::mutex> lock(mutex_);
1155     if (!GetServiceProxy()) {
1156         HILOG_ERROR("Failed to get accessibility service");
1157         return Accessibility::RET_ERR_SAMGR;
1158     }
1159     return GetServiceProxy()->SetBrightnessDiscount(brightness);
1160 }
1161 
SetAudioMonoState(const bool state)1162 Accessibility::RetError AccessibilityConfig::Impl::SetAudioMonoState(const bool state)
1163 {
1164     HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
1165     std::lock_guard<std::mutex> lock(mutex_);
1166     if (!GetServiceProxy()) {
1167         HILOG_ERROR("Failed to get accessibility service");
1168         return Accessibility::RET_ERR_SAMGR;
1169     }
1170     return GetServiceProxy()->SetAudioMonoState(state);
1171 }
1172 
SetAudioBalance(const float balance)1173 Accessibility::RetError AccessibilityConfig::Impl::SetAudioBalance(const float balance)
1174 {
1175     HILOG_INFO("balance = [%{public}f]", balance);
1176     std::lock_guard<std::mutex> lock(mutex_);
1177     if (!GetServiceProxy()) {
1178         HILOG_ERROR("Failed to get accessibility service");
1179         return Accessibility::RET_ERR_SAMGR;
1180     }
1181     return GetServiceProxy()->SetAudioBalance(balance);
1182 }
1183 
SetClickResponseTime(const CLICK_RESPONSE_TIME time)1184 Accessibility::RetError AccessibilityConfig::Impl::SetClickResponseTime(const CLICK_RESPONSE_TIME time)
1185 {
1186     HILOG_INFO("click response time = [%{public}u]", time);
1187     std::lock_guard<std::mutex> lock(mutex_);
1188     if (!GetServiceProxy()) {
1189         HILOG_ERROR("Failed to get accessibility service");
1190         return Accessibility::RET_ERR_SAMGR;
1191     }
1192     return GetServiceProxy()->SetClickResponseTime(time);
1193 }
1194 
SetIgnoreRepeatClickState(const bool state)1195 Accessibility::RetError AccessibilityConfig::Impl::SetIgnoreRepeatClickState(const bool state)
1196 {
1197     HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
1198     std::lock_guard<std::mutex> lock(mutex_);
1199     if (!GetServiceProxy()) {
1200         HILOG_ERROR("Failed to get accessibility service");
1201         return Accessibility::RET_ERR_SAMGR;
1202     }
1203     return GetServiceProxy()->SetIgnoreRepeatClickState(state);
1204 }
1205 
SetIgnoreRepeatClickTime(const IGNORE_REPEAT_CLICK_TIME time)1206 Accessibility::RetError AccessibilityConfig::Impl::SetIgnoreRepeatClickTime(const IGNORE_REPEAT_CLICK_TIME time)
1207 {
1208     HILOG_INFO("ignore repeat click time = [%{public}u]", time);
1209     std::lock_guard<std::mutex> lock(mutex_);
1210     if (!GetServiceProxy()) {
1211         HILOG_ERROR("Failed to get accessibility service");
1212         return Accessibility::RET_ERR_SAMGR;
1213     }
1214     return GetServiceProxy()->SetIgnoreRepeatClickTime(time);
1215 }
1216 
GetInvertColorState(bool & state)1217 Accessibility::RetError AccessibilityConfig::Impl::GetInvertColorState(bool &state)
1218 {
1219     std::lock_guard<std::mutex> lock(mutex_);
1220     if (!GetServiceProxy()) {
1221         HILOG_ERROR("Failed to get accessibility service");
1222         return Accessibility::RET_ERR_SAMGR;
1223     }
1224 
1225     Accessibility::RetError ret = GetServiceProxy()->GetInvertColorState(state);
1226     HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
1227     return ret;
1228 }
1229 
GetHighContrastTextState(bool & state)1230 Accessibility::RetError AccessibilityConfig::Impl::GetHighContrastTextState(bool &state)
1231 {
1232     std::lock_guard<std::mutex> lock(mutex_);
1233     if (!GetServiceProxy()) {
1234         HILOG_ERROR("Failed to get accessibility service");
1235         return Accessibility::RET_ERR_SAMGR;
1236     }
1237 
1238     Accessibility::RetError ret = GetServiceProxy()->GetHighContrastTextState(state);
1239     HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
1240     return ret;
1241 }
1242 
GetDaltonizationState(bool & state)1243 Accessibility::RetError AccessibilityConfig::Impl::GetDaltonizationState(bool &state)
1244 {
1245     std::lock_guard<std::mutex> lock(mutex_);
1246     if (!GetServiceProxy()) {
1247         HILOG_ERROR("Failed to get accessibility service");
1248         return Accessibility::RET_ERR_SAMGR;
1249     }
1250 
1251     Accessibility::RetError ret = GetServiceProxy()->GetDaltonizationState(state);
1252     HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
1253     return ret;
1254 }
1255 
GetDaltonizationColorFilter(DALTONIZATION_TYPE & type)1256 Accessibility::RetError AccessibilityConfig::Impl::GetDaltonizationColorFilter(DALTONIZATION_TYPE &type)
1257 {
1258     std::lock_guard<std::mutex> lock(mutex_);
1259     if (!GetServiceProxy()) {
1260         HILOG_ERROR("Failed to get accessibility service");
1261         return Accessibility::RET_ERR_SAMGR;
1262     }
1263 
1264     uint32_t filterType = 0;
1265     Accessibility::RetError ret = GetServiceProxy()->GetDaltonizationColorFilter(filterType);
1266     type = static_cast<DALTONIZATION_TYPE>(filterType);
1267     HILOG_INFO("type = [%{public}u]", static_cast<uint32_t>(type));
1268     return ret;
1269 }
1270 
GetContentTimeout(uint32_t & timer)1271 Accessibility::RetError AccessibilityConfig::Impl::GetContentTimeout(uint32_t &timer)
1272 {
1273     std::lock_guard<std::mutex> lock(mutex_);
1274     if (!GetServiceProxy()) {
1275         HILOG_ERROR("Failed to get accessibility service");
1276         return Accessibility::RET_ERR_SAMGR;
1277     }
1278 
1279     Accessibility::RetError ret = GetServiceProxy()->GetContentTimeout(timer);
1280     HILOG_INFO("timer = [%{public}u]", timer);
1281     return ret;
1282 }
1283 
GetAnimationOffState(bool & state)1284 Accessibility::RetError AccessibilityConfig::Impl::GetAnimationOffState(bool &state)
1285 {
1286     std::lock_guard<std::mutex> lock(mutex_);
1287     if (!GetServiceProxy()) {
1288         HILOG_ERROR("Failed to get accessibility service");
1289         return Accessibility::RET_ERR_SAMGR;
1290     }
1291 
1292     Accessibility::RetError ret = GetServiceProxy()->GetAnimationOffState(state);
1293     HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
1294     return ret;
1295 }
1296 
GetBrightnessDiscount(float & brightness)1297 Accessibility::RetError AccessibilityConfig::Impl::GetBrightnessDiscount(float &brightness)
1298 {
1299     std::lock_guard<std::mutex> lock(mutex_);
1300     if (!GetServiceProxy()) {
1301         HILOG_ERROR("Failed to get accessibility service");
1302         return Accessibility::RET_ERR_SAMGR;
1303     }
1304 
1305     Accessibility::RetError ret = GetServiceProxy()->GetBrightnessDiscount(brightness);
1306     HILOG_INFO("brightness = [%{public}f]", brightness);
1307     return ret;
1308 }
1309 
GetAudioMonoState(bool & state)1310 Accessibility::RetError AccessibilityConfig::Impl::GetAudioMonoState(bool &state)
1311 {
1312     std::lock_guard<std::mutex> lock(mutex_);
1313     if (!GetServiceProxy()) {
1314         HILOG_ERROR("Failed to get accessibility service");
1315         return Accessibility::RET_ERR_SAMGR;
1316     }
1317 
1318     Accessibility::RetError ret = GetServiceProxy()->GetAudioMonoState(state);
1319     HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
1320     return ret;
1321 }
1322 
GetAudioBalance(float & balance)1323 Accessibility::RetError AccessibilityConfig::Impl::GetAudioBalance(float &balance)
1324 {
1325     std::lock_guard<std::mutex> lock(mutex_);
1326     if (!GetServiceProxy()) {
1327         HILOG_ERROR("Failed to get accessibility service");
1328         return Accessibility::RET_ERR_SAMGR;
1329     }
1330 
1331     Accessibility::RetError ret = GetServiceProxy()->GetAudioBalance(balance);
1332     HILOG_INFO("balance = [%{public}f]", balance);
1333     return ret;
1334 }
1335 
GetClickResponseTime(CLICK_RESPONSE_TIME & time)1336 Accessibility::RetError AccessibilityConfig::Impl::GetClickResponseTime(CLICK_RESPONSE_TIME &time)
1337 {
1338     std::lock_guard<std::mutex> lock(mutex_);
1339     if (!GetServiceProxy()) {
1340         HILOG_ERROR("Failed to get accessibility service");
1341         return Accessibility::RET_ERR_SAMGR;
1342     }
1343 
1344     uint32_t responseTime = 0;
1345     Accessibility::RetError ret = GetServiceProxy()->GetClickResponseTime(responseTime);
1346     time = static_cast<CLICK_RESPONSE_TIME>(responseTime);
1347     HILOG_INFO("click response time = [%{public}u]", time);
1348     return ret;
1349 }
1350 
GetIgnoreRepeatClickState(bool & state)1351 Accessibility::RetError AccessibilityConfig::Impl::GetIgnoreRepeatClickState(bool &state)
1352 {
1353     std::lock_guard<std::mutex> lock(mutex_);
1354     if (!GetServiceProxy()) {
1355         HILOG_ERROR("Failed to get accessibility service");
1356         return Accessibility::RET_ERR_SAMGR;
1357     }
1358 
1359     Accessibility::RetError ret = GetServiceProxy()->GetIgnoreRepeatClickState(state);
1360     HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
1361     return ret;
1362 }
1363 
GetIgnoreRepeatClickTime(IGNORE_REPEAT_CLICK_TIME & time)1364 Accessibility::RetError AccessibilityConfig::Impl::GetIgnoreRepeatClickTime(IGNORE_REPEAT_CLICK_TIME &time)
1365 {
1366     std::lock_guard<std::mutex> lock(mutex_);
1367     if (!GetServiceProxy()) {
1368         HILOG_ERROR("Failed to get accessibility service");
1369         return Accessibility::RET_ERR_SAMGR;
1370     }
1371 
1372     uint32_t ignoreRepeatClickTime = 0;
1373     Accessibility::RetError ret = GetServiceProxy()->GetIgnoreRepeatClickTime(ignoreRepeatClickTime);
1374     time = static_cast<IGNORE_REPEAT_CLICK_TIME>(ignoreRepeatClickTime);
1375     HILOG_INFO("ignore repeat click time = [%{public}u]", time);
1376     return ret;
1377 }
1378 
SubscribeEnableAbilityListsObserver(const std::shared_ptr<AccessibilityEnableAbilityListsObserver> & observer)1379 Accessibility::RetError AccessibilityConfig::Impl::SubscribeEnableAbilityListsObserver(
1380     const std::shared_ptr<AccessibilityEnableAbilityListsObserver> &observer)
1381 {
1382     HILOG_INFO();
1383     std::lock_guard<std::mutex> lock(mutex_);
1384     if (std::any_of(enableAbilityListsObservers_.begin(), enableAbilityListsObservers_.end(),
1385         [&observer](const std::shared_ptr<AccessibilityEnableAbilityListsObserver> &listObserver) {
1386             return listObserver == observer;
1387             })) {
1388         HILOG_ERROR("the observer is exist");
1389         return Accessibility::RET_OK;
1390     }
1391     enableAbilityListsObservers_.push_back(observer);
1392     HILOG_DEBUG("observer's size is %{public}zu", enableAbilityListsObservers_.size());
1393     return Accessibility::RET_OK;
1394 }
1395 
UnsubscribeEnableAbilityListsObserver(const std::shared_ptr<AccessibilityEnableAbilityListsObserver> & observer)1396 Accessibility::RetError AccessibilityConfig::Impl::UnsubscribeEnableAbilityListsObserver(
1397     const std::shared_ptr<AccessibilityEnableAbilityListsObserver> &observer)
1398 {
1399     HILOG_INFO();
1400     std::lock_guard<std::mutex> lock(mutex_);
1401     for (auto iter = enableAbilityListsObservers_.begin(); iter != enableAbilityListsObservers_.end(); iter++) {
1402         if (*iter == observer) {
1403             HILOG_DEBUG("erase observer");
1404             enableAbilityListsObservers_.erase(iter);
1405             HILOG_DEBUG("observer's size is %{public}zu", enableAbilityListsObservers_.size());
1406             return Accessibility::RET_OK;
1407         }
1408     }
1409     return Accessibility::RET_OK;
1410 }
1411 
OnAccessibilityEnableAbilityListsChanged()1412 void AccessibilityConfig::Impl::OnAccessibilityEnableAbilityListsChanged()
1413 {
1414     HILOG_DEBUG("observer's size is %{public}zu", enableAbilityListsObservers_.size());
1415     std::vector<std::shared_ptr<AccessibilityEnableAbilityListsObserver>> observers;
1416     {
1417         std::lock_guard<std::mutex> lock(mutex_);
1418         observers = enableAbilityListsObservers_;
1419     }
1420     for (auto &enableAbilityListsObserver : observers) {
1421         enableAbilityListsObserver->OnEnableAbilityListsStateChanged();
1422     }
1423 }
1424 
OnAccessibilityInstallAbilityListsChanged()1425 void AccessibilityConfig::Impl::OnAccessibilityInstallAbilityListsChanged()
1426 {
1427     HILOG_DEBUG("observer's size is %{public}zu", enableAbilityListsObservers_.size());
1428     std::vector<std::shared_ptr<AccessibilityEnableAbilityListsObserver>> observers;
1429     {
1430         std::lock_guard<std::mutex> lock(mutex_);
1431         observers = enableAbilityListsObservers_;
1432     }
1433     for (auto &enableAbilityListsObserver : observers) {
1434         if (enableAbilityListsObserver != nullptr) {
1435             enableAbilityListsObserver->OnInstallAbilityListsStateChanged();
1436         } else {
1437             HILOG_ERROR("enableAbilityListsObserver is null");
1438         }
1439     }
1440 }
1441 
OnIgnoreRepeatClickStateChanged(const uint32_t stateType)1442 void AccessibilityConfig::Impl::OnIgnoreRepeatClickStateChanged(const uint32_t stateType)
1443 {
1444     if (stateType & Accessibility::STATE_IGNORE_REPEAT_CLICK_ENABLED) {
1445         UpdateIgnoreRepeatClickStateEnabled(true);
1446     } else {
1447         UpdateIgnoreRepeatClickStateEnabled(false);
1448     }
1449 }
1450 
OnAccessibleAbilityManagerConfigStateChanged(const uint32_t stateType)1451 void AccessibilityConfig::Impl::OnAccessibleAbilityManagerConfigStateChanged(const uint32_t stateType)
1452 {
1453     HILOG_DEBUG("stateType = [%{public}u}", stateType);
1454     if (stateType & Accessibility::STATE_CAPTION_ENABLED) {
1455         UpdateCaptionEnabled(true);
1456     } else {
1457         UpdateCaptionEnabled(false);
1458     }
1459 
1460     if (stateType & Accessibility::STATE_SCREENMAGNIFIER_ENABLED) {
1461         UpdateScreenMagnificationEnabled(true);
1462     } else {
1463         UpdateScreenMagnificationEnabled(false);
1464     }
1465 
1466     if (stateType & Accessibility::STATE_SHORTKEY_ENABLED) {
1467         UpdateShortKeyEnabled(true);
1468     } else {
1469         UpdateShortKeyEnabled(false);
1470     }
1471 
1472     if (stateType & Accessibility::STATE_AUDIOMONO_ENABLED) {
1473         UpdateAudioMonoEnabled(true);
1474     } else {
1475         UpdateAudioMonoEnabled(false);
1476     }
1477 
1478     if (stateType & Accessibility::STATE_ANIMATIONOFF_ENABLED) {
1479         UpdateAnimationOffEnabled(true);
1480     } else {
1481         UpdateAnimationOffEnabled(false);
1482     }
1483 
1484     if (stateType & Accessibility::STATE_INVETRTCOLOR_ENABLED) {
1485         UpdateInvertColorEnabled(true);
1486     } else {
1487         UpdateInvertColorEnabled(false);
1488     }
1489 
1490     if (stateType & Accessibility::STATE_HIGHCONTRAST_ENABLED) {
1491         UpdateHighContrastTextEnabled(true);
1492     } else {
1493         UpdateHighContrastTextEnabled(false);
1494     }
1495 
1496     if (stateType & Accessibility::STATE_DALTONIZATION_STATE_ENABLED) {
1497         UpdateDaltonizationStateEnabled(true);
1498     } else {
1499         UpdateDaltonizationStateEnabled(false);
1500     }
1501 
1502     if (stateType & Accessibility::STATE_MOUSEKEY_ENABLED) {
1503         UpdateMouseKeyEnabled(true);
1504     } else {
1505         UpdateMouseKeyEnabled(false);
1506     }
1507 
1508     OnIgnoreRepeatClickStateChanged(stateType);
1509 }
1510 
OnAccessibleAbilityManagerAudioBalanceChanged(const float audioBalance)1511 void AccessibilityConfig::Impl::OnAccessibleAbilityManagerAudioBalanceChanged(const float audioBalance)
1512 {
1513     HILOG_DEBUG("audioBalance = [%{public}f}", audioBalance);
1514     std::vector<std::shared_ptr<AccessibilityConfigObserver>> observers;
1515     {
1516         std::lock_guard<std::mutex> lock(mutex_);
1517         if (audioBalance_ == audioBalance) {
1518             return;
1519         }
1520         audioBalance_ = audioBalance;
1521         std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
1522             configObservers_.find(CONFIG_AUDIO_BALANCE);
1523         if (it == configObservers_.end()) {
1524             return;
1525         }
1526         observers = it->second;
1527     }
1528 
1529     NotifyAudioBalanceChanged(observers, audioBalance);
1530 }
1531 
OnAccessibleAbilityManagerBrightnessDiscountChanged(const float brightnessDiscount)1532 void AccessibilityConfig::Impl::OnAccessibleAbilityManagerBrightnessDiscountChanged(const float brightnessDiscount)
1533 {
1534     HILOG_DEBUG("brightnessDiscount = [%{public}f}", brightnessDiscount);
1535 
1536     std::vector<std::shared_ptr<AccessibilityConfigObserver>> observers;
1537     {
1538         std::lock_guard<std::mutex> lock(mutex_);
1539         if (brightnessDiscount_ == brightnessDiscount) {
1540             return;
1541         }
1542         brightnessDiscount_ = brightnessDiscount;
1543         std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
1544             configObservers_.find(CONFIG_BRIGHTNESS_DISCOUNT);
1545         if (it == configObservers_.end()) {
1546             return;
1547         }
1548         observers = it->second;
1549     }
1550 
1551     NotifyBrightnessDiscountChanged(observers, brightnessDiscount);
1552 }
1553 
OnAccessibleAbilityManagerContentTimeoutChanged(const uint32_t contentTimeout)1554 void AccessibilityConfig::Impl::OnAccessibleAbilityManagerContentTimeoutChanged(const uint32_t contentTimeout)
1555 {
1556     HILOG_DEBUG("contentTimeout = [%{public}u}", contentTimeout);
1557     std::vector<std::shared_ptr<AccessibilityConfigObserver>> observers;
1558     {
1559         std::lock_guard<std::mutex> lock(mutex_);
1560         if (contentTimeout_ == contentTimeout) {
1561             return;
1562         }
1563         contentTimeout_ = contentTimeout;
1564         std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
1565             configObservers_.find(CONFIG_CONTENT_TIMEOUT);
1566         if (it == configObservers_.end()) {
1567             return;
1568         }
1569         observers = it->second;
1570     }
1571 
1572     NotifyContentTimeoutChanged(observers, contentTimeout);
1573 }
1574 
OnAccessibleAbilityManagerDaltonizationColorFilterChanged(const uint32_t filterType)1575 void AccessibilityConfig::Impl::OnAccessibleAbilityManagerDaltonizationColorFilterChanged(const uint32_t filterType)
1576 {
1577     HILOG_DEBUG("filterType = [%{public}u}", filterType);
1578     std::vector<std::shared_ptr<AccessibilityConfigObserver>> observers;
1579     {
1580         std::lock_guard<std::mutex> lock(mutex_);
1581         if (daltonizationColorFilter_ == filterType) {
1582             HILOG_DEBUG("filterType[%{public}u]", daltonizationColorFilter_);
1583             return;
1584         }
1585         daltonizationColorFilter_ = filterType;
1586         std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
1587             configObservers_.find(CONFIG_DALTONIZATION_COLOR_FILTER);
1588         if (it == configObservers_.end()) {
1589             return;
1590         }
1591         observers = it->second;
1592     }
1593 
1594     NotifyDaltonizationColorFilterChanged(observers, filterType);
1595 }
1596 
OnAccessibleAbilityManagerMouseAutoClickChanged(const int32_t mouseAutoClick)1597 void AccessibilityConfig::Impl::OnAccessibleAbilityManagerMouseAutoClickChanged(const int32_t mouseAutoClick)
1598 {
1599     HILOG_DEBUG("mouseAutoClick = [%{public}d}", mouseAutoClick);
1600     std::vector<std::shared_ptr<AccessibilityConfigObserver>> observers;
1601     {
1602         std::lock_guard<std::mutex> lock(mutex_);
1603         if (mouseAutoClick_ == mouseAutoClick) {
1604             return;
1605         }
1606         mouseAutoClick_ = mouseAutoClick;
1607         std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
1608             configObservers_.find(CONFIG_MOUSE_AUTOCLICK);
1609         if (it == configObservers_.end()) {
1610             return;
1611         }
1612         observers = it->second;
1613     }
1614 
1615     NotifyMouseAutoClickChanged(observers, mouseAutoClick);
1616 }
1617 
OnAccessibleAbilityManagerShortkeyTargetChanged(const std::string & shortkeyTarget)1618 void AccessibilityConfig::Impl::OnAccessibleAbilityManagerShortkeyTargetChanged(const std::string &shortkeyTarget)
1619 {
1620     HILOG_DEBUG("shortkeyTarget = [%{public}s}", shortkeyTarget.c_str());
1621     std::vector<std::shared_ptr<AccessibilityConfigObserver>> observers;
1622     {
1623         std::lock_guard<std::mutex> lock(mutex_);
1624         if (shortkeyTarget_.length() > 0 && shortkeyTarget.length() > 0 &&
1625             !std::strcmp(shortkeyTarget_.c_str(), shortkeyTarget.c_str())) {
1626             return;
1627         }
1628         shortkeyTarget_ = shortkeyTarget;
1629         std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
1630             configObservers_.find(CONFIG_SHORT_KEY_TARGET);
1631         if (it == configObservers_.end()) {
1632             return;
1633         }
1634         observers = it->second;
1635     }
1636 
1637     NotifyShortkeyTargetChanged(observers, shortkeyTarget);
1638 }
1639 
OnAccessibleAbilityManagerShortkeyMultiTargetChanged(const std::vector<std::string> & shortkeyMultiTarget)1640 void AccessibilityConfig::Impl::OnAccessibleAbilityManagerShortkeyMultiTargetChanged(
1641     const std::vector<std::string> &shortkeyMultiTarget)
1642 {
1643     HILOG_DEBUG("start");
1644     std::vector<std::shared_ptr<AccessibilityConfigObserver>> observers;
1645     {
1646         std::lock_guard<std::mutex> lock(mutex_);
1647         // need to add, if no change, do not inform
1648         shortkeyMultiTarget_ = shortkeyMultiTarget;
1649         std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
1650             configObservers_.find(CONFIG_SHORT_KEY_MULTI_TARGET);
1651         if (it == configObservers_.end()) {
1652             HILOG_DEBUG("Cannot find CONFIG_SHORT_KEY_MULTI_TARGET configObserver.");
1653             return;
1654         }
1655         observers = it->second;
1656     }
1657 
1658     NotifyShortkeyMultiTargetChanged(observers, shortkeyMultiTarget);
1659 }
1660 
OnAccessibleAbilityManagerClickResponseTimeChanged(const uint32_t clickResponseTime)1661 void AccessibilityConfig::Impl::OnAccessibleAbilityManagerClickResponseTimeChanged(const uint32_t clickResponseTime)
1662 {
1663     HILOG_DEBUG("clickResponseTime = [%{public}u}", clickResponseTime);
1664     std::vector<std::shared_ptr<AccessibilityConfigObserver>> observers;
1665     {
1666         std::lock_guard<std::mutex> lock(mutex_);
1667         if (clickResponseTime_ == clickResponseTime) {
1668             return;
1669         }
1670         clickResponseTime_ = clickResponseTime;
1671         std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
1672             configObservers_.find(CONIFG_CLICK_RESPONSE_TIME);
1673         if (it == configObservers_.end()) {
1674             return;
1675         }
1676         observers = it->second;
1677     }
1678 
1679     NotifyClickResponseTimeChanged(observers, clickResponseTime);
1680 }
1681 
OnAccessibleAbilityManagerIgnoreRepeatClickTimeChanged(const uint32_t time)1682 void AccessibilityConfig::Impl::OnAccessibleAbilityManagerIgnoreRepeatClickTimeChanged(const uint32_t time)
1683 {
1684     HILOG_DEBUG("ignoreRepeatClickTime = [%{public}u}", time);
1685     std::vector<std::shared_ptr<AccessibilityConfigObserver>> observers;
1686     {
1687         std::lock_guard<std::mutex> lock(mutex_);
1688         if (ignoreRepeatClickTime_ == time) {
1689             return;
1690         }
1691         ignoreRepeatClickTime_ = time;
1692         std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
1693             configObservers_.find(CONFIG_IGNORE_REPEAT_CLICK_TIME);
1694         if (it == configObservers_.end()) {
1695             return;
1696         }
1697         observers = it->second;
1698     }
1699 
1700     NotifyIgnoreRepeatClickTimeChanged(observers, time);
1701 }
1702 
NotifyImmediately(const CONFIG_ID id,const std::shared_ptr<AccessibilityConfigObserver> & observer)1703 void AccessibilityConfig::Impl::NotifyImmediately(const CONFIG_ID id,
1704     const std::shared_ptr<AccessibilityConfigObserver> &observer)
1705 {
1706     HILOG_DEBUG("NotifyImmediately start.");
1707     ConfigValue configValue;
1708     {
1709         configValue.highContrastText = highContrastText_;
1710         configValue.invertColor = invertColor_;
1711         configValue.animationOff = animationOff_;
1712         configValue.screenMagnifier = screenMagnifier_;
1713         configValue.audioMono = audioMono_;
1714         configValue.mouseKey = mouseKey_;
1715         configValue.shortkey = shortkey_;
1716         configValue.captionState = captionState_;
1717         configValue.contentTimeout = contentTimeout_;
1718         configValue.mouseAutoClick = mouseAutoClick_;
1719         configValue.audioBalance = audioBalance_;
1720         configValue.brightnessDiscount = brightnessDiscount_;
1721         configValue.daltonizationState = daltonizationState_;
1722         configValue.daltonizationColorFilter = static_cast<DALTONIZATION_TYPE>(daltonizationColorFilter_);
1723         configValue.shortkey_target = shortkeyTarget_;
1724         configValue.shortkeyMultiTarget = shortkeyMultiTarget_;
1725         configValue.captionStyle = captionProperty_;
1726         configValue.clickResponseTime = static_cast<CLICK_RESPONSE_TIME>(clickResponseTime_);
1727         configValue.ignoreRepeatClickState = ignoreRepeatClickState_;
1728         configValue.ignoreRepeatClickTime = static_cast<IGNORE_REPEAT_CLICK_TIME>(ignoreRepeatClickTime_);
1729     }
1730     observer->OnConfigChanged(id, configValue);
1731 }
1732 
InitConfigValues()1733 void AccessibilityConfig::Impl::InitConfigValues()
1734 {
1735     Accessibility::AccessibilityConfigData configData;
1736     if (serviceProxy_ == nullptr) {
1737         return;
1738     }
1739     serviceProxy_->GetAllConfigs(configData);
1740     highContrastText_ = configData.highContrastText_;
1741     invertColor_ = configData.invertColor_;
1742     animationOff_ = configData.animationOff_;
1743     audioMono_ = configData.audioMono_;
1744     mouseKey_ = configData.mouseKey_;
1745     captionState_ = configData.captionState_;
1746     screenMagnifier_ = configData.screenMagnifier_;
1747     shortkey_ = configData.shortkey_;
1748     mouseAutoClick_ = configData.mouseAutoClick_;
1749     daltonizationState_ = configData.daltonizationState_;
1750     daltonizationColorFilter_ = configData.daltonizationColorFilter_;
1751     contentTimeout_ = configData.contentTimeout_;
1752     brightnessDiscount_ = configData.brightnessDiscount_;
1753     audioBalance_ = configData.audioBalance_;
1754     shortkeyTarget_ = configData.shortkeyTarget_;
1755     shortkeyMultiTarget_ = configData.shortkeyMultiTarget_;
1756     captionProperty_ = configData.captionProperty_;
1757     clickResponseTime_ = configData.clickResponseTime_;
1758     ignoreRepeatClickTime_ = configData.ignoreRepeatClickTime_;
1759     ignoreRepeatClickState_ = configData.ignoreRepeatClickState_;
1760     NotifyDefaultConfigs();
1761     HILOG_DEBUG("ConnectToService Success");
1762 }
1763 
NotifyDefaultDaltonizationConfigs()1764 void AccessibilityConfig::Impl::NotifyDefaultDaltonizationConfigs()
1765 {
1766     std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
1767         configObservers_.find(CONFIG_DALTONIZATION_STATE);
1768     if (it != configObservers_.end()) {
1769         NotifyDaltonizationStateChanged(it->second, daltonizationState_);
1770     }
1771     if ((it = configObservers_.find(CONFIG_DALTONIZATION_COLOR_FILTER)) != configObservers_.end()) {
1772         NotifyDaltonizationColorFilterChanged(it->second, daltonizationColorFilter_);
1773     }
1774 }
1775 
NotifyDefaultScreenTouchConfigs()1776 void AccessibilityConfig::Impl::NotifyDefaultScreenTouchConfigs()
1777 {
1778     std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
1779         configObservers_.find(CONIFG_CLICK_RESPONSE_TIME);
1780     if (it != configObservers_.end()) {
1781         NotifyClickResponseTimeChanged(it->second, clickResponseTime_);
1782     }
1783     if ((it = configObservers_.find(CONFIG_IGNORE_REPEAT_CLICK_STATE)) != configObservers_.end()) {
1784         NotifyIgnoreRepeatClickTimeChanged(it->second, ignoreRepeatClickState_);
1785     }
1786     if ((it = configObservers_.find(CONFIG_IGNORE_REPEAT_CLICK_TIME)) != configObservers_.end()) {
1787         NotifyIgnoreRepeatClickStateChanged(it->second, ignoreRepeatClickTime_);
1788     }
1789 }
1790 
NotifyDefaultShortKeyConfigs()1791 void AccessibilityConfig::Impl::NotifyDefaultShortKeyConfigs()
1792 {
1793     std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
1794         configObservers_.find(CONFIG_SHORT_KEY);
1795     if (it != configObservers_.end()) {
1796         NotifyShortKeyChanged(it->second, shortkey_);
1797     }
1798     if ((it = configObservers_.find(CONFIG_SHORT_KEY_TARGET)) != configObservers_.end()) {
1799         NotifyShortkeyTargetChanged(it->second, shortkeyTarget_);
1800     }
1801 }
1802 
NotifyDefaultShortKeyMultiConfigs()1803 void AccessibilityConfig::Impl::NotifyDefaultShortKeyMultiConfigs()
1804 {
1805     std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
1806         configObservers_.find(CONFIG_SHORT_KEY);
1807     if (it != configObservers_.end()) {
1808         NotifyShortKeyChanged(it->second, shortkey_);
1809     }
1810     if ((it = configObservers_.find(CONFIG_SHORT_KEY_MULTI_TARGET)) != configObservers_.end()) {
1811         NotifyShortkeyMultiTargetChanged(it->second, shortkeyMultiTarget_);
1812     }
1813 }
1814 
NotifyDefaultConfigs()1815 void AccessibilityConfig::Impl::NotifyDefaultConfigs()
1816 {
1817     std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>>::iterator it =
1818         configObservers_.find(CONFIG_HIGH_CONTRAST_TEXT);
1819     if (it != configObservers_.end()) {
1820         NotifyHighContrastTextChanged(it->second, highContrastText_);
1821     }
1822     if ((it = configObservers_.find(CONFIG_INVERT_COLOR)) != configObservers_.end()) {
1823         NotifyInvertColorChanged(it->second, invertColor_);
1824     }
1825     if ((it = configObservers_.find(CONFIG_CONTENT_TIMEOUT)) != configObservers_.end()) {
1826         NotifyContentTimeoutChanged(it->second, contentTimeout_);
1827     }
1828     if ((it = configObservers_.find(CONFIG_ANIMATION_OFF)) != configObservers_.end()) {
1829         NotifyAnimationOffChanged(it->second, animationOff_);
1830     }
1831     if ((it = configObservers_.find(CONFIG_BRIGHTNESS_DISCOUNT)) != configObservers_.end()) {
1832         NotifyBrightnessDiscountChanged(it->second, brightnessDiscount_);
1833     }
1834     if ((it = configObservers_.find(CONFIG_AUDIO_MONO)) != configObservers_.end()) {
1835         NotifyAudioMonoChanged(it->second, audioMono_);
1836     }
1837     if ((it = configObservers_.find(CONFIG_AUDIO_BALANCE)) != configObservers_.end()) {
1838         NotifyAudioBalanceChanged(it->second, audioBalance_);
1839     }
1840     if ((it = configObservers_.find(CONFIG_MOUSE_KEY)) != configObservers_.end()) {
1841         NotifyMouseKeyChanged(it->second, mouseKey_);
1842     }
1843     if ((it = configObservers_.find(CONFIG_CAPTION_STATE)) != configObservers_.end()) {
1844         NotifyCaptionStateChanged(it->second, captionState_);
1845     }
1846     if ((it = configObservers_.find(CONFIG_CAPTION_STYLE)) != configObservers_.end()) {
1847         NotifyCaptionChanged(it->second, captionProperty_);
1848     }
1849     if ((it = configObservers_.find(CONFIG_SCREEN_MAGNIFICATION)) != configObservers_.end()) {
1850         NotifyScreenMagnificationChanged(it->second, screenMagnifier_);
1851     }
1852     if ((it = configObservers_.find(CONFIG_MOUSE_AUTOCLICK)) != configObservers_.end()) {
1853         NotifyMouseAutoClickChanged(it->second, mouseAutoClick_);
1854     }
1855 
1856     NotifyDefaultDaltonizationConfigs();
1857     NotifyDefaultScreenTouchConfigs();
1858     NotifyDefaultShortKeyConfigs();
1859     NotifyDefaultShortKeyMultiConfigs();
1860 }
1861 
OnLoadSystemAbilitySuccess(int32_t systemAbilityId,const sptr<IRemoteObject> & remoteObject)1862 void AccessibilityConfig::Impl::AccessibilityLoadCallback::OnLoadSystemAbilitySuccess(int32_t systemAbilityId,
1863     const sptr<IRemoteObject> &remoteObject)
1864 {
1865     HILOG_DEBUG();
1866     if (config_) {
1867         config_->LoadSystemAbilitySuccess(remoteObject);
1868     }
1869 }
1870 
OnLoadSystemAbilityFail(int32_t systemAbilityId)1871 void AccessibilityConfig::Impl::AccessibilityLoadCallback::OnLoadSystemAbilityFail(int32_t systemAbilityId)
1872 {
1873     HILOG_DEBUG();
1874     if (config_) {
1875         config_->LoadSystemAbilityFail();
1876     }
1877 }
1878 } // namespace AccessibilityConfig
1879 } // namespace OHOS