1 /*
2 * Copyright (C) 2023-2025 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 <string>
17 #include <hitrace_meter.h>
18 #include "accessibility_account_data.h"
19 #include "accessible_ability_manager_service.h"
20 #include "accessibility_settings.h"
21 #ifdef OHOS_BUILD_ENABLE_POWER_MANAGER
22 #include "accessibility_power_manager.h"
23 #endif
24 #include "hilog_wrapper.h"
25 #include "parameter.h"
26
27 namespace OHOS {
28 namespace Accessibility {
29 namespace {
30 const std::string GRAPHIC_ANIMATION_SCALE_NAME = "persist.sys.graphic.animationscale";
31 const std::string ARKUI_ANIMATION_SCALE_NAME = "persist.sys.arkui.animationscale";
32 const std::string SCREEN_READER_BUNDLE_ABILITY_NAME = "com.huawei.hmos.screenreader/AccessibilityExtAbility";
33 const int32_t SHORT_KEY_TIMEOUT_BEFORE_USE = 3000; // ms
34 const int32_t SHORT_KEY_TIMEOUT_AFTER_USE = 1000; // ms
35 const int32_t DATASHARE_DEFAULT_TIMEOUT = 2 * 1000; // ms
36 }
37
RegisterSettingsHandler(const std::shared_ptr<AppExecFwk::EventHandler> & handler)38 void AccessibilitySettings::RegisterSettingsHandler(const std::shared_ptr<AppExecFwk::EventHandler> &handler)
39 {
40 HILOG_DEBUG();
41 handler_ = handler;
42 }
43
SetScreenMagnificationState(const bool state)44 RetError AccessibilitySettings::SetScreenMagnificationState(const bool state)
45 {
46 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
47 HITRACE_METER_NAME(HITRACE_TAG_ACCESSIBILITY_MANAGER, "SetScreenMagnificationState:" + std::to_string(state));
48
49 sptr<AccessibilityAccountData> accountData =
50 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
51 if (!accountData) {
52 HILOG_ERROR("accountData is nullptr.");
53 return RET_ERR_NULLPTR;
54 }
55 RetError ret = accountData->GetConfig()->SetScreenMagnificationState(state);
56 UpdateConfigState();
57 Singleton<AccessibleAbilityManagerService>::GetInstance().UpdateInputFilter();
58 return ret;
59 }
60
SetShortKeyState(const bool state)61 RetError AccessibilitySettings::SetShortKeyState(const bool state)
62 {
63 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
64 HITRACE_METER_NAME(HITRACE_TAG_ACCESSIBILITY_MANAGER, "SetShortKeyState:" + std::to_string(state));
65
66 if (!handler_) {
67 HILOG_ERROR("handler_ is nullptr.");
68 return RET_ERR_NULLPTR;
69 }
70
71 auto syncPromise = std::make_shared<ffrt::promise<RetError>>();
72 if (syncPromise == nullptr) {
73 HILOG_ERROR("syncPromise is nullptr.");
74 return RET_ERR_NULLPTR;
75 }
76 ffrt::future syncFuture = syncPromise->get_future();
77 handler_->PostTask([this, syncPromise, state]() {
78 sptr<AccessibilityAccountData> accountData =
79 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
80 if (!accountData) {
81 HILOG_ERROR("accountData is nullptr.");
82 syncPromise->set_value(RET_ERR_NULLPTR);
83 return;
84 }
85 RetError ret = accountData->GetConfig()->SetShortKeyState(state);
86 syncPromise->set_value(ret);
87 UpdateConfigState();
88 Singleton<AccessibleAbilityManagerService>::GetInstance().UpdateShortKeyRegister();
89 }, "TASK_SET_SHORTKEY_STATE");
90
91 ffrt::future_status wait = syncFuture.wait_for(std::chrono::milliseconds(DATASHARE_DEFAULT_TIMEOUT));
92 if (wait != ffrt::future_status::ready) {
93 HILOG_ERROR("SetShortKeyState Failed to wait result");
94 return RET_ERR_TIME_OUT;
95 }
96 return syncFuture.get();
97 }
98
SetMouseKeyState(const bool state)99 RetError AccessibilitySettings::SetMouseKeyState(const bool state)
100 {
101 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
102
103 sptr<AccessibilityAccountData> accountData =
104 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
105 if (!accountData) {
106 HILOG_ERROR("accountData is nullptr.");
107 return RET_ERR_NULLPTR;
108 }
109 RetError ret = accountData->GetConfig()->SetMouseKeyState(state);
110 UpdateConfigState();
111 Singleton<AccessibleAbilityManagerService>::GetInstance().UpdateInputFilter();
112 return ret;
113 }
114
SetMouseAutoClick(const int32_t time)115 RetError AccessibilitySettings::SetMouseAutoClick(const int32_t time)
116 {
117 HILOG_INFO("time = [%{public}d]", time);
118 if (!handler_) {
119 HILOG_ERROR("handler_ is nullptr.");
120 return RET_ERR_NULLPTR;
121 }
122
123 auto syncPromise = std::make_shared<ffrt::promise<RetError>>();
124 if (syncPromise == nullptr) {
125 HILOG_ERROR("syncPromise is nullptr.");
126 return RET_ERR_NULLPTR;
127 }
128 ffrt::future syncFuture = syncPromise->get_future();
129 handler_->PostTask([this, syncPromise, time]() {
130 sptr<AccessibilityAccountData> accountData =
131 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
132 if (!accountData) {
133 HILOG_ERROR("accountData is nullptr.");
134 syncPromise->set_value(RET_ERR_NULLPTR);
135 return;
136 }
137 RetError ret = accountData->GetConfig()->SetMouseAutoClick(time);
138 syncPromise->set_value(ret);
139 UpdateMouseAutoClick();
140 Singleton<AccessibleAbilityManagerService>::GetInstance().UpdateInputFilter();
141 }, "TASK_SET_MOUSE_AUTOCLICK");
142
143 ffrt::future_status wait = syncFuture.wait_for(std::chrono::milliseconds(DATASHARE_DEFAULT_TIMEOUT));
144 if (wait != ffrt::future_status::ready) {
145 HILOG_ERROR("SetMouseAutoClick Failed to wait result");
146 return RET_ERR_TIME_OUT;
147 }
148 return syncFuture.get();
149 }
150
SetShortkeyTarget(const std::string & name)151 RetError AccessibilitySettings::SetShortkeyTarget(const std::string &name)
152 {
153 HILOG_INFO("name = [%{public}s]", name.c_str());
154 HITRACE_METER_NAME(HITRACE_TAG_ACCESSIBILITY_MANAGER, "SetShortkeyTarget:" + name);
155
156 if (!handler_) {
157 HILOG_ERROR("handler_ is nullptr.");
158 return RET_ERR_NULLPTR;
159 }
160
161 auto syncPromise = std::make_shared<ffrt::promise<RetError>>();
162 if (syncPromise == nullptr) {
163 HILOG_ERROR("syncPromise is nullptr.");
164 return RET_ERR_NULLPTR;
165 }
166 ffrt::future syncFuture = syncPromise->get_future();
167 handler_->PostTask([this, syncPromise, name]() {
168 sptr<AccessibilityAccountData> accountData =
169 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
170 if (!accountData) {
171 HILOG_ERROR("accountData is nullptr.");
172 syncPromise->set_value(RET_ERR_NULLPTR);
173 return;
174 }
175 RetError ret = accountData->GetConfig()->SetShortkeyTarget(name);
176 syncPromise->set_value(ret);
177 UpdateShortkeyTarget();
178 }, "TASK_SET_SHORTKEY_TARGET");
179
180 ffrt::future_status wait = syncFuture.wait_for(std::chrono::milliseconds(DATASHARE_DEFAULT_TIMEOUT));
181 if (wait != ffrt::future_status::ready) {
182 HILOG_ERROR("SetShortkeyTarget Failed to wait result");
183 return RET_ERR_TIME_OUT;
184 }
185 return syncFuture.get();
186 }
187
SetShortkeyMultiTarget(const std::vector<std::string> & name)188 RetError AccessibilitySettings::SetShortkeyMultiTarget(const std::vector<std::string> &name)
189 {
190 HILOG_DEBUG();
191 HITRACE_METER_NAME(HITRACE_TAG_ACCESSIBILITY_MANAGER, "SetShortkeyMultiTarget");
192
193 if (!handler_) {
194 HILOG_ERROR("handler_ is nullptr.");
195 return RET_ERR_NULLPTR;
196 }
197 auto syncPromise = std::make_shared<ffrt::promise<RetError>>();
198 if (syncPromise == nullptr) {
199 HILOG_ERROR("syncPromise is nullptr.");
200 return RET_ERR_NULLPTR;
201 }
202 ffrt::future syncFuture = syncPromise->get_future();
203 handler_->PostTask([this, syncPromise, name]() {
204 sptr<AccessibilityAccountData> accountData =
205 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
206 if (!accountData) {
207 HILOG_ERROR("accountData is nullptr.");
208 syncPromise->set_value(RET_ERR_NULLPTR);
209 return;
210 }
211 RetError ret = accountData->GetConfig()->SetShortkeyMultiTarget(name);
212 syncPromise->set_value(ret);
213 UpdateShortkeyMultiTarget();
214 }, "TASK_SET_SHORTKEY_MULTI_TARGET");
215
216 ffrt::future_status wait = syncFuture.wait_for(std::chrono::milliseconds(DATASHARE_DEFAULT_TIMEOUT));
217 if (wait != ffrt::future_status::ready) {
218 HILOG_ERROR("SetShortkeyMultiTarget Failed to wait result");
219 return RET_ERR_TIME_OUT;
220 }
221 return syncFuture.get();
222 }
223
SetHighContrastTextState(const bool state)224 RetError AccessibilitySettings::SetHighContrastTextState(const bool state)
225 {
226 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
227 HITRACE_METER_NAME(HITRACE_TAG_ACCESSIBILITY_MANAGER, "SetHighContrastTextState:" + std::to_string(state));
228
229 sptr<AccessibilityAccountData> accountData =
230 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
231 if (!accountData) {
232 HILOG_ERROR("accountData is nullptr.");
233 return RET_ERR_NULLPTR;
234 }
235 RetError ret = accountData->GetConfig()->SetHighContrastTextState(state);
236 UpdateConfigState();
237 return ret;
238 }
239
SetDaltonizationState(const bool state)240 RetError AccessibilitySettings::SetDaltonizationState(const bool state)
241 {
242 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
243 HITRACE_METER_NAME(HITRACE_TAG_ACCESSIBILITY_MANAGER, "SetDaltonizationState:" + std::to_string(state));
244
245 sptr<AccessibilityAccountData> accountData =
246 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
247 if (!accountData) {
248 HILOG_ERROR("accountData is nullptr.");
249 return RET_ERR_NULLPTR;
250 }
251 RetError ret = accountData->GetConfig()->SetDaltonizationState(state);
252 UpdateConfigState();
253 return ret;
254 }
255
SetInvertColorState(const bool state)256 RetError AccessibilitySettings::SetInvertColorState(const bool state)
257 {
258 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
259 HITRACE_METER_NAME(HITRACE_TAG_ACCESSIBILITY_MANAGER, "SetInvertColorState:" + std::to_string(state));
260
261 sptr<AccessibilityAccountData> accountData =
262 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
263 if (!accountData) {
264 HILOG_ERROR("accountData is nullptr.");
265 return RET_ERR_NULLPTR;
266 }
267 RetError ret = accountData->GetConfig()->SetInvertColorState(state);
268 UpdateConfigState();
269 return ret;
270 }
271
SetAnimationOffState(const bool state)272 RetError AccessibilitySettings::SetAnimationOffState(const bool state)
273 {
274 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
275
276 sptr<AccessibilityAccountData> accountData =
277 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
278 if (!accountData) {
279 HILOG_ERROR("accountData is nullptr.");
280 return RET_ERR_NULLPTR;
281 }
282 RetError ret = accountData->GetConfig()->SetAnimationOffState(state);
283 UpdateConfigState();
284 int setGraphicParamRes = -1;
285 int setArkuiParamRes = -1;
286 if (state) {
287 setGraphicParamRes = SetParameter(GRAPHIC_ANIMATION_SCALE_NAME.c_str(), "0");
288 setArkuiParamRes = SetParameter(ARKUI_ANIMATION_SCALE_NAME.c_str(), "0");
289 } else {
290 setGraphicParamRes = SetParameter(GRAPHIC_ANIMATION_SCALE_NAME.c_str(), "1");
291 setArkuiParamRes = SetParameter(ARKUI_ANIMATION_SCALE_NAME.c_str(), "1");
292 }
293 HILOG_INFO("SetParameter results are %{public}d and %{public}d", setGraphicParamRes, setArkuiParamRes);
294 return ret;
295 }
296
SetAudioMonoState(const bool state)297 RetError AccessibilitySettings::SetAudioMonoState(const bool state)
298 {
299 HILOG_INFO("state = [%{public}s]", state ? "True" : "False");
300 HITRACE_METER_NAME(HITRACE_TAG_ACCESSIBILITY_MANAGER, "SetAudioMonoState:" + std::to_string(state));
301
302 sptr<AccessibilityAccountData> accountData =
303 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
304 if (!accountData) {
305 HILOG_ERROR("accountData is nullptr.");
306 return RET_ERR_NULLPTR;
307 }
308 RetError ret = accountData->GetConfig()->SetAudioMonoState(state);
309 UpdateConfigState();
310 return ret;
311 }
312
SetDaltonizationColorFilter(const uint32_t filter)313 RetError AccessibilitySettings::SetDaltonizationColorFilter(const uint32_t filter)
314 {
315 HILOG_INFO("filter = [%{public}u]", filter);
316 HITRACE_METER_NAME(HITRACE_TAG_ACCESSIBILITY_MANAGER, "SetDaltonizationColorFilter:" + std::to_string(filter));
317 if (!handler_) {
318 HILOG_ERROR("handler_ is nullptr.");
319 return RET_ERR_NULLPTR;
320 }
321
322 auto syncPromise = std::make_shared<ffrt::promise<RetError>>();
323 if (syncPromise == nullptr) {
324 HILOG_ERROR("syncPromise is nullptr.");
325 return RET_ERR_NULLPTR;
326 }
327 ffrt::future syncFuture = syncPromise->get_future();
328 handler_->PostTask([this, syncPromise, filter]() {
329 sptr<AccessibilityAccountData> accountData =
330 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
331 if (!accountData) {
332 HILOG_ERROR("accountData is nullptr.");
333 syncPromise->set_value(RET_ERR_NULLPTR);
334 return;
335 }
336 RetError ret = accountData->GetConfig()->SetDaltonizationColorFilter(filter);
337 syncPromise->set_value(ret);
338 UpdateDaltonizationColorFilter();
339 }, "TASK_SET_DALTONIZATION_COLORFILTER");
340
341 ffrt::future_status wait = syncFuture.wait_for(std::chrono::milliseconds(DATASHARE_DEFAULT_TIMEOUT));
342 if (wait != ffrt::future_status::ready) {
343 HILOG_ERROR("SetDaltonizationColorFilter Failed to wait result");
344 return RET_ERR_TIME_OUT;
345 }
346 return syncFuture.get();
347 }
348
SetContentTimeout(const uint32_t time)349 RetError AccessibilitySettings::SetContentTimeout(const uint32_t time)
350 {
351 HILOG_INFO("time = [%{public}u]", time);
352 if (!handler_) {
353 HILOG_ERROR("handler_ is nullptr.");
354 return RET_ERR_NULLPTR;
355 }
356
357 auto syncPromise = std::make_shared<ffrt::promise<RetError>>();
358 if (syncPromise == nullptr) {
359 HILOG_ERROR("syncPromise is nullptr.");
360 return RET_ERR_NULLPTR;
361 }
362 ffrt::future syncFuture = syncPromise->get_future();
363 handler_->PostTask([this, syncPromise, time]() {
364 sptr<AccessibilityAccountData> accountData =
365 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
366 if (!accountData) {
367 HILOG_ERROR("accountData is nullptr.");
368 syncPromise->set_value(RET_ERR_NULLPTR);
369 return;
370 }
371 RetError ret = accountData->GetConfig()->SetContentTimeout(time);
372 syncPromise->set_value(ret);
373 UpdateContentTimeout();
374 }, "TASK_SET_CONTENT_TIMEOUT");
375
376 ffrt::future_status wait = syncFuture.wait_for(std::chrono::milliseconds(DATASHARE_DEFAULT_TIMEOUT));
377 if (wait != ffrt::future_status::ready) {
378 HILOG_ERROR("SetContentTimeout Failed to wait result");
379 return RET_ERR_TIME_OUT;
380 }
381 return syncFuture.get();
382 }
383
SetBrightnessDiscount(const float discount)384 RetError AccessibilitySettings::SetBrightnessDiscount(const float discount)
385 {
386 HILOG_INFO("discount = [%{public}f]", discount);
387 if (!handler_) {
388 HILOG_ERROR("handler_ is nullptr.");
389 return RET_ERR_NULLPTR;
390 }
391
392 #ifdef OHOS_BUILD_ENABLE_POWER_MANAGER
393 if (!Singleton<AccessibilityPowerManager>::GetInstance().DiscountBrightness(discount)) {
394 HILOG_ERROR("Failed to set brightness discount");
395 return Accessibility::RET_ERR_FAILED;
396 }
397 #endif
398 auto syncPromise = std::make_shared<ffrt::promise<RetError>>();
399 if (syncPromise == nullptr) {
400 HILOG_ERROR("syncPromise is nullptr.");
401 return RET_ERR_NULLPTR;
402 }
403 ffrt::future syncFuture = syncPromise->get_future();
404 handler_->PostTask([this, syncPromise, discount]() {
405 sptr<AccessibilityAccountData> accountData =
406 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
407 if (!accountData) {
408 HILOG_ERROR("accountData is nullptr.");
409 syncPromise->set_value(RET_ERR_NULLPTR);
410 return;
411 }
412 RetError ret = accountData->GetConfig()->SetBrightnessDiscount(discount);
413 syncPromise->set_value(ret);
414 UpdateBrightnessDiscount();
415 }, "TASK_SET_BRIGHTNESS_DISCOUNT");
416
417 ffrt::future_status wait = syncFuture.wait_for(std::chrono::milliseconds(DATASHARE_DEFAULT_TIMEOUT));
418 if (wait != ffrt::future_status::ready) {
419 HILOG_ERROR("SetBrightnessDiscount Failed to wait result");
420 return RET_ERR_TIME_OUT;
421 }
422 return syncFuture.get();
423 }
424
SetAudioBalance(const float balance)425 RetError AccessibilitySettings::SetAudioBalance(const float balance)
426 {
427 HILOG_INFO("balance = [%{public}f]", balance);
428 HITRACE_METER_NAME(HITRACE_TAG_ACCESSIBILITY_MANAGER, "SetAudioBalance:" + std::to_string(balance));
429
430 if (!handler_) {
431 HILOG_ERROR("handler_ is nullptr.");
432 return RET_ERR_NULLPTR;
433 }
434
435 auto syncPromise = std::make_shared<ffrt::promise<RetError>>();
436 if (syncPromise == nullptr) {
437 HILOG_ERROR("syncPromise is nullptr.");
438 return RET_ERR_NULLPTR;
439 }
440 ffrt::future syncFuture = syncPromise->get_future();
441 handler_->PostTask([this, syncPromise, balance]() {
442 sptr<AccessibilityAccountData> accountData =
443 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
444 if (!accountData) {
445 HILOG_ERROR("accountData is nullptr.");
446 syncPromise->set_value(RET_ERR_NULLPTR);
447 return;
448 }
449 RetError ret = accountData->GetConfig()->SetAudioBalance(balance);
450 syncPromise->set_value(ret);
451 UpdateAudioBalance();
452 }, "TASK_SET_AUDIO_BALANCE");
453
454 ffrt::future_status wait = syncFuture.wait_for(std::chrono::milliseconds(DATASHARE_DEFAULT_TIMEOUT));
455 if (wait != ffrt::future_status::ready) {
456 HILOG_ERROR("SetAudioBalance Failed to wait result");
457 return RET_ERR_TIME_OUT;
458 }
459 return syncFuture.get();
460 }
461
SetClickResponseTime(const uint32_t time)462 RetError AccessibilitySettings::SetClickResponseTime(const uint32_t time)
463 {
464 HILOG_INFO("click response time = [%{public}u]", time);
465 HITRACE_METER_NAME(HITRACE_TAG_ACCESSIBILITY_MANAGER, "SetClickResponseTime:" + std::to_string(time));
466
467 if (!handler_) {
468 HILOG_ERROR("handler_ is nullptr.");
469 return RET_ERR_NULLPTR;
470 }
471
472 auto syncPromise = std::make_shared<ffrt::promise<RetError>>();
473 if (syncPromise == nullptr) {
474 HILOG_ERROR("syncPromise is nullptr.");
475 return RET_ERR_NULLPTR;
476 }
477 ffrt::future syncFuture = syncPromise->get_future();
478 handler_->PostTask([this, syncPromise, time]() {
479 sptr<AccessibilityAccountData> accountData =
480 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
481 if (!accountData) {
482 HILOG_ERROR("accountData is nullptr.");
483 syncPromise->set_value(RET_ERR_NULLPTR);
484 return;
485 }
486 RetError ret = accountData->GetConfig()->SetClickResponseTime(time);
487 syncPromise->set_value(ret);
488 UpdateClickResponseTime();
489 Singleton<AccessibleAbilityManagerService>::GetInstance().UpdateInputFilter();
490 }, "TASK_SET_CLICK_RESPONSE_TIME");
491
492 ffrt::future_status wait = syncFuture.wait_for(std::chrono::milliseconds(DATASHARE_DEFAULT_TIMEOUT));
493 if (wait != ffrt::future_status::ready) {
494 HILOG_ERROR("SetClickResponseTime Failed to wait result");
495 return RET_ERR_TIME_OUT;
496 }
497 return syncFuture.get();
498 }
499
SetIgnoreRepeatClickState(const bool state)500 RetError AccessibilitySettings::SetIgnoreRepeatClickState(const bool state)
501 {
502 HILOG_INFO("ignore repeat click state = [%{public}s]", state ? "True" : "False");
503 HITRACE_METER_NAME(HITRACE_TAG_ACCESSIBILITY_MANAGER, "SetIgnoreRepeatClickState:" + std::to_string(state));
504
505 if (!handler_) {
506 HILOG_ERROR("handler_ is nullptr.");
507 return RET_ERR_NULLPTR;
508 }
509
510 auto syncPromise = std::make_shared<ffrt::promise<RetError>>();
511 if (syncPromise == nullptr) {
512 HILOG_ERROR("syncPromise is nullptr.");
513 return RET_ERR_NULLPTR;
514 }
515 ffrt::future syncFuture = syncPromise->get_future();
516 handler_->PostTask([this, syncPromise, state]() {
517 sptr<AccessibilityAccountData> accountData =
518 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
519 if (!accountData) {
520 HILOG_ERROR("accountData is nullptr.");
521 syncPromise->set_value(RET_ERR_NULLPTR);
522 return;
523 }
524 RetError ret = accountData->GetConfig()->SetIgnoreRepeatClickState(state);
525 syncPromise->set_value(ret);
526 UpdateConfigState();
527 Singleton<AccessibleAbilityManagerService>::GetInstance().UpdateInputFilter();
528 }, "TASK_SET_IGNORE_REPEAT_CLICK_STATE");
529
530 ffrt::future_status wait = syncFuture.wait_for(std::chrono::milliseconds(DATASHARE_DEFAULT_TIMEOUT));
531 if (wait != ffrt::future_status::ready) {
532 HILOG_ERROR("SetIgnoreRepeatClickState Failed to wait result");
533 return RET_ERR_TIME_OUT;
534 }
535 return syncFuture.get();
536 }
537
SetIgnoreRepeatClickTime(const uint32_t time)538 RetError AccessibilitySettings::SetIgnoreRepeatClickTime(const uint32_t time)
539 {
540 HILOG_INFO("click response time = [%{public}u]", time);
541 HITRACE_METER_NAME(HITRACE_TAG_ACCESSIBILITY_MANAGER, "SetIgnoreRepeatClickTime:" + std::to_string(time));
542
543 if (!handler_) {
544 HILOG_ERROR("handler_ is nullptr.");
545 return RET_ERR_NULLPTR;
546 }
547
548 auto syncPromise = std::make_shared<ffrt::promise<RetError>>();
549 if (syncPromise == nullptr) {
550 HILOG_ERROR("syncPromise is nullptr.");
551 return RET_ERR_NULLPTR;
552 }
553 ffrt::future syncFuture = syncPromise->get_future();
554 handler_->PostTask([this, syncPromise, time]() {
555 sptr<AccessibilityAccountData> accountData =
556 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
557 if (!accountData) {
558 HILOG_ERROR("accountData is nullptr.");
559 syncPromise->set_value(RET_ERR_NULLPTR);
560 return;
561 }
562 RetError ret = accountData->GetConfig()->SetIgnoreRepeatClickTime(time);
563 syncPromise->set_value(ret);
564 UpdateIgnoreRepeatClickTime();
565 Singleton<AccessibleAbilityManagerService>::GetInstance().UpdateInputFilter();
566 }, "TASK_SET_IGNORE_REPEAT_CLICK_TIME");
567
568 ffrt::future_status wait = syncFuture.wait_for(std::chrono::milliseconds(DATASHARE_DEFAULT_TIMEOUT));
569 if (wait != ffrt::future_status::ready) {
570 HILOG_ERROR("SetIgnoreRepeatClickTime Failed to wait result");
571 return RET_ERR_TIME_OUT;
572 }
573 return syncFuture.get();
574 }
575
UpdateSettingsInAtoHosStatePart(ConfigValueAtoHosUpdate & atoHosValue)576 void AccessibilitySettings::UpdateSettingsInAtoHosStatePart(ConfigValueAtoHosUpdate &atoHosValue)
577 {
578 sptr<AccessibilityAccountData> accountData =
579 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
580 // set
581 if (atoHosValue.daltonizationState) {
582 accountData->GetConfig()->SetDaltonizationState(atoHosValue.daltonizationState);
583 }
584 if (atoHosValue.invertColor) {
585 accountData->GetConfig()->SetInvertColorState(atoHosValue.invertColor);
586 }
587 if (atoHosValue.audioMono) {
588 accountData->GetConfig()->SetAudioMonoState(atoHosValue.audioMono);
589 }
590 if (atoHosValue.highContrastText) {
591 accountData->GetConfig()->SetHighContrastTextState(atoHosValue.highContrastText);
592 }
593 if (atoHosValue.ignoreRepeatClickState) {
594 accountData->GetConfig()->SetIgnoreRepeatClickState(atoHosValue.ignoreRepeatClickState);
595 }
596 if (atoHosValue.shortcutEnabled) {
597 accountData->GetConfig()->SetShortKeyState(atoHosValue.shortcutEnabled);
598 accountData->GetConfig()->SetShortKeyOnLockScreenState(true);
599 } else {
600 accountData->GetConfig()->SetShortKeyOnLockScreenState(false);
601 }
602 if (atoHosValue.screenMagnificationState) {
603 accountData->GetConfig()->SetScreenMagnificationState(atoHosValue.screenMagnificationState);
604 }
605 UpdateConfigState();
606 }
607
UpdateSettingsInAtoHos()608 void AccessibilitySettings::UpdateSettingsInAtoHos()
609 {
610 sptr<AccessibilityAccountData> accountData =
611 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
612 ConfigValueAtoHosUpdate atoHosValue;
613 accountData->GetConfigValueAtoHos(atoHosValue);
614
615 HILOG_INFO("daltonizationState(%{public}d), invertColor(%{public}d), \
616 audioMono(%{public}d), audioBalance(%{public}f), highContrastText(%{public}d), \
617 isScreenReaderEnabled(%{public}d), ignoreRepeatClickState(%{public}d), \
618 clickResponseTime(%{public}d), ignoreRepeatClickTime(%{public}d), displayDaltonizer(%{public}d), \
619 shortcutEnabled(%{public}d), shortcutEnabledOnLockScreen(%{public}d), shortcutTimeout(%{public}d), \
620 screenMagnificationState(%{public}d).",
621 atoHosValue.daltonizationState, atoHosValue.invertColor, atoHosValue.audioMono, atoHosValue.audioBalance,
622 atoHosValue.highContrastText, atoHosValue.isScreenReaderEnabled, atoHosValue.ignoreRepeatClickState,
623 atoHosValue.clickResponseTime, atoHosValue.ignoreRepeatClickTime, atoHosValue.displayDaltonizer,
624 atoHosValue.shortcutEnabled, atoHosValue.shortcutEnabledOnLockScreen, atoHosValue.shortcutTimeout,
625 atoHosValue.screenMagnificationState);
626
627 UpdateSettingsInAtoHosStatePart(atoHosValue);
628
629 if (atoHosValue.audioBalance != 0.0) {
630 accountData->GetConfig()->SetAudioBalance(atoHosValue.audioBalance);
631 UpdateAudioBalance();
632 }
633 if (atoHosValue.clickResponseTime != 0) {
634 accountData->GetConfig()->SetClickResponseTime(static_cast<uint32_t>(atoHosValue.clickResponseTime));
635 UpdateClickResponseTime();
636 }
637 if (atoHosValue.ignoreRepeatClickTime != 0) {
638 accountData->GetConfig()->SetIgnoreRepeatClickTime(static_cast<uint32_t>(atoHosValue.ignoreRepeatClickTime));
639 UpdateIgnoreRepeatClickTime();
640 }
641 if (atoHosValue.displayDaltonizer != 0) {
642 accountData->GetConfig()->SetDaltonizationColorFilter(static_cast<uint32_t>(atoHosValue.displayDaltonizer));
643 UpdateDaltonizationColorFilter();
644 }
645 if (atoHosValue.shortcutTimeout == 1) {
646 accountData->GetConfig()->SetShortKeyTimeout(SHORT_KEY_TIMEOUT_AFTER_USE);
647 } else if (atoHosValue.shortcutTimeout == 0) {
648 accountData->GetConfig()->SetShortKeyTimeout(SHORT_KEY_TIMEOUT_BEFORE_USE);
649 }
650
651 if (atoHosValue.isScreenReaderEnabled) {
652 uint32_t capabilities = CAPABILITY_GESTURE | CAPABILITY_KEY_EVENT_OBSERVER | CAPABILITY_RETRIEVE |
653 CAPABILITY_TOUCH_GUIDE | CAPABILITY_ZOOM;
654 accountData->EnableAbility(SCREEN_READER_BUNDLE_ABILITY_NAME, capabilities);
655 }
656 accountData->GetConfig()->CloneShortkeyService(atoHosValue.isScreenReaderEnabled);
657 accountData->GetConfig()->SetDefaultShortcutKeyService();
658
659 accountData->GetConfig()->SetStartToHosState(false);
660 }
661
GetScreenMagnificationState(bool & state)662 RetError AccessibilitySettings::GetScreenMagnificationState(bool &state)
663 {
664 HILOG_DEBUG();
665 if (!handler_) {
666 HILOG_ERROR("handler_ is nullptr.");
667 return RET_ERR_NULLPTR;
668 }
669
670 auto syncPromise = std::make_shared<ffrt::promise<RetError>>();
671 if (syncPromise == nullptr) {
672 HILOG_ERROR("syncPromise is nullptr.");
673 return RET_ERR_NULLPTR;
674 }
675
676 ffrt::future syncFuture = syncPromise->get_future();
677 auto tmpState = std::make_shared<bool>(state);
678 handler_->PostTask([this, syncPromise, tmpState]() {
679 HILOG_DEBUG();
680 sptr<AccessibilityAccountData> accountData =
681 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
682 if (!accountData) {
683 HILOG_ERROR("accountData is nullptr");
684 syncPromise->set_value(RET_ERR_NULLPTR);
685 return;
686 }
687 *tmpState = accountData->GetConfig()->GetScreenMagnificationState();
688 syncPromise->set_value(RET_OK);
689 }, "TASK_GET_SCREENMAGNIFIER_STATE");
690
691 ffrt::future_status wait = syncFuture.wait_for(std::chrono::milliseconds(DATASHARE_DEFAULT_TIMEOUT));
692 if (wait != ffrt::future_status::ready) {
693 HILOG_ERROR("GetScreenMagnificationState Failed to wait result");
694 return RET_ERR_TIME_OUT;
695 }
696 state = *tmpState;
697 return syncFuture.get();
698 }
699
GetShortKeyState(bool & state)700 RetError AccessibilitySettings::GetShortKeyState(bool &state)
701 {
702 HILOG_DEBUG();
703 if (!handler_) {
704 HILOG_ERROR("handler_ is nullptr.");
705 return RET_ERR_NULLPTR;
706 }
707
708 auto syncPromise = std::make_shared<ffrt::promise<RetError>>();
709 if (syncPromise == nullptr) {
710 HILOG_ERROR("syncPromise is nullptr.");
711 return RET_ERR_NULLPTR;
712 }
713 ffrt::future syncFuture = syncPromise->get_future();
714 auto tmpState = std::make_shared<bool>(state);
715 handler_->PostTask([this, syncPromise, tmpState]() {
716 HILOG_DEBUG();
717 sptr<AccessibilityAccountData> accountData =
718 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
719 if (!accountData) {
720 HILOG_ERROR("accountData is nullptr");
721 syncPromise->set_value(RET_ERR_NULLPTR);
722 return;
723 }
724 *tmpState = accountData->GetConfig()->GetShortKeyState();
725 syncPromise->set_value(RET_OK);
726 }, "TASK_GET_SHORTKEY_STATE");
727
728 ffrt::future_status wait = syncFuture.wait_for(std::chrono::milliseconds(DATASHARE_DEFAULT_TIMEOUT));
729 if (wait != ffrt::future_status::ready) {
730 HILOG_ERROR("GetShortKeyState Failed to wait result");
731 return RET_ERR_TIME_OUT;
732 }
733 state = *tmpState;
734 return syncFuture.get();
735 }
736
GetMouseKeyState(bool & state)737 RetError AccessibilitySettings::GetMouseKeyState(bool &state)
738 {
739 HILOG_DEBUG();
740 if (!handler_) {
741 HILOG_ERROR("handler_ is nullptr.");
742 return RET_ERR_NULLPTR;
743 }
744
745 auto syncPromise = std::make_shared<ffrt::promise<RetError>>();
746 if (syncPromise == nullptr) {
747 HILOG_ERROR("syncPromise is nullptr.");
748 return RET_ERR_NULLPTR;
749 }
750 ffrt::future syncFuture = syncPromise->get_future();
751 auto tmpState = std::make_shared<bool>(state);
752 handler_->PostTask([this, syncPromise, tmpState]() {
753 HILOG_DEBUG();
754 sptr<AccessibilityAccountData> accountData =
755 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
756 if (!accountData) {
757 HILOG_ERROR("accountData is nullptr");
758 syncPromise->set_value(RET_ERR_NULLPTR);
759 return;
760 }
761 *tmpState = accountData->GetConfig()->GetMouseKeyState();
762 syncPromise->set_value(RET_OK);
763 }, "TASK_GET_MOUSEKEY_STATE");
764
765 ffrt::future_status wait = syncFuture.wait_for(std::chrono::milliseconds(DATASHARE_DEFAULT_TIMEOUT));
766 if (wait != ffrt::future_status::ready) {
767 HILOG_ERROR("GetMouseKeyState Failed to wait result");
768 return RET_ERR_TIME_OUT;
769 }
770 state = *tmpState;
771 return syncFuture.get();
772 }
773
GetMouseAutoClick(int32_t & time)774 RetError AccessibilitySettings::GetMouseAutoClick(int32_t &time)
775 {
776 HILOG_DEBUG();
777 auto syncPromise = std::make_shared<ffrt::promise<RetError>>();
778 if (syncPromise == nullptr) {
779 HILOG_ERROR("syncPromise is nullptr.");
780 return RET_ERR_NULLPTR;
781 }
782 ffrt::future syncFuture = syncPromise->get_future();
783 auto tmpTime = std::make_shared<int32_t>(time);
784 handler_->PostTask([this, syncPromise, tmpTime]() {
785 HILOG_DEBUG();
786 sptr<AccessibilityAccountData> accountData =
787 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
788 if (!accountData) {
789 HILOG_ERROR("accountData is nullptr");
790 syncPromise->set_value(RET_ERR_NULLPTR);
791 return;
792 }
793 *tmpTime = accountData->GetConfig()->GetMouseAutoClick();
794 syncPromise->set_value(RET_OK);
795 }, "TASK_GET_MOUSE_AUTOCLICK");
796
797 ffrt::future_status wait = syncFuture.wait_for(std::chrono::milliseconds(DATASHARE_DEFAULT_TIMEOUT));
798 if (wait != ffrt::future_status::ready) {
799 HILOG_ERROR("GetMouseAutoClick Failed to wait result");
800 return RET_ERR_TIME_OUT;
801 }
802 time = *tmpTime;
803 return syncFuture.get();
804 }
805
GetShortkeyTarget(std::string & name)806 RetError AccessibilitySettings::GetShortkeyTarget(std::string &name)
807 {
808 HILOG_DEBUG();
809 auto syncPromise = std::make_shared<ffrt::promise<RetError>>();
810 if (syncPromise == nullptr) {
811 HILOG_ERROR("syncPromise is nullptr.");
812 return RET_ERR_NULLPTR;
813 }
814 ffrt::future syncFuture = syncPromise->get_future();
815 auto tmpName = std::make_shared<std::string>(name);
816 handler_->PostTask([this, syncPromise, tmpName]() {
817 HILOG_DEBUG();
818 sptr<AccessibilityAccountData> accountData =
819 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
820 if (!accountData) {
821 HILOG_ERROR("accountData is nullptr");
822 syncPromise->set_value(RET_ERR_NULLPTR);
823 return;
824 }
825 *tmpName = accountData->GetConfig()->GetShortkeyTarget();
826 syncPromise->set_value(RET_OK);
827 }, "TASK_GET_SHORTKEY_TARGET");
828
829 ffrt::future_status wait = syncFuture.wait_for(std::chrono::milliseconds(DATASHARE_DEFAULT_TIMEOUT));
830 if (wait != ffrt::future_status::ready) {
831 HILOG_ERROR("GetShortkeyTarget Failed to wait result");
832 return RET_ERR_TIME_OUT;
833 }
834 name = *tmpName;
835 return syncFuture.get();
836 }
837
GetShortkeyMultiTarget(std::vector<std::string> & name)838 RetError AccessibilitySettings::GetShortkeyMultiTarget(std::vector<std::string> &name)
839 {
840 HILOG_DEBUG();
841 auto syncPromise = std::make_shared<ffrt::promise<RetError>>();
842 if (syncPromise == nullptr) {
843 HILOG_ERROR("syncPromise is nullptr.");
844 return RET_ERR_NULLPTR;
845 }
846 ffrt::future syncFuture = syncPromise->get_future();
847 auto tmpName = std::make_shared<std::vector<std::string>>(name);
848 handler_->PostTask([this, syncPromise, tmpName]() {
849 HILOG_DEBUG();
850 sptr<AccessibilityAccountData> accountData =
851 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
852 if (!accountData) {
853 HILOG_ERROR("accountData is nullptr");
854 syncPromise->set_value(RET_ERR_NULLPTR);
855 return;
856 }
857 *tmpName = accountData->GetConfig()->GetShortkeyMultiTarget();
858 syncPromise->set_value(RET_OK);
859 }, "TASK_GET_SHORTKEY_MULTI_TARGET");
860
861 ffrt::future_status wait = syncFuture.wait_for(std::chrono::milliseconds(DATASHARE_DEFAULT_TIMEOUT));
862 if (wait != ffrt::future_status::ready) {
863 HILOG_ERROR("GetShortkeyMultiTarget Failed to wait result");
864 return RET_ERR_TIME_OUT;
865 }
866 name = *tmpName;
867 return syncFuture.get();
868 }
869
GetHighContrastTextState(bool & state)870 RetError AccessibilitySettings::GetHighContrastTextState(bool &state)
871 {
872 HILOG_DEBUG();
873 auto syncPromise = std::make_shared<ffrt::promise<RetError>>();
874 if (syncPromise == nullptr) {
875 HILOG_ERROR("syncPromise is nullptr.");
876 return RET_ERR_NULLPTR;
877 }
878 ffrt::future syncFuture = syncPromise->get_future();
879 auto tmpState = std::make_shared<bool>(state);
880 handler_->PostTask([this, syncPromise, tmpState]() {
881 HILOG_DEBUG();
882 sptr<AccessibilityAccountData> accountData =
883 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
884 if (!accountData) {
885 HILOG_ERROR("accountData is nullptr");
886 syncPromise->set_value(RET_ERR_NULLPTR);
887 return;
888 }
889 *tmpState = accountData->GetConfig()->GetHighContrastTextState();
890 syncPromise->set_value(RET_OK);
891 }, "TASK_GET_HIGHCONTRASTTEXT_STATE");
892
893 ffrt::future_status wait = syncFuture.wait_for(std::chrono::milliseconds(DATASHARE_DEFAULT_TIMEOUT));
894 if (wait != ffrt::future_status::ready) {
895 HILOG_ERROR("GetHighContrastTextState Failed to wait result");
896 return RET_ERR_TIME_OUT;
897 }
898 state = *tmpState;
899 return syncFuture.get();
900 }
901
GetDaltonizationState(bool & state)902 RetError AccessibilitySettings::GetDaltonizationState(bool &state)
903 {
904 HILOG_DEBUG();
905 auto syncPromise = std::make_shared<ffrt::promise<RetError>>();
906 if (syncPromise == nullptr) {
907 HILOG_ERROR("syncPromise is nullptr.");
908 return RET_ERR_NULLPTR;
909 }
910 ffrt::future syncFuture = syncPromise->get_future();
911 auto tmpState = std::make_shared<bool>(state);
912 handler_->PostTask([this, syncPromise, tmpState]() {
913 HILOG_DEBUG();
914 sptr<AccessibilityAccountData> accountData =
915 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
916 if (!accountData) {
917 HILOG_ERROR("accountData is nullptr");
918 syncPromise->set_value(RET_ERR_NULLPTR);
919 return;
920 }
921 *tmpState = accountData->GetConfig()->GetDaltonizationState();
922 syncPromise->set_value(RET_OK);
923 }, "TASK_GET_DALTONIZATIONSTATE_STATE");
924
925 ffrt::future_status wait = syncFuture.wait_for(std::chrono::milliseconds(DATASHARE_DEFAULT_TIMEOUT));
926 if (wait != ffrt::future_status::ready) {
927 HILOG_ERROR("GetDaltonizationState Failed to wait result");
928 return RET_ERR_TIME_OUT;
929 }
930 state = *tmpState;
931 return syncFuture.get();
932 }
933
GetInvertColorState(bool & state)934 RetError AccessibilitySettings::GetInvertColorState(bool &state)
935 {
936 HILOG_DEBUG();
937
938 auto syncPromise = std::make_shared<ffrt::promise<RetError>>();
939 if (syncPromise == nullptr) {
940 HILOG_ERROR("syncPromise is nullptr.");
941 return RET_ERR_NULLPTR;
942 }
943 ffrt::future syncFuture = syncPromise->get_future();
944 auto tmpState = std::make_shared<bool>(state);
945 handler_->PostTask([this, syncPromise, tmpState]() {
946 HILOG_DEBUG();
947 sptr<AccessibilityAccountData> accountData =
948 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
949 if (!accountData) {
950 HILOG_ERROR("accountData is nullptr");
951 syncPromise->set_value(RET_ERR_NULLPTR);
952 return;
953 }
954 *tmpState = accountData->GetConfig()->GetInvertColorState();
955 syncPromise->set_value(RET_OK);
956 }, "TASK_GET_INVERTCOLOR_STATE");
957
958 ffrt::future_status wait = syncFuture.wait_for(std::chrono::milliseconds(DATASHARE_DEFAULT_TIMEOUT));
959 if (wait != ffrt::future_status::ready) {
960 HILOG_ERROR("GetInvertColorState Failed to wait result");
961 return RET_ERR_TIME_OUT;
962 }
963 state = *tmpState;
964 return syncFuture.get();
965 }
966
GetAnimationOffState(bool & state)967 RetError AccessibilitySettings::GetAnimationOffState(bool &state)
968 {
969 HILOG_DEBUG();
970 auto syncPromise = std::make_shared<ffrt::promise<RetError>>();
971 if (syncPromise == nullptr) {
972 HILOG_ERROR("syncPromise is nullptr.");
973 return RET_ERR_NULLPTR;
974 }
975 ffrt::future syncFuture = syncPromise->get_future();
976 auto tmpState = std::make_shared<bool>(state);
977 handler_->PostTask([this, syncPromise, tmpState]() {
978 HILOG_DEBUG();
979 sptr<AccessibilityAccountData> accountData =
980 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
981 if (!accountData) {
982 HILOG_ERROR("accountData is nullptr");
983 syncPromise->set_value(RET_ERR_NULLPTR);
984 return;
985 }
986 *tmpState = accountData->GetConfig()->GetAnimationOffState();
987 syncPromise->set_value(RET_OK);
988 }, "TASK_GET_ANIMATIONOFF_STATE");
989
990 ffrt::future_status wait = syncFuture.wait_for(std::chrono::milliseconds(DATASHARE_DEFAULT_TIMEOUT));
991 if (wait != ffrt::future_status::ready) {
992 HILOG_ERROR("GetAnimationOffState Failed to wait result");
993 return RET_ERR_TIME_OUT;
994 }
995 state = *tmpState;
996 return syncFuture.get();
997 }
998
GetAudioMonoState(bool & state)999 RetError AccessibilitySettings::GetAudioMonoState(bool &state)
1000 {
1001 HILOG_DEBUG();
1002 auto syncPromise = std::make_shared<ffrt::promise<RetError>>();
1003 if (syncPromise == nullptr) {
1004 HILOG_ERROR("syncPromise is nullptr.");
1005 return RET_ERR_NULLPTR;
1006 }
1007 ffrt::future syncFuture = syncPromise->get_future();
1008 auto tmpState = std::make_shared<bool>(state);
1009 handler_->PostTask([this, syncPromise, tmpState]() {
1010 HILOG_DEBUG();
1011 sptr<AccessibilityAccountData> accountData =
1012 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
1013 if (!accountData) {
1014 HILOG_ERROR("accountData is nullptr");
1015 syncPromise->set_value(RET_ERR_NULLPTR);
1016 return;
1017 }
1018 *tmpState = accountData->GetConfig()->GetAudioMonoState();
1019 syncPromise->set_value(RET_OK);
1020 }, "TASK_GET_AUDIOMONO_STATE");
1021
1022 ffrt::future_status wait = syncFuture.wait_for(std::chrono::milliseconds(DATASHARE_DEFAULT_TIMEOUT));
1023 if (wait != ffrt::future_status::ready) {
1024 HILOG_ERROR("GetAudioMonoState Failed to wait result");
1025 return RET_ERR_TIME_OUT;
1026 }
1027 state = *tmpState;
1028 return syncFuture.get();
1029 }
1030
GetDaltonizationColorFilter(uint32_t & type)1031 RetError AccessibilitySettings::GetDaltonizationColorFilter(uint32_t &type)
1032 {
1033 HILOG_DEBUG();
1034
1035 auto syncPromise = std::make_shared<ffrt::promise<RetError>>();
1036 if (syncPromise == nullptr) {
1037 HILOG_ERROR("syncPromise is nullptr.");
1038 return RET_ERR_NULLPTR;
1039 }
1040 ffrt::future syncFuture = syncPromise->get_future();
1041 auto tmpType = std::make_shared<uint32_t>(type);
1042 handler_->PostTask([this, syncPromise, tmpType]() {
1043 HILOG_DEBUG();
1044 sptr<AccessibilityAccountData> accountData =
1045 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
1046 if (!accountData) {
1047 HILOG_ERROR("accountData is nullptr");
1048 syncPromise->set_value(RET_ERR_NULLPTR);
1049 return;
1050 }
1051 *tmpType = accountData->GetConfig()->GetDaltonizationColorFilter();
1052 syncPromise->set_value(RET_OK);
1053 }, "TASK_GET_DALTONIZATION_COLORFILTER");
1054
1055 ffrt::future_status wait = syncFuture.wait_for(std::chrono::milliseconds(DATASHARE_DEFAULT_TIMEOUT));
1056 if (wait != ffrt::future_status::ready) {
1057 HILOG_ERROR("GetDaltonizationColorFilter Failed to wait result");
1058 return RET_ERR_TIME_OUT;
1059 }
1060 type = *tmpType;
1061 return syncFuture.get();
1062 }
1063
GetContentTimeout(uint32_t & timer)1064 RetError AccessibilitySettings::GetContentTimeout(uint32_t &timer)
1065 {
1066 HILOG_DEBUG();
1067 auto syncPromise = std::make_shared<ffrt::promise<RetError>>();
1068 if (syncPromise == nullptr) {
1069 HILOG_ERROR("syncPromise is nullptr.");
1070 return RET_ERR_NULLPTR;
1071 }
1072 ffrt::future syncFuture = syncPromise->get_future();
1073 auto tmpTimer = std::make_shared<uint32_t>(timer);
1074 handler_->PostTask([this, syncPromise, tmpTimer]() {
1075 HILOG_DEBUG();
1076 sptr<AccessibilityAccountData> accountData =
1077 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
1078 if (!accountData) {
1079 HILOG_ERROR("accountData is nullptr");
1080 syncPromise->set_value(RET_ERR_NULLPTR);
1081 return;
1082 }
1083 *tmpTimer = accountData->GetConfig()->GetContentTimeout();
1084 syncPromise->set_value(RET_OK);
1085 }, "TASK_GET_CONTENT_TIMEOUT");
1086
1087 ffrt::future_status wait = syncFuture.wait_for(std::chrono::milliseconds(DATASHARE_DEFAULT_TIMEOUT));
1088 if (wait != ffrt::future_status::ready) {
1089 HILOG_ERROR("GetContentTimeout Failed to wait result");
1090 return RET_ERR_TIME_OUT;
1091 }
1092 timer = *tmpTimer;
1093 return syncFuture.get();
1094 }
1095
GetBrightnessDiscount(float & brightness)1096 RetError AccessibilitySettings::GetBrightnessDiscount(float &brightness)
1097 {
1098 HILOG_DEBUG();
1099 auto syncPromise = std::make_shared<ffrt::promise<RetError>>();
1100 if (syncPromise == nullptr) {
1101 HILOG_ERROR("syncPromise is nullptr.");
1102 return RET_ERR_NULLPTR;
1103 }
1104 ffrt::future syncFuture = syncPromise->get_future();
1105 auto tmpBrightness = std::make_shared<float>(brightness);
1106 handler_->PostTask([this, syncPromise, tmpBrightness]() {
1107 HILOG_DEBUG();
1108 sptr<AccessibilityAccountData> accountData =
1109 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
1110 if (!accountData) {
1111 HILOG_ERROR("accountData is nullptr");
1112 syncPromise->set_value(RET_ERR_NULLPTR);
1113 return;
1114 }
1115 *tmpBrightness = accountData->GetConfig()->GetBrightnessDiscount();
1116 syncPromise->set_value(RET_OK);
1117 }, "TASK_GET_BRIGHTNESS_DISCOUNT");
1118
1119 ffrt::future_status wait = syncFuture.wait_for(std::chrono::milliseconds(DATASHARE_DEFAULT_TIMEOUT));
1120 if (wait != ffrt::future_status::ready) {
1121 HILOG_ERROR("GetBrightnessDiscount Failed to wait result");
1122 return RET_ERR_TIME_OUT;
1123 }
1124 brightness = *tmpBrightness;
1125 return syncFuture.get();
1126 }
1127
GetAudioBalance(float & balance)1128 RetError AccessibilitySettings::GetAudioBalance(float &balance)
1129 {
1130 HILOG_DEBUG();
1131 auto syncPromise = std::make_shared<ffrt::promise<RetError>>();
1132 if (syncPromise == nullptr) {
1133 HILOG_ERROR("syncPromise is nullptr.");
1134 return RET_ERR_NULLPTR;
1135 }
1136 ffrt::future syncFuture = syncPromise->get_future();
1137 auto tmpBalance = std::make_shared<float>(balance);
1138 handler_->PostTask([this, syncPromise, tmpBalance]() {
1139 HILOG_DEBUG();
1140 sptr<AccessibilityAccountData> accountData =
1141 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
1142 if (!accountData) {
1143 HILOG_ERROR("accountData is nullptr");
1144 syncPromise->set_value(RET_ERR_NULLPTR);
1145 return;
1146 }
1147 *tmpBalance = accountData->GetConfig()->GetAudioBalance();
1148 syncPromise->set_value(RET_OK);
1149 }, "TASK_GET_AUDIO_BALANCE");
1150
1151 ffrt::future_status wait = syncFuture.wait_for(std::chrono::milliseconds(DATASHARE_DEFAULT_TIMEOUT));
1152 if (wait != ffrt::future_status::ready) {
1153 HILOG_ERROR("GetAudioBalance Failed to wait result");
1154 return RET_ERR_TIME_OUT;
1155 }
1156 balance = *tmpBalance;
1157 return syncFuture.get();
1158 }
1159
GetClickResponseTime(uint32_t & time)1160 RetError AccessibilitySettings::GetClickResponseTime(uint32_t &time)
1161 {
1162 HILOG_DEBUG();
1163 auto syncPromise = std::make_shared<ffrt::promise<RetError>>();
1164 if (syncPromise == nullptr) {
1165 HILOG_ERROR("syncPromise is nullptr.");
1166 return RET_ERR_NULLPTR;
1167 }
1168 ffrt::future syncFuture = syncPromise->get_future();
1169 auto tmpTime = std::make_shared<uint32_t>(time);
1170 handler_->PostTask([this, syncPromise, tmpTime]() {
1171 HILOG_DEBUG();
1172 sptr<AccessibilityAccountData> accountData =
1173 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
1174 if (!accountData) {
1175 HILOG_ERROR("accountData is nullptr");
1176 syncPromise->set_value(RET_ERR_NULLPTR);
1177 return;
1178 }
1179 *tmpTime = accountData->GetConfig()->GetClickResponseTime();
1180 syncPromise->set_value(RET_OK);
1181 }, "TASK_GET_CLICK_RESPONSE_TIME");
1182
1183 ffrt::future_status wait = syncFuture.wait_for(std::chrono::milliseconds(DATASHARE_DEFAULT_TIMEOUT));
1184 if (wait != ffrt::future_status::ready) {
1185 HILOG_ERROR("GetClickResponseTime Failed to wait result");
1186 return RET_ERR_TIME_OUT;
1187 }
1188 time = *tmpTime;
1189 return syncFuture.get();
1190 }
1191
GetIgnoreRepeatClickState(bool & state)1192 RetError AccessibilitySettings::GetIgnoreRepeatClickState(bool &state)
1193 {
1194 HILOG_DEBUG();
1195 auto syncPromise = std::make_shared<ffrt::promise<RetError>>();
1196 if (syncPromise == nullptr) {
1197 HILOG_ERROR("syncPromise is nullptr.");
1198 return RET_ERR_NULLPTR;
1199 }
1200 ffrt::future syncFuture = syncPromise->get_future();
1201 auto tmpState = std::make_shared<bool>(state);
1202 handler_->PostTask([this, syncPromise, tmpState]() {
1203 HILOG_DEBUG();
1204 sptr<AccessibilityAccountData> accountData =
1205 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
1206 if (!accountData) {
1207 HILOG_ERROR("accountData is nullptr");
1208 syncPromise->set_value(RET_ERR_NULLPTR);
1209 return;
1210 }
1211 *tmpState = accountData->GetConfig()->GetIgnoreRepeatClickState();
1212 syncPromise->set_value(RET_OK);
1213 }, "TASK_GET_IGNORE_REPEAT_CLICK_STATE");
1214
1215 ffrt::future_status wait = syncFuture.wait_for(std::chrono::milliseconds(DATASHARE_DEFAULT_TIMEOUT));
1216 if (wait != ffrt::future_status::ready) {
1217 HILOG_ERROR("GetIgnoreRepeatClickState Failed to wait result");
1218 return RET_ERR_TIME_OUT;
1219 }
1220 state = *tmpState;
1221 return syncFuture.get();
1222 }
1223
GetIgnoreRepeatClickTime(uint32_t & time)1224 RetError AccessibilitySettings::GetIgnoreRepeatClickTime(uint32_t &time)
1225 {
1226 HILOG_DEBUG();
1227 auto syncPromise = std::make_shared<ffrt::promise<RetError>>();
1228 if (syncPromise == nullptr) {
1229 HILOG_ERROR("syncPromise is nullptr.");
1230 return RET_ERR_NULLPTR;
1231 }
1232 ffrt::future syncFuture = syncPromise->get_future();
1233 auto tmpTime = std::make_shared<uint32_t>(time);
1234 handler_->PostTask([this, syncPromise, tmpTime]() {
1235 HILOG_DEBUG();
1236 sptr<AccessibilityAccountData> accountData =
1237 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
1238 if (!accountData) {
1239 HILOG_ERROR("accountData is nullptr");
1240 syncPromise->set_value(RET_ERR_NULLPTR);
1241 return;
1242 }
1243 *tmpTime = accountData->GetConfig()->GetIgnoreRepeatClickTime();
1244 syncPromise->set_value(RET_OK);
1245 }, "TASK_GET_IGNORE_REPEAT_CLICK_TIME");
1246
1247 ffrt::future_status wait = syncFuture.wait_for(std::chrono::milliseconds(DATASHARE_DEFAULT_TIMEOUT));
1248 if (wait != ffrt::future_status::ready) {
1249 HILOG_ERROR("GetIgnoreRepeatClickTime Failed to wait result");
1250 return RET_ERR_TIME_OUT;
1251 }
1252 time = *tmpTime;
1253 return syncFuture.get();
1254 }
1255
UpdateConfigState()1256 void AccessibilitySettings::UpdateConfigState()
1257 {
1258 handler_->PostTask([this]() {
1259 HILOG_INFO("UpdateConfigState.");
1260 sptr<AccessibilityAccountData> accountData =
1261 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
1262 if (!accountData) {
1263 HILOG_ERROR("Account data is null");
1264 return;
1265 }
1266
1267 uint32_t state = accountData->GetConfig()->GetConfigState();
1268 for (auto &callback : accountData->GetConfigCallbacks()) {
1269 if (callback) {
1270 callback->OnConfigStateChanged(state);
1271 }
1272 }
1273 }, "UpdateConfigState");
1274 }
1275
UpdateAudioBalance()1276 void AccessibilitySettings::UpdateAudioBalance()
1277 {
1278 handler_->PostTask([this]() {
1279 HILOG_INFO("UpdateAudioBalance.");
1280 sptr<AccessibilityAccountData> accountData =
1281 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
1282 if (!accountData) {
1283 HILOG_ERROR("Account data is null");
1284 return;
1285 }
1286
1287 float audioBalance = accountData->GetConfig()->GetAudioBalance();
1288 for (auto &callback : accountData->GetConfigCallbacks()) {
1289 if (callback) {
1290 callback->OnAudioBalanceChanged(audioBalance);
1291 }
1292 }
1293 }, "UpdateAudioBalance");
1294 }
1295
UpdateBrightnessDiscount()1296 void AccessibilitySettings::UpdateBrightnessDiscount()
1297 {
1298 handler_->PostTask([this]() {
1299 HILOG_INFO("UpdateBrightnessDiscount.");
1300 sptr<AccessibilityAccountData> accountData =
1301 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
1302 if (!accountData) {
1303 HILOG_ERROR("Account data is null");
1304 return;
1305 }
1306
1307 float brightnessDiscount = accountData->GetConfig()->GetBrightnessDiscount();
1308 for (auto &callback : accountData->GetConfigCallbacks()) {
1309 if (callback) {
1310 callback->OnBrightnessDiscountChanged(brightnessDiscount);
1311 }
1312 }
1313 }, "UpdateBrightnessDiscount");
1314 }
1315
UpdateContentTimeout()1316 void AccessibilitySettings::UpdateContentTimeout()
1317 {
1318 handler_->PostTask([this]() {
1319 HILOG_INFO("UpdateContentTimeout.");
1320 sptr<AccessibilityAccountData> accountData =
1321 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
1322 if (!accountData) {
1323 HILOG_ERROR("Account data is null");
1324 return;
1325 }
1326
1327 uint32_t contentTimeout = accountData->GetConfig()->GetContentTimeout();
1328 for (auto &callback : accountData->GetConfigCallbacks()) {
1329 if (callback) {
1330 callback->OnContentTimeoutChanged(contentTimeout);
1331 }
1332 }
1333 }, "UpdateContentTimeout");
1334 }
1335
UpdateDaltonizationColorFilter()1336 void AccessibilitySettings::UpdateDaltonizationColorFilter()
1337 {
1338 handler_->PostTask([this]() {
1339 HILOG_INFO("UpdateDaltonizationColorFilter.");
1340 sptr<AccessibilityAccountData> accountData =
1341 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
1342 if (!accountData) {
1343 HILOG_ERROR("Account data is null");
1344 return;
1345 }
1346
1347 uint32_t daltonizationColorFilter = accountData->GetConfig()->GetDaltonizationColorFilter();
1348 for (auto &callback : accountData->GetConfigCallbacks()) {
1349 if (callback) {
1350 callback->OnDaltonizationColorFilterChanged(daltonizationColorFilter);
1351 }
1352 }
1353 }, "UpdateDaltonizationColorFilter");
1354 }
1355
UpdateMouseAutoClick()1356 void AccessibilitySettings::UpdateMouseAutoClick()
1357 {
1358 handler_->PostTask([this]() {
1359 HILOG_INFO("UpdateMouseAutoClick.");
1360 sptr<AccessibilityAccountData> accountData =
1361 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
1362 if (!accountData) {
1363 HILOG_ERROR("Account data is null");
1364 return;
1365 }
1366
1367 int32_t mouseAutoClick = accountData->GetConfig()->GetMouseAutoClick();
1368 for (auto &callback : accountData->GetConfigCallbacks()) {
1369 if (callback) {
1370 callback->OnMouseAutoClickChanged(mouseAutoClick);
1371 }
1372 }
1373 }, "UpdateMouseAutoClick");
1374 }
1375
UpdateShortkeyTarget()1376 void AccessibilitySettings::UpdateShortkeyTarget()
1377 {
1378 handler_->PostTask([this]() {
1379 HILOG_INFO("UpdateShortkeyTarget.");
1380 sptr<AccessibilityAccountData> accountData =
1381 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
1382 if (!accountData) {
1383 HILOG_ERROR("Account data is null");
1384 return;
1385 }
1386
1387 std::string shortkeyTarget = accountData->GetConfig()->GetShortkeyTarget();
1388 for (auto &callback : accountData->GetConfigCallbacks()) {
1389 if (callback) {
1390 callback->OnShortkeyTargetChanged(shortkeyTarget);
1391 }
1392 }
1393 }, "UpdateShortkeyTarget");
1394 }
1395
UpdateShortkeyMultiTarget()1396 void AccessibilitySettings::UpdateShortkeyMultiTarget()
1397 {
1398 handler_->PostTask([this]() {
1399 HILOG_INFO("UpdateShortkeyMultiTarget.");
1400 sptr<AccessibilityAccountData> accountData =
1401 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
1402 if (!accountData) {
1403 HILOG_ERROR("Account data is null");
1404 return;
1405 }
1406
1407 std::vector<std::string> shortkeyMultiTarget = accountData->GetConfig()->GetShortkeyMultiTarget();
1408 for (auto &callback : accountData->GetConfigCallbacks()) {
1409 if (callback) {
1410 callback->OnShortkeyMultiTargetChanged(shortkeyMultiTarget);
1411 }
1412 }
1413 }, "UpdateShortkeyMultiTarget");
1414 }
1415
UpdateClickResponseTime()1416 void AccessibilitySettings::UpdateClickResponseTime()
1417 {
1418 handler_->PostTask([this]() {
1419 HILOG_INFO("UpdateClickResponseTime.");
1420 sptr<AccessibilityAccountData> accountData =
1421 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
1422 if (!accountData) {
1423 HILOG_ERROR("Account data is null");
1424 return;
1425 }
1426
1427 uint32_t time = accountData->GetConfig()->GetClickResponseTime();
1428 for (auto &callback : accountData->GetConfigCallbacks()) {
1429 if (callback) {
1430 callback->OnClickResponseTimeChanged(time);
1431 }
1432 }
1433 }, "UpdateClickResponseTime");
1434 }
1435
UpdateIgnoreRepeatClickTime()1436 void AccessibilitySettings::UpdateIgnoreRepeatClickTime()
1437 {
1438 handler_->PostTask([this]() {
1439 HILOG_INFO("UpdateIgnoreRepeatClickTime.");
1440 sptr<AccessibilityAccountData> accountData =
1441 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
1442 if (!accountData) {
1443 HILOG_ERROR("Account data is null");
1444 return;
1445 }
1446
1447 uint32_t time = accountData->GetConfig()->GetIgnoreRepeatClickTime();
1448 for (auto &callback : accountData->GetConfigCallbacks()) {
1449 if (callback) {
1450 callback->OnIgnoreRepeatClickTimeChanged(time);
1451 }
1452 }
1453 }, "UpdateIgnoreRepeatClickTime");
1454 }
1455
GetCaptionProperty(AccessibilityConfig::CaptionProperty & caption)1456 RetError AccessibilitySettings::GetCaptionProperty(AccessibilityConfig::CaptionProperty &caption)
1457 {
1458 HILOG_DEBUG();
1459 if (!handler_) {
1460 HILOG_ERROR("handler_ is nullptr.");
1461 return RET_ERR_NULLPTR;
1462 }
1463
1464 auto syncPromise = std::make_shared<ffrt::promise<RetError>>();
1465 if (syncPromise == nullptr) {
1466 HILOG_ERROR("syncPromise is nullptr.");
1467 return RET_ERR_NULLPTR;
1468 }
1469
1470 ffrt::future syncFuture = syncPromise->get_future();
1471 auto tmpCaption = std::make_shared<AccessibilityConfig::CaptionProperty>(caption);
1472 handler_->PostTask([this, syncPromise, tmpCaption]() {
1473 HILOG_DEBUG();
1474 sptr<AccessibilityAccountData> accountData =
1475 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
1476 if (!accountData) {
1477 HILOG_ERROR("accountData is nullptr.");
1478 syncPromise->set_value(RET_ERR_NULLPTR);
1479 return;
1480 }
1481 *tmpCaption = accountData->GetConfig()->GetCaptionProperty();
1482 syncPromise->set_value(RET_OK);
1483 }, "TASK_GET_CAPTION_PROPERTY");
1484
1485 ffrt::future_status wait = syncFuture.wait_for(std::chrono::milliseconds(DATASHARE_DEFAULT_TIMEOUT));
1486 if (wait != ffrt::future_status::ready) {
1487 HILOG_ERROR("GetCaptionProperty Failed to wait result");
1488 return RET_ERR_TIME_OUT;
1489 }
1490 caption = *tmpCaption;
1491 return syncFuture.get();
1492 }
1493
SetCaptionProperty(const AccessibilityConfig::CaptionProperty & caption)1494 RetError AccessibilitySettings::SetCaptionProperty(const AccessibilityConfig::CaptionProperty &caption)
1495 {
1496 HILOG_DEBUG();
1497 if (!handler_) {
1498 HILOG_ERROR("handler_ is nullptr.");
1499 return RET_ERR_NULLPTR;
1500 }
1501
1502 auto syncPromise = std::make_shared<ffrt::promise<RetError>>();
1503 if (syncPromise == nullptr) {
1504 HILOG_ERROR("syncPromise is nullptr.");
1505 return RET_ERR_NULLPTR;
1506 }
1507
1508 ffrt::future syncFuture = syncPromise->get_future();
1509 handler_->PostTask([this, syncPromise, caption]() {
1510 HILOG_DEBUG();
1511 sptr<AccessibilityAccountData> accountData =
1512 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
1513 if (!accountData) {
1514 HILOG_ERROR("accountData is nullptr.");
1515 syncPromise->set_value(RET_ERR_NULLPTR);
1516 return;
1517 }
1518 RetError ret = accountData->GetConfig()->SetCaptionProperty(caption);
1519 syncPromise->set_value(ret);
1520 UpdateCaptionProperty();
1521 }, "TASK_SET_CAPTION_PROPERTY");
1522
1523 ffrt::future_status wait = syncFuture.wait_for(std::chrono::milliseconds(DATASHARE_DEFAULT_TIMEOUT));
1524 if (wait != ffrt::future_status::ready) {
1525 HILOG_ERROR("SetCaptionProperty Failed to wait result");
1526 return RET_ERR_TIME_OUT;
1527 }
1528 return syncFuture.get();
1529 }
1530
SetCaptionState(const bool state)1531 RetError AccessibilitySettings::SetCaptionState(const bool state)
1532 {
1533 HILOG_DEBUG();
1534 sptr<AccessibilityAccountData> accountData =
1535 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
1536 if (!accountData) {
1537 HILOG_ERROR("accountData is nullptr.");
1538 return RET_ERR_NULLPTR;
1539 }
1540 RetError ret = accountData->GetConfig()->SetCaptionState(state);
1541 UpdateConfigState();
1542 return ret;
1543 }
1544
GetCaptionState(bool & state)1545 RetError AccessibilitySettings::GetCaptionState(bool &state)
1546 {
1547 HILOG_DEBUG();
1548 if (!handler_) {
1549 HILOG_ERROR("handler_ is nullptr.");
1550 return RET_ERR_NULLPTR;
1551 }
1552
1553 auto syncPromise = std::make_shared<ffrt::promise<RetError>>();
1554 if (syncPromise == nullptr) {
1555 HILOG_ERROR("syncPromise is nullptr.");
1556 return RET_ERR_NULLPTR;
1557 }
1558
1559 ffrt::future syncFuture = syncPromise->get_future();
1560 auto tmpState = std::make_shared<bool>(state);
1561 handler_->PostTask([this, syncPromise, tmpState]() {
1562 HILOG_DEBUG();
1563 sptr<AccessibilityAccountData> accountData =
1564 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
1565 if (!accountData) {
1566 HILOG_ERROR("accountData is nullptr");
1567 syncPromise->set_value(RET_ERR_NULLPTR);
1568 return;
1569 }
1570 *tmpState = accountData->GetConfig()->GetCaptionState();
1571 syncPromise->set_value(RET_OK);
1572 }, "TASK_GET_CAPTION_STATE");
1573
1574 ffrt::future_status wait = syncFuture.wait_for(std::chrono::milliseconds(DATASHARE_DEFAULT_TIMEOUT));
1575 if (wait != ffrt::future_status::ready) {
1576 HILOG_ERROR("GetCaptionState Failed to wait result");
1577 return RET_ERR_TIME_OUT;
1578 }
1579 state = *tmpState;
1580 return syncFuture.get();
1581 }
1582
UpdateCaptionProperty()1583 void AccessibilitySettings::UpdateCaptionProperty()
1584 {
1585 handler_->PostTask([this]() {
1586 HILOG_DEBUG("UpdateCaptionProperty.");
1587 sptr<AccessibilityAccountData> accountData =
1588 Singleton<AccessibleAbilityManagerService>::GetInstance().GetCurrentAccountData();
1589 if (!accountData) {
1590 HILOG_ERROR("Account data is null");
1591 return;
1592 }
1593
1594 AccessibilityConfig::CaptionProperty caption = accountData->GetConfig()->GetCaptionProperty();
1595 for (auto &callback : accountData->GetCaptionPropertyCallbacks()) {
1596 if (callback) {
1597 callback->OnPropertyChanged(caption);
1598 }
1599 }
1600 }, "UpdateCaptionProperty");
1601 }
1602
UpdateAllSetting()1603 void AccessibilitySettings::UpdateAllSetting()
1604 {
1605 HILOG_DEBUG();
1606 if (!handler_) {
1607 HILOG_ERROR("UpdateAllSetting: handler is nullptr!");
1608 return;
1609 }
1610 handler_->PostTask([this]() {
1611 UpdateConfigState();
1612 UpdateShortkeyTarget();
1613 UpdateShortkeyMultiTarget();
1614 UpdateMouseAutoClick();
1615 UpdateDaltonizationColorFilter();
1616 UpdateContentTimeout();
1617 UpdateBrightnessDiscount();
1618 UpdateAudioBalance();
1619 UpdateClickResponseTime();
1620 UpdateIgnoreRepeatClickTime();
1621 }, "UPDATE_ALL_SETTING");
1622 }
1623 } // namespace Accessibility
1624 } // namespace OHOS