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 <list> 20 #include <map> 21 #include <mutex> 22 #include <string> 23 #include <unordered_set> 24 #include <vector> 25 26 #include "interfaces/native/native_interface_accessibility.h" 27 28 #include "base/utils/singleton.h" 29 30 struct ArkUI_AccessibilityElementInfo { 31 explicit ArkUI_AccessibilityElementInfo(); SetPageIdArkUI_AccessibilityElementInfo32 void SetPageId(int32_t pageId) 33 { 34 this->pageId = pageId; 35 } 36 GetPageIdArkUI_AccessibilityElementInfo37 int32_t GetPageId() const 38 { 39 return pageId; 40 } 41 SetParentIdArkUI_AccessibilityElementInfo42 void SetParentId(int64_t parentId) 43 { 44 this->parentId = parentId; 45 } 46 GetParentIdArkUI_AccessibilityElementInfo47 int64_t GetParentId() const 48 { 49 return parentId; 50 } 51 GetElementIdArkUI_AccessibilityElementInfo52 int32_t GetElementId() const 53 { 54 return elementId; 55 } 56 SetElementIdArkUI_AccessibilityElementInfo57 void SetElementId(int64_t elementId) 58 { 59 this->elementId = elementId; 60 } 61 SetTextBeginSelectedArkUI_AccessibilityElementInfo62 void SetTextBeginSelected(int32_t textBeginSelected) 63 { 64 this->textBeginSelected = textBeginSelected; 65 } 66 GetTextBeginSelectedArkUI_AccessibilityElementInfo67 int32_t GetTextBeginSelected() const 68 { 69 return textBeginSelected; 70 } 71 SetTextEndSelectedArkUI_AccessibilityElementInfo72 void SetTextEndSelected(int32_t textEndSelected) 73 { 74 this->textEndSelected = textEndSelected; 75 } 76 GetTextEndSelectedArkUI_AccessibilityElementInfo77 int32_t GetTextEndSelected() const 78 { 79 return textEndSelected; 80 } 81 SetCurrentIndexArkUI_AccessibilityElementInfo82 void SetCurrentIndex(int32_t currentIndex) 83 { 84 this->currentIndex = currentIndex; 85 } 86 GetCurrentIndexArkUI_AccessibilityElementInfo87 int32_t GetCurrentIndex() const 88 { 89 return currentIndex; 90 } 91 SetBeginIndexArkUI_AccessibilityElementInfo92 void SetBeginIndex(int32_t beginIndex) 93 { 94 this->beginIndex = beginIndex; 95 } 96 GetBeginIndexArkUI_AccessibilityElementInfo97 int32_t GetBeginIndex() const 98 { 99 return beginIndex; 100 } 101 SetEndIndexArkUI_AccessibilityElementInfo102 void SetEndIndex(int32_t endIndex) 103 { 104 this->endIndex = endIndex; 105 } 106 GetEndIndexArkUI_AccessibilityElementInfo107 int32_t GetEndIndex() const 108 { 109 return endIndex; 110 } 111 SetItemCountArkUI_AccessibilityElementInfo112 void SetItemCount(int32_t itemCount) 113 { 114 this->itemCount = itemCount; 115 } 116 GetItemCountArkUI_AccessibilityElementInfo117 int32_t GetItemCount() const 118 { 119 return itemCount; 120 } 121 SetOffsetArkUI_AccessibilityElementInfo122 void SetOffset(int32_t offset) 123 { 124 this->offset = offset; 125 } 126 GetOffsetArkUI_AccessibilityElementInfo127 int32_t GetOffset() const 128 { 129 return offset; 130 } 131 SetZIndexArkUI_AccessibilityElementInfo132 void SetZIndex(int32_t zIndex) 133 { 134 this->zIndex = zIndex; 135 } 136 GetZIndexArkUI_AccessibilityElementInfo137 int32_t GetZIndex() const 138 { 139 return zIndex; 140 } 141 SetOpacityArkUI_AccessibilityElementInfo142 void SetOpacity(float opacity) 143 { 144 this->opacity = opacity; 145 } 146 GetOpacityArkUI_AccessibilityElementInfo147 float GetOpacity() const 148 { 149 return opacity; 150 } 151 SetCheckableArkUI_AccessibilityElementInfo152 void SetCheckable(bool checkable) 153 { 154 this->checkable = checkable; 155 } 156 IsCheckableArkUI_AccessibilityElementInfo157 bool IsCheckable() const 158 { 159 return checkable; 160 } 161 SetCheckedArkUI_AccessibilityElementInfo162 void SetChecked(bool checked) 163 { 164 this->checked = checked; 165 } 166 IsCheckedArkUI_AccessibilityElementInfo167 bool IsChecked() const 168 { 169 return checked; 170 } 171 SetFocusableArkUI_AccessibilityElementInfo172 void SetFocusable(bool focusable) 173 { 174 this->focusable = focusable; 175 } 176 IsFocusableArkUI_AccessibilityElementInfo177 bool IsFocusable() const 178 { 179 return focusable; 180 } 181 SetFocusedArkUI_AccessibilityElementInfo182 void SetFocused(bool focused) 183 { 184 this->focused = focused; 185 } 186 IsFocusedArkUI_AccessibilityElementInfo187 bool IsFocused() const 188 { 189 return focused; 190 } 191 SetVisibleArkUI_AccessibilityElementInfo192 void SetVisible(bool visible) 193 { 194 this->visible = visible; 195 } 196 IsVisibleArkUI_AccessibilityElementInfo197 bool IsVisible() const 198 { 199 return visible; 200 } 201 SetAccessibilityFocusedArkUI_AccessibilityElementInfo202 void SetAccessibilityFocused(bool accessibilityFocused) 203 { 204 this->accessibilityFocused = accessibilityFocused; 205 } 206 IsAccessibilityFocusedArkUI_AccessibilityElementInfo207 bool IsAccessibilityFocused() const 208 { 209 return accessibilityFocused; 210 } 211 SetSelectedArkUI_AccessibilityElementInfo212 void SetSelected(bool selected) 213 { 214 this->selected = selected; 215 } 216 IsSelectedArkUI_AccessibilityElementInfo217 bool IsSelected() const 218 { 219 return selected; 220 } 221 SetClickableArkUI_AccessibilityElementInfo222 void SetClickable(bool clickable) 223 { 224 this->clickable = clickable; 225 } 226 IsClickableArkUI_AccessibilityElementInfo227 bool IsClickable() const 228 { 229 return clickable; 230 } 231 SetLongClickableArkUI_AccessibilityElementInfo232 void SetLongClickable(bool longClickable) 233 { 234 this->longClickable = longClickable; 235 } 236 IsLongClickableArkUI_AccessibilityElementInfo237 bool IsLongClickable() const 238 { 239 return longClickable; 240 } 241 SetEnabledArkUI_AccessibilityElementInfo242 void SetEnabled(bool enabled) 243 { 244 this->enabled = enabled; 245 } 246 IsEnabledArkUI_AccessibilityElementInfo247 bool IsEnabled() const 248 { 249 return enabled; 250 } 251 SetPasswordArkUI_AccessibilityElementInfo252 void SetPassword(bool isPassword) 253 { 254 this->password = isPassword; 255 } 256 IsPasswordArkUI_AccessibilityElementInfo257 bool IsPassword() const 258 { 259 return password; 260 } 261 SetScrollableArkUI_AccessibilityElementInfo262 void SetScrollable(bool scrollable) 263 { 264 this->scrollable = scrollable; 265 } 266 IsScrollableArkUI_AccessibilityElementInfo267 bool IsScrollable() const 268 { 269 return scrollable; 270 } 271 SetEditableArkUI_AccessibilityElementInfo272 void SetEditable(bool editable) 273 { 274 this->editable = editable; 275 } 276 IsEditableArkUI_AccessibilityElementInfo277 bool IsEditable() const 278 { 279 return editable; 280 } 281 SetHintArkUI_AccessibilityElementInfo282 void SetHint(bool hint) 283 { 284 this->hint = hint; 285 } 286 IsHintArkUI_AccessibilityElementInfo287 bool IsHint() const 288 { 289 return hint; 290 } 291 SetAccessibilityGroupArkUI_AccessibilityElementInfo292 void SetAccessibilityGroup(bool accessibilityGroup) 293 { 294 this->accessibilityGroup = accessibilityGroup; 295 } 296 GetAccessibilityGroupArkUI_AccessibilityElementInfo297 bool GetAccessibilityGroup() const 298 { 299 return accessibilityGroup; 300 } 301 302 void SetRect(const ArkUI_AccessibleRect& rect); GetScreenRectArkUI_AccessibilityElementInfo303 ArkUI_AccessibleRect GetScreenRect() const 304 { 305 return screenRect; 306 } 307 308 void SetRangeInfo(const ArkUI_AccessibleRangeInfo& rangeInfo); GetRangeInfoArkUI_AccessibilityElementInfo309 ArkUI_AccessibleRangeInfo GetRangeInfo() const 310 { 311 return rangeInfo; 312 } 313 314 void SetGridInfo(const ArkUI_AccessibleGridInfo& gridInfo); GetGridInfoArkUI_AccessibilityElementInfo315 ArkUI_AccessibleGridInfo GetGridInfo() const 316 { 317 return grid; 318 } 319 320 void SetGridItemInfo(const ArkUI_AccessibleGridItemInfo& gridItemInfo); GetGridItemInfoArkUI_AccessibilityElementInfo321 ArkUI_AccessibleGridItemInfo GetGridItemInfo() const 322 { 323 return gridItem; 324 } 325 326 void ClearChildNodeIds(); 327 void AddChildNodeId(int64_t childNodeId); GetChildNodeIdsArkUI_AccessibilityElementInfo328 const std::vector<int64_t>& GetChildNodeIds() const 329 { 330 return childNodeIds; 331 } 332 333 void ClearOperationActions(); 334 void AddOperationAction(const ArkUI_AccessibleAction& action); GetOperationActionsArkUI_AccessibilityElementInfo335 const std::vector<ArkUI_AccessibleAction>& GetOperationActions() const 336 { 337 return operationActions; 338 } 339 SetComponentTypeArkUI_AccessibilityElementInfo340 void SetComponentType(const std::string& componentType) 341 { 342 this->componentType = componentType; 343 } 344 GetComponentTypeArkUI_AccessibilityElementInfo345 std::string GetComponentType() const 346 { 347 return componentType; 348 } 349 SetContentsArkUI_AccessibilityElementInfo350 void SetContents(const std::string& contents) 351 { 352 this->contents = contents; 353 } 354 GetContentsArkUI_AccessibilityElementInfo355 std::string GetContents() const 356 { 357 return contents; 358 } 359 SetHintTextArkUI_AccessibilityElementInfo360 void SetHintText(const std::string& hintText) 361 { 362 this->hintText = hintText; 363 } 364 GetHintTextArkUI_AccessibilityElementInfo365 std::string GetHintText() const 366 { 367 return hintText; 368 } 369 SetAccessibilityTextArkUI_AccessibilityElementInfo370 void SetAccessibilityText(const std::string& accessibilityText) 371 { 372 this->accessibilityText = accessibilityText; 373 } 374 GetAccessibilityTextArkUI_AccessibilityElementInfo375 std::string GetAccessibilityText() const 376 { 377 return accessibilityText; 378 } 379 SetAccessibilityDescriptionArkUI_AccessibilityElementInfo380 void SetAccessibilityDescription(const std::string& accessibilityDescription) 381 { 382 this->accessibilityDescription = accessibilityDescription; 383 } 384 GetAccessibilityDescriptionArkUI_AccessibilityElementInfo385 std::string GetAccessibilityDescription() const 386 { 387 return accessibilityDescription; 388 } 389 SetAccessibilityLevelArkUI_AccessibilityElementInfo390 void SetAccessibilityLevel(const std::string& accessibilityLevel) 391 { 392 this->accessibilityLevel = accessibilityLevel; 393 } 394 GetAccessibilityLevelArkUI_AccessibilityElementInfo395 std::string GetAccessibilityLevel() const 396 { 397 return accessibilityLevel; 398 } 399 SetBackgroundColorArkUI_AccessibilityElementInfo400 void SetBackgroundColor(const std::string& backgroundColor) 401 { 402 this->backgroundColor = backgroundColor; 403 } 404 GetBackgroundColorArkUI_AccessibilityElementInfo405 std::string GetBackgroundColor() const 406 { 407 return backgroundColor; 408 } 409 SetBackgroundImageArkUI_AccessibilityElementInfo410 void SetBackgroundImage(const std::string& backgroundImage) 411 { 412 this->backgroundImage = backgroundImage; 413 } 414 GetBackgroundImageArkUI_AccessibilityElementInfo415 std::string GetBackgroundImage() const 416 { 417 return backgroundImage; 418 } 419 SetBlurArkUI_AccessibilityElementInfo420 void SetBlur(const std::string& blur) 421 { 422 this->blur = blur; 423 } 424 GetBlurArkUI_AccessibilityElementInfo425 std::string GetBlur() const 426 { 427 return blur; 428 } 429 SetHitTestBehaviorArkUI_AccessibilityElementInfo430 void SetHitTestBehavior(const std::string& hitTestBehavior) 431 { 432 this->hitTestBehavior = hitTestBehavior; 433 } 434 GetHitTestBehaviorArkUI_AccessibilityElementInfo435 std::string GetHitTestBehavior() const 436 { 437 return hitTestBehavior; 438 } 439 440 private: 441 int32_t pageId = 0; 442 int32_t textBeginSelected = 0; 443 int32_t textEndSelected = 0; 444 int32_t currentIndex = 0; 445 int32_t beginIndex = 0; 446 int32_t endIndex = 0; 447 int32_t itemCount = 0; 448 int32_t offset = 0; 449 int32_t zIndex = 0; 450 float opacity = 0.0f; 451 452 int64_t parentId = 0; 453 int32_t elementId = 0; 454 455 bool checkable = false; 456 bool checked = false; 457 bool focusable = false; 458 bool focused = false; 459 bool visible = false; 460 bool accessibilityFocused = false; 461 bool selected = false; 462 bool clickable = false; 463 bool longClickable = false; 464 bool enabled = false; 465 bool password = false; 466 bool scrollable = false; 467 bool editable = false; 468 bool hint = false; 469 bool accessibilityGroup = false; 470 471 ArkUI_AccessibleRect screenRect; 472 ArkUI_AccessibleRangeInfo rangeInfo; 473 ArkUI_AccessibleGridInfo grid; 474 ArkUI_AccessibleGridItemInfo gridItem; 475 476 std::vector<int64_t> childNodeIds; 477 std::vector<ArkUI_AccessibleAction> operationActions; 478 479 std::string componentType; 480 std::string contents; 481 std::string hintText; 482 std::string accessibilityText; 483 std::string accessibilityDescription; 484 485 std::string accessibilityLevel; 486 std::string backgroundColor; 487 std::string backgroundImage; 488 std::string blur; 489 std::string hitTestBehavior; 490 }; 491 492 struct ArkUI_AccessibilityEventInfo { 493 public: 494 ArkUI_AccessibilityEventInfo() = default; 495 GetEventTypeArkUI_AccessibilityEventInfo496 ArkUI_AccessibilityEventType GetEventType() const 497 { 498 return eventType; 499 } 500 SetEventTypeArkUI_AccessibilityEventInfo501 void SetEventType(ArkUI_AccessibilityEventType eventType_) 502 { 503 eventType = eventType_; 504 } 505 GetPageIdArkUI_AccessibilityEventInfo506 int32_t GetPageId() const 507 { 508 return pageId; 509 } 510 SetPageIdArkUI_AccessibilityEventInfo511 void SetPageId(int32_t pageId) 512 { 513 this->pageId = pageId; 514 } 515 GetRequestFocusIdArkUI_AccessibilityEventInfo516 int32_t GetRequestFocusId() const 517 { 518 return requestFocusId; 519 } 520 SetRequestFocusIdArkUI_AccessibilityEventInfo521 void SetRequestFocusId(int32_t requestFocusId) 522 { 523 this->requestFocusId = requestFocusId; 524 } 525 GetElementInfoArkUI_AccessibilityEventInfo526 ArkUI_AccessibilityElementInfo* GetElementInfo() const 527 { 528 return elementInfo; 529 } 530 SetElementInfoArkUI_AccessibilityEventInfo531 void SetElementInfo(ArkUI_AccessibilityElementInfo* elementInfo) 532 { 533 this->elementInfo = elementInfo; 534 } 535 GetTextAnnouncedForAccessibilityArkUI_AccessibilityEventInfo536 std::string GetTextAnnouncedForAccessibility() const 537 { 538 return textAnnouncedForAccessibility; 539 } 540 SetTextAnnouncedForAccessibilityArkUI_AccessibilityEventInfo541 void SetTextAnnouncedForAccessibility(const std::string& textAnnouncedForAccessibility) 542 { 543 this->textAnnouncedForAccessibility = textAnnouncedForAccessibility; 544 } 545 546 private: 547 ArkUI_AccessibilityEventType eventType = ARKUI_ACCESSIBILITY_NATIVE_EVENT_TYPE_INVALID; 548 int32_t pageId = 0; 549 int32_t requestFocusId = 0; 550 ArkUI_AccessibilityElementInfo* elementInfo = nullptr; 551 std::string textAnnouncedForAccessibility; 552 }; 553 554 // suport multithreads 555 struct ArkUI_AccessibilityElementInfoList { 556 public: 557 ArkUI_AccessibilityElementInfoList() = default; 558 ArkUI_AccessibilityElementInfo* AddAndGetElementInfo(); 559 bool CopyAccessibilityElementInfo(std::vector<ArkUI_AccessibilityElementInfo>& infos); 560 561 private: 562 std::mutex mutex_; 563 std::list<ArkUI_AccessibilityElementInfo> elementInfos_; 564 }; 565 566 struct ArkUI_AccessibilityActionArguments { 567 public: ArkUI_AccessibilityActionArgumentsArkUI_AccessibilityActionArguments568 ArkUI_AccessibilityActionArguments(std::map<std::string, std::string> actionArguments) 569 { 570 actionArguments_.swap(actionArguments); 571 } 572 const char* FindValueByKey(const char* key); 573 574 private: 575 std::map<std::string, std::string> actionArguments_; 576 }; 577 578 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ACCESSIBILITY_NATIVE_INTERFACE_ACCESSIBILITY_IMPL_H