1/*
2 * Copyright (c) 2024 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 "native_interface_accessibility.h"
17
18#include <cmath>
19#include <map>
20
21#include "base/utils/utils.h"
22#include "frameworks/core/accessibility/native_interface_accessibility_impl.h"
23#include "frameworks/core/accessibility/native_interface_accessibility_provider.h"
24#include "native_type.h"
25
26#ifdef __cplusplus
27extern "C" {
28#endif
29
30using ::ArkUI_AccessibilityElementInfo;
31using ::ArkUI_AccessibilityEventInfo;
32using ::ArkUI_AccessibilityActionArguments;
33using ::ArkUI_AccessibilityElementInfoList;
34
35int32_t OH_ArkUI_AccessibilityProviderRegisterCallback(
36    ArkUI_AccessibilityProvider* provider, ArkUI_AccessibilityProviderCallbacks* callbacks)
37{
38    if ((provider == nullptr) || (callbacks == nullptr)) {
39        return ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER;
40    }
41    return provider->AccessibilityProviderRegisterCallback(callbacks);
42}
43
44void OH_ArkUI_SendAccessibilityAsyncEvent(
45    ArkUI_AccessibilityProvider* provider, ArkUI_AccessibilityEventInfo* eventInfo,
46    void (*callback)(int32_t errorCode))
47{
48    if ((provider == nullptr) || (callback == nullptr)) {
49        return;
50    }
51    provider->SendAccessibilityAsyncEvent(eventInfo, callback);
52}
53
54ArkUI_AccessibilityElementInfo* OH_ArkUI_AddAndGetAccessibilityElementInfo(
55    ArkUI_AccessibilityElementInfoList* list)
56{
57    auto elementInfo = list->AddAndGetElementInfo();
58    return elementInfo;
59}
60
61ArkUI_AccessibilityElementInfo* OH_ArkUI_CreateAccessibilityElementInfo(void)
62{
63    auto elementInfo = new (std::nothrow) ArkUI_AccessibilityElementInfo();
64    if (elementInfo == nullptr) {
65        return nullptr;
66    }
67    return elementInfo;
68}
69
70void OH_ArkUI_DestoryAccessibilityElementInfo(
71    ArkUI_AccessibilityElementInfo* elementInfo)
72{
73    if (elementInfo == nullptr) {
74        return;
75    }
76    delete elementInfo;
77}
78
79ArkUI_AccessibilityEventInfo* OH_ArkUI_CreateAccessibilityEventInfo(void)
80{
81    auto eventInfo = new (std::nothrow) ArkUI_AccessibilityEventInfo();
82    if (eventInfo == nullptr) {
83        return nullptr;
84    }
85    return eventInfo;
86}
87
88void OH_ArkUI_DestoryAccessibilityEventInfo(ArkUI_AccessibilityEventInfo* eventInfo)
89{
90    if (eventInfo == nullptr) {
91        return;
92    }
93    delete eventInfo;
94}
95
96int32_t OH_ArkUI_AccessibilityElementInfoSetElementId(
97    ArkUI_AccessibilityElementInfo* elementInfo, int32_t elementId)
98{
99    CHECK_NULL_RETURN(elementInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
100    elementInfo->SetElementId(elementId);
101    return ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL;
102}
103
104int32_t OH_ArkUI_AccessibilityElementInfoSetParentId(
105    ArkUI_AccessibilityElementInfo* elementInfo, int32_t parentId)
106{
107    CHECK_NULL_RETURN(elementInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
108    elementInfo->SetParentId(parentId);
109    return ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL;
110}
111
112int32_t OH_ArkUI_AccessibilityElementInfoSetComponentType(
113    ArkUI_AccessibilityElementInfo* elementInfo, const char* componentType)
114{
115    CHECK_NULL_RETURN(elementInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
116    CHECK_NULL_RETURN(componentType, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
117    elementInfo->SetComponentType(componentType);
118    return ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL;
119}
120
121int32_t OH_ArkUI_AccessibilityElementInfoSetContents(
122    ArkUI_AccessibilityElementInfo* elementInfo, const char* contents)
123{
124    CHECK_NULL_RETURN(elementInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
125    CHECK_NULL_RETURN(contents, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
126    elementInfo->SetContents(contents);
127    return ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL;
128}
129
130int32_t OH_ArkUI_AccessibilityElementInfoSetHintText(
131    ArkUI_AccessibilityElementInfo* elementInfo, const char* hintText)
132{
133    CHECK_NULL_RETURN(elementInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
134    CHECK_NULL_RETURN(hintText, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
135    elementInfo->SetHintText(hintText);
136    return ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL;
137}
138
139int32_t OH_ArkUI_AccessibilityElementInfoSetAccessibilityText(
140    ArkUI_AccessibilityElementInfo* elementInfo, const char* accessibilityText)
141{
142    CHECK_NULL_RETURN(elementInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
143    CHECK_NULL_RETURN(accessibilityText, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
144    elementInfo->SetAccessibilityText(accessibilityText);
145    return ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL;
146}
147
148int32_t OH_ArkUI_AccessibilityElementInfoSetAccessibilityDescription(
149    ArkUI_AccessibilityElementInfo* elementInfo, const char* accessibilityDescription)
150{
151    CHECK_NULL_RETURN(elementInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
152    CHECK_NULL_RETURN(accessibilityDescription, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
153    elementInfo->SetAccessibilityDescription(accessibilityDescription);
154    return ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL;
155}
156
157int32_t OH_ArkUI_AccessibilityElementInfoSetChildNodeIds(
158    ArkUI_AccessibilityElementInfo* elementInfo, int32_t childCount, int64_t* childNodeIds)
159{
160    CHECK_NULL_RETURN(elementInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
161    CHECK_NULL_RETURN(childNodeIds, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
162    if (childCount <= 0) {
163        return ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER;
164    }
165    elementInfo->ClearChildNodeIds();
166    for (int32_t i = 0; i < childCount; i++) {
167        elementInfo->AddChildNodeId(childNodeIds[i]);
168    }
169    return ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL;
170}
171
172int32_t OH_ArkUI_AccessibilityElementInfoSetOperationActions(
173    ArkUI_AccessibilityElementInfo* elementInfo, int32_t operationCount,
174    ArkUI_AccessibleAction* operationActions)
175{
176    CHECK_NULL_RETURN(elementInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
177    CHECK_NULL_RETURN(operationActions, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
178    if (operationCount <= 0) {
179        return ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER;
180    }
181    elementInfo->ClearOperationActions();
182    for (int32_t i = 0; i < operationCount; i++) {
183        elementInfo->AddOperationAction(operationActions[i]);
184    }
185    return ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL;
186}
187
188int32_t OH_ArkUI_AccessibilityElementInfoSetScreenRect(
189    ArkUI_AccessibilityElementInfo* elementInfo, ArkUI_AccessibleRect* screenRect)
190{
191    CHECK_NULL_RETURN(elementInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
192    CHECK_NULL_RETURN(screenRect, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
193    elementInfo->SetRect(*screenRect);
194    return ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL;
195}
196
197int32_t OH_ArkUI_AccessibilityElementInfoSetCheckable(
198    ArkUI_AccessibilityElementInfo* elementInfo, bool checkable)
199{
200    CHECK_NULL_RETURN(elementInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
201    elementInfo->SetCheckable(checkable);
202    return ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL;
203}
204
205int32_t OH_ArkUI_AccessibilityElementInfoSetChecked(
206    ArkUI_AccessibilityElementInfo* elementInfo, bool checked)
207{
208    CHECK_NULL_RETURN(elementInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
209    elementInfo->SetChecked(checked);
210    return ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL;
211}
212
213int32_t OH_ArkUI_AccessibilityElementInfoSetFocusable(
214    ArkUI_AccessibilityElementInfo* elementInfo, bool focusable)
215{
216    CHECK_NULL_RETURN(elementInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
217    elementInfo->SetFocusable(focusable);
218    return ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL;
219}
220
221int32_t OH_ArkUI_AccessibilityElementInfoSetFocused(
222    ArkUI_AccessibilityElementInfo* elementInfo, bool isFocused)
223{
224    CHECK_NULL_RETURN(elementInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
225    elementInfo->SetFocused(isFocused);
226    return ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL;
227}
228
229int32_t OH_ArkUI_AccessibilityElementInfoSetVisible(
230    ArkUI_AccessibilityElementInfo* elementInfo, bool isVisible)
231{
232    CHECK_NULL_RETURN(elementInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
233    elementInfo->SetVisible(isVisible);
234    return ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL;
235}
236
237int32_t OH_ArkUI_AccessibilityElementInfoSetAccessibilityFocused(
238    ArkUI_AccessibilityElementInfo* elementInfo, bool accessibilityFocused)
239{
240    CHECK_NULL_RETURN(elementInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
241    elementInfo->SetAccessibilityFocused(accessibilityFocused);
242    return ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL;
243}
244
245int32_t OH_ArkUI_AccessibilityElementInfoSetSelected(
246    ArkUI_AccessibilityElementInfo* elementInfo, bool selected)
247{
248    CHECK_NULL_RETURN(elementInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
249    elementInfo->SetSelected(selected);
250    return ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL;
251}
252
253int32_t OH_ArkUI_AccessibilityElementInfoSetClickable(
254    ArkUI_AccessibilityElementInfo* elementInfo, bool clickable)
255{
256    CHECK_NULL_RETURN(elementInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
257    elementInfo->SetClickable(clickable);
258    return ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL;
259}
260
261int32_t OH_ArkUI_AccessibilityElementInfoSetLongClickable(
262    ArkUI_AccessibilityElementInfo* elementInfo, bool longClickable)
263{
264    CHECK_NULL_RETURN(elementInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
265    elementInfo->SetLongClickable(longClickable);
266    return ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL;
267}
268
269int32_t OH_ArkUI_AccessibilityElementInfoSetEnabled(
270    ArkUI_AccessibilityElementInfo* elementInfo, bool isEnabled)
271{
272    CHECK_NULL_RETURN(elementInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
273    elementInfo->SetEnabled(isEnabled);
274    return ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL;
275}
276
277int32_t OH_ArkUI_AccessibilityElementInfoSetIsPassword(
278    ArkUI_AccessibilityElementInfo* elementInfo, bool isPassword)
279{
280    CHECK_NULL_RETURN(elementInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
281    elementInfo->SetPassword(isPassword);
282    return ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL;
283}
284
285int32_t OH_ArkUI_AccessibilityElementInfoSetScrollable(
286    ArkUI_AccessibilityElementInfo* elementInfo, bool scrollable)
287{
288    CHECK_NULL_RETURN(elementInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
289    elementInfo->SetScrollable(scrollable);
290    return ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL;
291}
292
293int32_t OH_ArkUI_AccessibilityElementInfoSetEditable(
294    ArkUI_AccessibilityElementInfo* elementInfo, bool editable)
295{
296    CHECK_NULL_RETURN(elementInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
297    elementInfo->SetEditable(editable);
298    return ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL;
299}
300
301int32_t OH_ArkUI_AccessibilityElementInfoSetIsHint(
302    ArkUI_AccessibilityElementInfo* elementInfo, bool isHint)
303{
304    CHECK_NULL_RETURN(elementInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
305    elementInfo->SetHint(isHint);
306    return ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL;
307}
308
309int32_t OH_ArkUI_AccessibilityElementInfoSetRangeInfo(
310    ArkUI_AccessibilityElementInfo* elementInfo, ArkUI_AccessibleRangeInfo* rangeInfo)
311{
312    CHECK_NULL_RETURN(elementInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
313    CHECK_NULL_RETURN(rangeInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
314    elementInfo->SetRangeInfo(*rangeInfo);
315    return ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL;
316}
317
318int32_t OH_ArkUI_AccessibilityElementInfoSetGridInfo(
319    ArkUI_AccessibilityElementInfo* elementInfo, ArkUI_AccessibleGridInfo* gridInfo)
320{
321    CHECK_NULL_RETURN(elementInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
322    CHECK_NULL_RETURN(gridInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
323    elementInfo->SetGridInfo(*gridInfo);
324    return ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL;
325}
326
327int32_t OH_ArkUI_AccessibilityElementInfoSetGridItemInfo(
328    ArkUI_AccessibilityElementInfo* elementInfo, ArkUI_AccessibleGridItemInfo* gridItem)
329{
330    CHECK_NULL_RETURN(elementInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
331    CHECK_NULL_RETURN(gridItem, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
332    elementInfo->SetGridItemInfo(*gridItem);
333    return ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL;
334}
335
336int32_t OH_ArkUI_AccessibilityElementInfoSetSelectedTextStart(
337    ArkUI_AccessibilityElementInfo* elementInfo, int32_t selectedTextStart)
338{
339    CHECK_NULL_RETURN(elementInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
340    elementInfo->SetTextBeginSelected(selectedTextStart);
341    return ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL;
342}
343
344int32_t OH_ArkUI_AccessibilityElementInfoSetSelectedTextEnd(
345    ArkUI_AccessibilityElementInfo* elementInfo, int32_t selectedTextEnd)
346{
347    CHECK_NULL_RETURN(elementInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
348    elementInfo->SetTextEndSelected(selectedTextEnd);
349    return ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL;
350}
351
352int32_t OH_ArkUI_AccessibilityElementInfoSetCurrentItemIndex(
353    ArkUI_AccessibilityElementInfo* elementInfo, int32_t currentItemIndex)
354{
355    CHECK_NULL_RETURN(elementInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
356    elementInfo->SetCurrentIndex(currentItemIndex);
357    return ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL;
358}
359
360int32_t OH_ArkUI_AccessibilityElementInfoSetStartItemIndex(
361    ArkUI_AccessibilityElementInfo* elementInfo, int32_t startItemIndex)
362{
363    CHECK_NULL_RETURN(elementInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
364    elementInfo->SetBeginIndex(startItemIndex);
365    return ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL;
366}
367
368int32_t OH_ArkUI_AccessibilityElementInfoSetEndItemIndex(
369    ArkUI_AccessibilityElementInfo* elementInfo, int32_t endItemIndex)
370{
371    CHECK_NULL_RETURN(elementInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
372    elementInfo->SetEndIndex(endItemIndex);
373    return ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL;
374}
375
376int32_t OH_ArkUI_AccessibilityElementInfoSetItemCount(
377    ArkUI_AccessibilityElementInfo* elementInfo, int32_t itemCount)
378{
379    CHECK_NULL_RETURN(elementInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
380    elementInfo->SetItemCount(itemCount);
381    return ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL;
382}
383
384int32_t OH_ArkUI_AccessibilityElementInfoSetAccessibilityOffset(
385    ArkUI_AccessibilityElementInfo* elementInfo, int32_t offset)
386{
387    CHECK_NULL_RETURN(elementInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
388    elementInfo->SetOffset(offset);
389    return ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL;
390}
391
392int32_t OH_ArkUI_AccessibilityElementInfoSetAccessibilityGroup(
393    ArkUI_AccessibilityElementInfo* elementInfo, bool accessibilityGroup)
394{
395    CHECK_NULL_RETURN(elementInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
396    elementInfo->SetAccessibilityGroup(accessibilityGroup);
397    return ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL;
398}
399
400int32_t OH_ArkUI_AccessibilityElementInfoSetAccessibilityLevel(
401    ArkUI_AccessibilityElementInfo* elementInfo, const char* accessibilityLevel)
402{
403    CHECK_NULL_RETURN(elementInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
404    CHECK_NULL_RETURN(accessibilityLevel, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
405    elementInfo->SetAccessibilityLevel(accessibilityLevel);
406    return ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL;
407}
408
409int32_t OH_ArkUI_AccessibilityElementInfoSetZIndex(
410    ArkUI_AccessibilityElementInfo* elementInfo, int32_t zIndex)
411{
412    CHECK_NULL_RETURN(elementInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
413    elementInfo->SetZIndex(zIndex);
414    return ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL;
415}
416
417int32_t OH_ArkUI_AccessibilityElementInfoSetAccessibilityOpacity(
418    ArkUI_AccessibilityElementInfo* elementInfo, float opacity)
419{
420    CHECK_NULL_RETURN(elementInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
421    if (std::isnan(opacity)) {
422        return ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER;
423    }
424    elementInfo->SetOpacity(opacity);
425    return ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL;
426}
427
428int32_t OH_ArkUI_AccessibilityElementInfoSetBackgroundColor(
429    ArkUI_AccessibilityElementInfo* elementInfo, const char* backgroundColor)
430{
431    CHECK_NULL_RETURN(elementInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
432    CHECK_NULL_RETURN(backgroundColor, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
433    elementInfo->SetBackgroundColor(backgroundColor);
434    return ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL;
435}
436
437int32_t OH_ArkUI_AccessibilityElementInfoSetBackgroundImage(
438    ArkUI_AccessibilityElementInfo* elementInfo, const char* backgroundImage)
439{
440    CHECK_NULL_RETURN(elementInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
441    CHECK_NULL_RETURN(backgroundImage, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
442    elementInfo->SetBackgroundImage(backgroundImage);
443    return ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL;
444}
445
446int32_t OH_ArkUI_AccessibilityElementInfoSetBlur(
447    ArkUI_AccessibilityElementInfo* elementInfo, const char* blur)
448{
449    CHECK_NULL_RETURN(elementInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
450    CHECK_NULL_RETURN(blur, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
451    elementInfo->SetBlur(blur);
452    return ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL;
453}
454
455int32_t OH_ArkUI_AccessibilityElementInfoSetHitTestBehavior(
456    ArkUI_AccessibilityElementInfo* elementInfo, const char* hitTestBehavior)
457{
458    CHECK_NULL_RETURN(elementInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
459    CHECK_NULL_RETURN(hitTestBehavior, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
460    elementInfo->SetHitTestBehavior(hitTestBehavior);
461    return ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL;
462}
463
464int32_t OH_ArkUI_AccessibilityEventSetEventType(
465    ArkUI_AccessibilityEventInfo* eventInfo, ArkUI_AccessibilityEventType eventType)
466{
467    CHECK_NULL_RETURN(eventInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
468    eventInfo->SetEventType(eventType);
469    return ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL;
470}
471
472int32_t OH_ArkUI_AccessibilityEventSetTextAnnouncedForAccessibility(
473    ArkUI_AccessibilityEventInfo* eventInfo, const char* textAnnouncedForAccessibility)
474{
475    CHECK_NULL_RETURN(eventInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
476    eventInfo->SetTextAnnouncedForAccessibility(textAnnouncedForAccessibility);
477    return ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL;
478}
479
480int32_t OH_ArkUI_AccessibilityEventSetRequestFocusId(
481    ArkUI_AccessibilityEventInfo* eventInfo, int32_t requestFocusId)
482{
483    CHECK_NULL_RETURN(eventInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
484    eventInfo->SetRequestFocusId(requestFocusId);
485    return ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL;
486}
487
488int32_t OH_ArkUI_AccessibilityEventSetElementInfo(
489    ArkUI_AccessibilityEventInfo* eventInfo, ArkUI_AccessibilityElementInfo* elementInfo)
490{
491    CHECK_NULL_RETURN(eventInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
492    CHECK_NULL_RETURN(elementInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
493    eventInfo->SetElementInfo(elementInfo);
494    return ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL;
495}
496
497int32_t OH_ArkUI_FindAccessibilityActionArgumentByKey(
498    ArkUI_AccessibilityActionArguments* arguments, const char* key, char** value)
499{
500    CHECK_NULL_RETURN(arguments, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
501    CHECK_NULL_RETURN(key, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
502    *value = const_cast<char*>(arguments->FindValueByKey(key));
503    return ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL;
504}
505
506#ifdef __cplusplus
507};
508#endif
509
510