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