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