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 #ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ACCESSIBILITY_NATIVE_INTERFACE_ACCESSIBILITY_IMPL_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_ACCESSIBILITY_NATIVE_INTERFACE_ACCESSIBILITY_IMPL_H 18 19 #include <map> 20 #include <mutex> 21 #include <string> 22 #include <unordered_set> 23 #include <vector> 24 25 #include "interfaces/native/native_interface_accessibility.h" 26 27 #include "base/utils/singleton.h" 28 29 struct ArkUI_AccessibilityElementInfo { 30 explicit ArkUI_AccessibilityElementInfo(); SetPageIdArkUI_AccessibilityElementInfo31 void SetPageId(int32_t pageId) 32 { 33 this->pageId = pageId; 34 } 35 GetPageIdArkUI_AccessibilityElementInfo36 int32_t GetPageId() const 37 { 38 return pageId; 39 } 40 SetParentIdArkUI_AccessibilityElementInfo41 void SetParentId(int64_t parentId) 42 { 43 this->parentId = parentId; 44 } 45 GetParentIdArkUI_AccessibilityElementInfo46 int64_t GetParentId() const 47 { 48 return parentId; 49 } 50 GetElementIdArkUI_AccessibilityElementInfo51 int32_t GetElementId() const 52 { 53 return elementId; 54 } 55 SetElementIdArkUI_AccessibilityElementInfo56 void SetElementId(int64_t elementId) 57 { 58 this->elementId = elementId; 59 } 60 SetTextBeginSelectedArkUI_AccessibilityElementInfo61 void SetTextBeginSelected(int32_t textBeginSelected) 62 { 63 this->textBeginSelected = textBeginSelected; 64 } 65 GetTextBeginSelectedArkUI_AccessibilityElementInfo66 int32_t GetTextBeginSelected() const 67 { 68 return textBeginSelected; 69 } 70 SetTextEndSelectedArkUI_AccessibilityElementInfo71 void SetTextEndSelected(int32_t textEndSelected) 72 { 73 this->textEndSelected = textEndSelected; 74 } 75 GetTextEndSelectedArkUI_AccessibilityElementInfo76 int32_t GetTextEndSelected() const 77 { 78 return textEndSelected; 79 } 80 SetCurrentIndexArkUI_AccessibilityElementInfo81 void SetCurrentIndex(int32_t currentIndex) 82 { 83 this->currentIndex = currentIndex; 84 } 85 GetCurrentIndexArkUI_AccessibilityElementInfo86 int32_t GetCurrentIndex() const 87 { 88 return currentIndex; 89 } 90 SetBeginIndexArkUI_AccessibilityElementInfo91 void SetBeginIndex(int32_t beginIndex) 92 { 93 this->beginIndex = beginIndex; 94 } 95 GetBeginIndexArkUI_AccessibilityElementInfo96 int32_t GetBeginIndex() const 97 { 98 return beginIndex; 99 } 100 SetEndIndexArkUI_AccessibilityElementInfo101 void SetEndIndex(int32_t endIndex) 102 { 103 this->endIndex = endIndex; 104 } 105 GetEndIndexArkUI_AccessibilityElementInfo106 int32_t GetEndIndex() const 107 { 108 return endIndex; 109 } 110 SetItemCountArkUI_AccessibilityElementInfo111 void SetItemCount(int32_t itemCount) 112 { 113 this->itemCount = itemCount; 114 } 115 GetItemCountArkUI_AccessibilityElementInfo116 int32_t GetItemCount() const 117 { 118 return itemCount; 119 } 120 SetOffsetArkUI_AccessibilityElementInfo121 void SetOffset(int32_t offset) 122 { 123 this->offset = offset; 124 } 125 GetOffsetArkUI_AccessibilityElementInfo126 int32_t GetOffset() const 127 { 128 return offset; 129 } 130 SetZIndexArkUI_AccessibilityElementInfo131 void SetZIndex(int32_t zIndex) 132 { 133 this->zIndex = zIndex; 134 } 135 GetZIndexArkUI_AccessibilityElementInfo136 int32_t GetZIndex() const 137 { 138 return zIndex; 139 } 140 SetOpacityArkUI_AccessibilityElementInfo141 void SetOpacity(float opacity) 142 { 143 this->opacity = opacity; 144 } 145 GetOpacityArkUI_AccessibilityElementInfo146 float GetOpacity() const 147 { 148 return opacity; 149 } 150 SetCheckableArkUI_AccessibilityElementInfo151 void SetCheckable(bool checkable) 152 { 153 this->checkable = checkable; 154 } 155 IsCheckableArkUI_AccessibilityElementInfo156 bool IsCheckable() const 157 { 158 return checkable; 159 } 160 SetCheckedArkUI_AccessibilityElementInfo161 void SetChecked(bool checked) 162 { 163 this->checked = checked; 164 } 165 IsCheckedArkUI_AccessibilityElementInfo166 bool IsChecked() const 167 { 168 return checked; 169 } 170 SetFocusableArkUI_AccessibilityElementInfo171 void SetFocusable(bool focusable) 172 { 173 this->focusable = focusable; 174 } 175 IsFocusableArkUI_AccessibilityElementInfo176 bool IsFocusable() const 177 { 178 return focusable; 179 } 180 SetFocusedArkUI_AccessibilityElementInfo181 void SetFocused(bool focused) 182 { 183 this->focused = focused; 184 } 185 IsFocusedArkUI_AccessibilityElementInfo186 bool IsFocused() const 187 { 188 return focused; 189 } 190 SetVisibleArkUI_AccessibilityElementInfo191 void SetVisible(bool visible) 192 { 193 this->visible = visible; 194 } 195 IsVisibleArkUI_AccessibilityElementInfo196 bool IsVisible() const 197 { 198 return visible; 199 } 200 SetAccessibilityFocusedArkUI_AccessibilityElementInfo201 void SetAccessibilityFocused(bool accessibilityFocused) 202 { 203 this->accessibilityFocused = accessibilityFocused; 204 } 205 IsAccessibilityFocusedArkUI_AccessibilityElementInfo206 bool IsAccessibilityFocused() const 207 { 208 return accessibilityFocused; 209 } 210 SetSelectedArkUI_AccessibilityElementInfo211 void SetSelected(bool selected) 212 { 213 this->selected = selected; 214 } 215 IsSelectedArkUI_AccessibilityElementInfo216 bool IsSelected() const 217 { 218 return selected; 219 } 220 SetClickableArkUI_AccessibilityElementInfo221 void SetClickable(bool clickable) 222 { 223 this->clickable = clickable; 224 } 225 IsClickableArkUI_AccessibilityElementInfo226 bool IsClickable() const 227 { 228 return clickable; 229 } 230 SetLongClickableArkUI_AccessibilityElementInfo231 void SetLongClickable(bool longClickable) 232 { 233 this->longClickable = longClickable; 234 } 235 IsLongClickableArkUI_AccessibilityElementInfo236 bool IsLongClickable() const 237 { 238 return longClickable; 239 } 240 SetEnabledArkUI_AccessibilityElementInfo241 void SetEnabled(bool enabled) 242 { 243 this->enabled = enabled; 244 } 245 IsEnabledArkUI_AccessibilityElementInfo246 bool IsEnabled() const 247 { 248 return enabled; 249 } 250 SetPasswordArkUI_AccessibilityElementInfo251 void SetPassword(bool isPassword) 252 { 253 this->password = isPassword; 254 } 255 IsPasswordArkUI_AccessibilityElementInfo256 bool IsPassword() const 257 { 258 return password; 259 } 260 SetScrollableArkUI_AccessibilityElementInfo261 void SetScrollable(bool scrollable) 262 { 263 this->scrollable = scrollable; 264 } 265 IsScrollableArkUI_AccessibilityElementInfo266 bool IsScrollable() const 267 { 268 return scrollable; 269 } 270 SetEditableArkUI_AccessibilityElementInfo271 void SetEditable(bool editable) 272 { 273 this->editable = editable; 274 } 275 IsEditableArkUI_AccessibilityElementInfo276 bool IsEditable() const 277 { 278 return editable; 279 } 280 SetHintArkUI_AccessibilityElementInfo281 void SetHint(bool hint) 282 { 283 this->hint = hint; 284 } 285 IsHintArkUI_AccessibilityElementInfo286 bool IsHint() const 287 { 288 return hint; 289 } 290 SetAccessibilityGroupArkUI_AccessibilityElementInfo291 void SetAccessibilityGroup(bool accessibilityGroup) 292 { 293 this->accessibilityGroup = accessibilityGroup; 294 } 295 GetAccessibilityGroupArkUI_AccessibilityElementInfo296 bool GetAccessibilityGroup() const 297 { 298 return accessibilityGroup; 299 } 300 301 void SetRect(const ArkUI_AccessibleRect& rect); GetScreenRectArkUI_AccessibilityElementInfo302 ArkUI_AccessibleRect GetScreenRect() const 303 { 304 return screenRect; 305 } 306 307 void SetRangeInfo(const ArkUI_AccessibleRangeInfo& rangeInfo); GetRangeInfoArkUI_AccessibilityElementInfo308 ArkUI_AccessibleRangeInfo GetRangeInfo() const 309 { 310 return rangeInfo; 311 } 312 313 void SetGridInfo(const ArkUI_AccessibleGridInfo& gridInfo); GetGridInfoArkUI_AccessibilityElementInfo314 ArkUI_AccessibleGridInfo GetGridInfo() const 315 { 316 return grid; 317 } 318 319 void SetGridItemInfo(const ArkUI_AccessibleGridItemInfo& gridItemInfo); GetGridItemInfoArkUI_AccessibilityElementInfo320 ArkUI_AccessibleGridItemInfo GetGridItemInfo() const 321 { 322 return gridItem; 323 } 324 325 void ClearChildNodeIds(); 326 void AddChildNodeId(int64_t childNodeId); GetChildNodeIdsArkUI_AccessibilityElementInfo327 const std::vector<int64_t>& GetChildNodeIds() const 328 { 329 return childNodeIds; 330 } 331 332 void ClearOperationActions(); 333 void AddOperationAction(const ArkUI_AccessibleAction& action); GetOperationActionsArkUI_AccessibilityElementInfo334 const std::vector<ArkUI_AccessibleAction>& GetOperationActions() const 335 { 336 return operationActions; 337 } 338 SetComponentTypeArkUI_AccessibilityElementInfo339 void SetComponentType(const std::string& componentType) 340 { 341 this->componentType = componentType; 342 } 343 GetComponentTypeArkUI_AccessibilityElementInfo344 std::string GetComponentType() const 345 { 346 return componentType; 347 } 348 SetContentsArkUI_AccessibilityElementInfo349 void SetContents(const std::string& contents) 350 { 351 this->contents = contents; 352 } 353 GetContentsArkUI_AccessibilityElementInfo354 std::string GetContents() const 355 { 356 return contents; 357 } 358 SetHintTextArkUI_AccessibilityElementInfo359 void SetHintText(const std::string& hintText) 360 { 361 this->hintText = hintText; 362 } 363 GetHintTextArkUI_AccessibilityElementInfo364 std::string GetHintText() const 365 { 366 return hintText; 367 } 368 SetAccessibilityTextArkUI_AccessibilityElementInfo369 void SetAccessibilityText(const std::string& accessibilityText) 370 { 371 this->accessibilityText = accessibilityText; 372 } 373 GetAccessibilityTextArkUI_AccessibilityElementInfo374 std::string GetAccessibilityText() const 375 { 376 return accessibilityText; 377 } 378 SetAccessibilityDescriptionArkUI_AccessibilityElementInfo379 void SetAccessibilityDescription(const std::string& accessibilityDescription) 380 { 381 this->accessibilityDescription = accessibilityDescription; 382 } 383 GetAccessibilityDescriptionArkUI_AccessibilityElementInfo384 std::string GetAccessibilityDescription() const 385 { 386 return accessibilityDescription; 387 } 388 SetAccessibilityLevelArkUI_AccessibilityElementInfo389 void SetAccessibilityLevel(const std::string& accessibilityLevel) 390 { 391 this->accessibilityLevel = accessibilityLevel; 392 } 393 GetAccessibilityLevelArkUI_AccessibilityElementInfo394 std::string GetAccessibilityLevel() const 395 { 396 return accessibilityLevel; 397 } 398 SetBackgroundColorArkUI_AccessibilityElementInfo399 void SetBackgroundColor(const std::string& backgroundColor) 400 { 401 this->backgroundColor = backgroundColor; 402 } 403 GetBackgroundColorArkUI_AccessibilityElementInfo404 std::string GetBackgroundColor() const 405 { 406 return backgroundColor; 407 } 408 SetBackgroundImageArkUI_AccessibilityElementInfo409 void SetBackgroundImage(const std::string& backgroundImage) 410 { 411 this->backgroundImage = backgroundImage; 412 } 413 GetBackgroundImageArkUI_AccessibilityElementInfo414 std::string GetBackgroundImage() const 415 { 416 return backgroundImage; 417 } 418 SetBlurArkUI_AccessibilityElementInfo419 void SetBlur(const std::string& blur) 420 { 421 this->blur = blur; 422 } 423 GetBlurArkUI_AccessibilityElementInfo424 std::string GetBlur() const 425 { 426 return blur; 427 } 428 SetHitTestBehaviorArkUI_AccessibilityElementInfo429 void SetHitTestBehavior(const std::string& hitTestBehavior) 430 { 431 this->hitTestBehavior = hitTestBehavior; 432 } 433 GetHitTestBehaviorArkUI_AccessibilityElementInfo434 std::string GetHitTestBehavior() const 435 { 436 return hitTestBehavior; 437 } 438 439 private: 440 int32_t pageId = 0; 441 int32_t textBeginSelected = 0; 442 int32_t textEndSelected = 0; 443 int32_t currentIndex = 0; 444 int32_t beginIndex = 0; 445 int32_t endIndex = 0; 446 int32_t itemCount = 0; 447 int32_t offset = 0; 448 int32_t zIndex = 0; 449 float opacity = 0.0f; 450 451 int64_t parentId = 0; 452 int32_t elementId = 0; 453 454 bool checkable = false; 455 bool checked = false; 456 bool focusable = false; 457 bool focused = false; 458 bool visible = false; 459 bool accessibilityFocused = false; 460 bool selected = false; 461 bool clickable = false; 462 bool longClickable = false; 463 bool enabled = false; 464 bool password = false; 465 bool scrollable = false; 466 bool editable = false; 467 bool hint = false; 468 bool accessibilityGroup = false; 469 470 ArkUI_AccessibleRect screenRect; 471 ArkUI_AccessibleRangeInfo rangeInfo; 472 ArkUI_AccessibleGridInfo grid; 473 ArkUI_AccessibleGridItemInfo gridItem; 474 475 std::vector<int64_t> childNodeIds; 476 std::vector<ArkUI_AccessibleAction> operationActions; 477 478 std::string componentType; 479 std::string contents; 480 std::string hintText; 481 std::string accessibilityText; 482 std::string accessibilityDescription; 483 484 std::string accessibilityLevel; 485 std::string backgroundColor; 486 std::string backgroundImage; 487 std::string blur; 488 std::string hitTestBehavior; 489 }; 490 491 struct ArkUI_AccessibilityEventInfo { 492 public: 493 ArkUI_AccessibilityEventInfo() = default; 494 GetEventTypeArkUI_AccessibilityEventInfo495 ArkUI_AccessibilityEventType GetEventType() const 496 { 497 return eventType; 498 } 499 SetEventTypeArkUI_AccessibilityEventInfo500 void SetEventType(ArkUI_AccessibilityEventType eventType_) 501 { 502 eventType = eventType_; 503 } 504 GetPageIdArkUI_AccessibilityEventInfo505 int32_t GetPageId() const 506 { 507 return pageId; 508 } 509 SetPageIdArkUI_AccessibilityEventInfo510 void SetPageId(int32_t pageId) 511 { 512 this->pageId = pageId; 513 } 514 GetRequestFocusIdArkUI_AccessibilityEventInfo515 int32_t GetRequestFocusId() const 516 { 517 return requestFocusId; 518 } 519 SetRequestFocusIdArkUI_AccessibilityEventInfo520 void SetRequestFocusId(int32_t requestFocusId) 521 { 522 this->requestFocusId = requestFocusId; 523 } 524 GetElementInfoArkUI_AccessibilityEventInfo525 ArkUI_AccessibilityElementInfo* GetElementInfo() const 526 { 527 return elementInfo; 528 } 529 SetElementInfoArkUI_AccessibilityEventInfo530 void SetElementInfo(ArkUI_AccessibilityElementInfo* elementInfo) 531 { 532 this->elementInfo = elementInfo; 533 } 534 GetTextAnnouncedForAccessibilityArkUI_AccessibilityEventInfo535 std::string GetTextAnnouncedForAccessibility() const 536 { 537 return textAnnouncedForAccessibility; 538 } 539 SetTextAnnouncedForAccessibilityArkUI_AccessibilityEventInfo540 void SetTextAnnouncedForAccessibility(const std::string& textAnnouncedForAccessibility) 541 { 542 this->textAnnouncedForAccessibility = textAnnouncedForAccessibility; 543 } 544 545 private: 546 ArkUI_AccessibilityEventType eventType = ARKUI_ACCESSIBILITY_NATIVE_EVENT_TYPE_INVALID; 547 int32_t pageId = 0; 548 int32_t requestFocusId = 0; 549 ArkUI_AccessibilityElementInfo* elementInfo = nullptr; 550 std::string textAnnouncedForAccessibility; 551 }; 552 553 // suport multithreads 554 struct ArkUI_AccessibilityElementInfoList { 555 public: 556 ArkUI_AccessibilityElementInfoList() = default; 557 ArkUI_AccessibilityElementInfo* AddAndGetElementInfo(); 558 bool CopyAccessibilityElementInfo(std::vector<ArkUI_AccessibilityElementInfo>& infos); 559 560 private: 561 std::mutex mutex_; 562 std::vector<ArkUI_AccessibilityElementInfo> elementInfos_; 563 }; 564 565 struct ArkUI_AccessibilityActionArguments { 566 public: ArkUI_AccessibilityActionArgumentsArkUI_AccessibilityActionArguments567 ArkUI_AccessibilityActionArguments(std::map<std::string, std::string> actionArguments) 568 { 569 actionArguments_.swap(actionArguments); 570 } 571 const char* FindValueByKey(const char* key); 572 573 private: 574 std::map<std::string, std::string> actionArguments_; 575 }; 576 577 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ACCESSIBILITY_NATIVE_INTERFACE_ACCESSIBILITY_IMPL_H