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