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