FBAccessibilityTraits.m 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. /**
  2. * Copyright (c) 2015-present, Facebook, Inc.
  3. * All rights reserved.
  4. *
  5. * This source code is licensed under the BSD-style license found in the
  6. * LICENSE file in the root directory of this source tree. An additional grant
  7. * of patent rights can be found in the PATENTS file in the same directory.
  8. */
  9. #import "FBAccessibilityTraits.h"
  10. NSArray<NSString *> *FBAccessibilityTraitsToStringsArray(unsigned long long traits) {
  11. NSMutableArray<NSString *> *traitStringsArray;
  12. NSNumber *key;
  13. static NSDictionary<NSNumber *, NSString *> *traitsMapping;
  14. static dispatch_once_t onceToken;
  15. dispatch_once(&onceToken, ^{
  16. NSMutableDictionary<NSNumber *, NSString *> *mapping = [@{
  17. @(UIAccessibilityTraitNone): @"None",
  18. @(UIAccessibilityTraitButton): @"Button",
  19. @(UIAccessibilityTraitLink): @"Link",
  20. @(UIAccessibilityTraitHeader): @"Header",
  21. @(UIAccessibilityTraitSearchField): @"SearchField",
  22. @(UIAccessibilityTraitImage): @"Image",
  23. @(UIAccessibilityTraitSelected): @"Selected",
  24. @(UIAccessibilityTraitPlaysSound): @"PlaysSound",
  25. @(UIAccessibilityTraitKeyboardKey): @"KeyboardKey",
  26. @(UIAccessibilityTraitStaticText): @"StaticText",
  27. @(UIAccessibilityTraitSummaryElement): @"SummaryElement",
  28. @(UIAccessibilityTraitNotEnabled): @"NotEnabled",
  29. @(UIAccessibilityTraitUpdatesFrequently): @"UpdatesFrequently",
  30. @(UIAccessibilityTraitStartsMediaSession): @"StartsMediaSession",
  31. @(UIAccessibilityTraitAdjustable): @"Adjustable",
  32. @(UIAccessibilityTraitAllowsDirectInteraction): @"AllowsDirectInteraction",
  33. @(UIAccessibilityTraitCausesPageTurn): @"CausesPageTurn",
  34. @(UIAccessibilityTraitTabBar): @"TabBar"
  35. } mutableCopy];
  36. #if __clang_major__ >= 16
  37. // Add iOS 17.0 specific traits if available
  38. if (@available(iOS 17.0, *)) {
  39. [mapping addEntriesFromDictionary:@{
  40. @(UIAccessibilityTraitToggleButton): @"ToggleButton",
  41. @(UIAccessibilityTraitSupportsZoom): @"SupportsZoom"
  42. }];
  43. }
  44. #endif
  45. traitsMapping = [mapping copy];
  46. });
  47. traitStringsArray = [NSMutableArray array];
  48. for (key in traitsMapping) {
  49. if (traits & [key unsignedLongLongValue] && nil != traitsMapping[key]) {
  50. [traitStringsArray addObject:(id)traitsMapping[key]];
  51. }
  52. }
  53. return [traitStringsArray copy];
  54. }